View previous topic :: View next topic |
Author |
Message |
Sym Tux's lil' helper
Joined: 05 Mar 2003 Posts: 114 Location: Bùsan
|
Posted: Mon Aug 18, 2003 10:11 am Post subject: MySQL, php e apache: gestione backup e carico |
|
|
Buongiorno ragazzi Vi spiego la situazione:
Ho due macchine con mysql, php e apache installati, dovrei gestire il backup dei dati da una macchina all'altra (in particolare il database) ed eventualmente (se si può) dividere il carico di richieste su entrambe le macchine. Visto che è la prima volta che faccio una cosa del genere e che comunque nel forum ci sono sistemisti molto esperti, mi chiedevo se avreste qualche dritta da darmi...insomma...come vi muovereste voi? Ovviamente mi basta qualche buon link a doc da cui partire. Ciao _________________ "Dream on
Do you believe...all the things that you are seeing are true?
The Start's where the End's leading you
Do you believe...all's as twisted as one would perceive?
Seek the Answer and soon you'll believe" |
|
Back to top |
|
|
riccio n00b
Joined: 26 Jun 2003 Posts: 21
|
Posted: Mon Aug 18, 2003 10:46 am Post subject: Re: MySQL, php e apache: gestione backup e carico |
|
|
Sym wrote: | Buongiorno ragazzi Vi spiego la situazione:
Ho due macchine con mysql, php e apache installati, dovrei gestire il backup dei dati da una macchina all'altra (in particolare il database) ed eventualmente (se si può) dividere il carico di richieste su entrambe le macchine. Visto che è la prima volta che faccio una cosa del genere e che comunque nel forum ci sono sistemisti molto esperti, mi chiedevo se avreste qualche dritta da darmi...insomma...come vi muovereste voi? Ovviamente mi basta qualche buon link a doc da cui partire. Ciao |
Per il backup potrebbe bastare una export del database Mysql della macchina A salvato sulla B.
Per farlo potresti mettere un job nel crontab della B che ad una certa ora esegue un mysqldump collegandosi alla macchina A.
Oppure lo esegui in locale sulla macchina A e poi lo sposti con scp o ftp.
http://www.devarticles.com/art/1/62
http://www.sitepoint.com/article/678
Per il bilanciamento di carico una soluzione molto ben funzionante e' avere davanti ai due server un server LVS che "smisti" il carico tra i vari apache.
Il problema che puo' sorgerti pero' e' nella consistenza dei dati, conviene utilizzare due database Mysql solo se l'accesso fatto dagli utenti e' in sola lettura, altrimenti ti troverai dopo poco i due database non allineati.
Nel caso che gli utenti possano sia scrivere che leggere ti consiglierei invece di utilizzare solo il db della macchina A, e di usare la replicazione di Mysql per tenere sulla macchina B una immagine sempre aggiornata e pronta da tirar su in caso di problemi.
Per esagerare potresti mettere un serverino (per fare questo lavoro ti basta anche un pentium volendo) davanti che bilancia il carico tra i due apache dietro (volendo i server dietro possono essere nattati) i cui php interrogano un solo DB posto sulla macchina A, sulla macchina B metti un server Mysql in replication e con Mon monitorizzi lo stato del database A, nel caso avvengano problemi con Mon fai diventare il database B quello attivo.
Questa e' una soluzione molto articolata, ma e' anche il massimo come alta affidabilita', se hai bisogno di qualche aiuto chiedi pure, anche io sto studiando queste soluzioni.
Ciao
Qualche link:
LVS:
http://www.linuxvirtualserver.org/
Mon + heartbeat
http://www.geocities.com/latompa/ha/apache_heartbeat.html
Mysql replication:
http://www.mysql.com/doc/en/Replication.html
http://jeremy.zawodny.com/mysql/managing-mysql-replication.html |
|
Back to top |
|
|
cerri Bodhisattva
Joined: 05 Mar 2003 Posts: 2957 Location: # init S
|
Posted: Mon Aug 18, 2003 11:09 am Post subject: |
|
|
Ho una soluzione come dici, ma con mysql su macchine adhoc.
si puo' fare ma e' un po' piu' complesso di quello che pensi (nel senso che il bilanciamento deve essere costituito a monte del sistema).
Mysql permette la replica one-way, ma ci sono modi per farla anche two-way, devi solo stare attento a non sputtanare il db
Per Apache, ti basta una sincronizzazione del fs ogni tot minuti, se i dati sono abbastanza statici (intendo i files, non l'applicazione). _________________ Enjoy your freedom.
Sex is like hacking. You get in, you get out, and you hope you didnt leave something behind that can be traced back to you.
<----------------------->
Andrea Cerrito |
|
Back to top |
|
|
Sym Tux's lil' helper
Joined: 05 Mar 2003 Posts: 114 Location: Bùsan
|
Posted: Mon Aug 18, 2003 12:14 pm Post subject: |
|
|
Vi ringrazio ragazzi, ora ho una buona base con cui partire. Ora cercherò di vedere qual è la soluzione più idonea al mio caso e poi eventualmente sarò di nuovo qui a rompervi. Grazie per la disponibilità _________________ "Dream on
Do you believe...all the things that you are seeing are true?
The Start's where the End's leading you
Do you believe...all's as twisted as one would perceive?
Seek the Answer and soon you'll believe" |
|
Back to top |
|
|
Sym Tux's lil' helper
Joined: 05 Mar 2003 Posts: 114 Location: Bùsan
|
Posted: Mon Aug 18, 2003 1:38 pm Post subject: |
|
|
Stavo leggendo la guida mon+heartbeat per apache...molto interessante Però mi è venuto un dubbio...con apache e il virtualhost io posso assegnare un indirizzo fittizio a cui far rispondere il server web. Con MySQL invece come viene gestita la cosa? Nel senso, se mi va giù la macchina master l'applicazione non dovrà più interrogare il database master, ma quello slave che ha un ip diverso. Ora, c'è una feature anche in MySQL che fa una cosa del genere oppure se ne occupa Mon? Grazie _________________ "Dream on
Do you believe...all the things that you are seeing are true?
The Start's where the End's leading you
Do you believe...all's as twisted as one would perceive?
Seek the Answer and soon you'll believe" |
|
Back to top |
|
|
Ginko Guru
Joined: 01 May 2002 Posts: 371 Location: nearby my linux laptop
|
Posted: Mon Aug 18, 2003 1:47 pm Post subject: |
|
|
Per il bilanciamento del carico di Apache basterebbe un semplice DNS round-robin, ossia l'assegnazione di piu' indirizzi IP allo stesso nome DNS. Ad ogni lookup DNS risponde con un indirizzo diverso permettendo cosi' di bilanciare il carico sui server.
Il problema e' naturalmente nella gestione delle sessioni, in questo caso puoi risolvere con un bel Apache reverse proxy di fronte ai due server, con regole - magari mediante uso di cookies - che permettano la corretta gestione delle sessioni.
L'argomento comunque e' vasto e di documentazione in giro ce n'e' tanta.
Saluti
--Gianluca |
|
Back to top |
|
|
cerri Bodhisattva
Joined: 05 Mar 2003 Posts: 2957 Location: # init S
|
Posted: Mon Aug 18, 2003 1:59 pm Post subject: |
|
|
Sym wrote: | Ora, c'è una feature anche in MySQL che fa una cosa del genere oppure se ne occupa Mon? Grazie |
mysql docs wrote: | MySQL only supports one master and many slaves. Later we will add a voting algorithm to automatically change master if something goes wrong with the current master. We will also introduce 'agent' processes to help do load balancing by sending select queries to different slaves. |
heartbeat fa al caso tuo _________________ Enjoy your freedom.
Sex is like hacking. You get in, you get out, and you hope you didnt leave something behind that can be traced back to you.
<----------------------->
Andrea Cerrito |
|
Back to top |
|
|
riccio n00b
Joined: 26 Jun 2003 Posts: 21
|
Posted: Mon Aug 18, 2003 2:01 pm Post subject: |
|
|
Sym wrote: | Stavo leggendo la guida mon+heartbeat per apache...molto interessante Però mi è venuto un dubbio...con apache e il virtualhost io posso assegnare un indirizzo fittizio a cui far rispondere il server web. Con MySQL invece come viene gestita la cosa? Nel senso, se mi va giù la macchina master l'applicazione non dovrà più interrogare il database master, ma quello slave che ha un ip diverso. Ora, c'è una feature anche in MySQL che fa una cosa del genere oppure se ne occupa Mon? Grazie |
Per il Mysql potresti fare in due modi diversi:
1)Hai pieno controllo del lato applicativo (il php) a questo punto cambi la connect semplice in :
<?php
/*
Description: Connect to the first available mysql master server
Author: Nathan Cassano
License: Public
*/
function mysql_rep_connect(){
$timeout = 15;
$mysql_servers = array(
array("mysql1.yourdomain.tdl", "username", "password"),
array("mysql2.yourdomain.tdl, "username", "password")
);
$connection = false;
foreach($mysql_servers as $server){
list($hostname, $username, $passwd) = $server;
if($fp = fsockopen($hostname, 3306, &$errno, &$errstr, $timeout)){
fclose($fp);
$connection = @mysql_pconnect($hostname, $username, $passwd);
if($connection > 0)break;
}
}
return $connection;
}
?>
Questa funzione prova a collegarsi ad una serie di server Mysql quindi mettendo il master come primario e lo slave come secondario hai ottenuto che alla morte del master i collegamenti vengano rediretti sullo slave.
2)Fai "ascoltare" il servizio Mysql su un determinato IP (slegato da quello delle macchine) alla "morte" del master mon+heartbeat devono spostare l'IP sul nodo Slave ed eventualmente far ripartire il Mysql, a questo punto per i client il Mysql e' di nuovo disponibile in maniera trasparente all'applicazione.
In entrambi i casi attenzione alla consistenza dei dati sul DB, e' il problema piu' spinoso da risolvere . |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|