Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
MySQL, php e apache: gestione backup e carico
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian)
View previous topic :: View next topic  
Author Message
Sym
Tux's lil' helper
Tux's lil' helper


Joined: 05 Mar 2003
Posts: 114
Location: Bùsan

PostPosted: Mon Aug 18, 2003 10:11 am    Post subject: MySQL, php e apache: gestione backup e carico Reply with quote

Buongiorno ragazzi :o 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 :D
_________________
"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
View user's profile Send private message
riccio
n00b
n00b


Joined: 26 Jun 2003
Posts: 21

PostPosted: Mon Aug 18, 2003 10:46 am    Post subject: Re: MySQL, php e apache: gestione backup e carico Reply with quote

Sym wrote:
Buongiorno ragazzi :o 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 :D


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
View user's profile Send private message
cerri
Bodhisattva
Bodhisattva


Joined: 05 Mar 2003
Posts: 2957
Location: # init S

PostPosted: Mon Aug 18, 2003 11:09 am    Post subject: Reply with quote

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 :twisted:

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
View user's profile Send private message
Sym
Tux's lil' helper
Tux's lil' helper


Joined: 05 Mar 2003
Posts: 114
Location: Bùsan

PostPosted: Mon Aug 18, 2003 12:14 pm    Post subject: Reply with quote

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à :D
_________________
"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
View user's profile Send private message
Sym
Tux's lil' helper
Tux's lil' helper


Joined: 05 Mar 2003
Posts: 114
Location: Bùsan

PostPosted: Mon Aug 18, 2003 1:38 pm    Post subject: Reply with quote

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
View user's profile Send private message
Ginko
Guru
Guru


Joined: 01 May 2002
Posts: 371
Location: nearby my linux laptop

PostPosted: Mon Aug 18, 2003 1:47 pm    Post subject: Reply with quote

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
View user's profile Send private message
cerri
Bodhisattva
Bodhisattva


Joined: 05 Mar 2003
Posts: 2957
Location: # init S

PostPosted: Mon Aug 18, 2003 1:59 pm    Post subject: Reply with quote

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
View user's profile Send private message
riccio
n00b
n00b


Joined: 26 Jun 2003
Posts: 21

PostPosted: Mon Aug 18, 2003 2:01 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) All times are GMT
Page 1 of 1

 
Jump to:  
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