Newsgroup: it.comp.os.linux.sys
Titolo: bilanciare traffico su server mysql

Ciao a tutti, ho un problema, stavo pensando di realizzare un cluster o 
simile per un db mysql, non ho la più pallida idea di come farlo, ho una 
vaga idea... ma volevo avere ulteriori chiarimenti.
Se era un web avrei inserito una maccina con per esempio virtual server in 
modo da ridirezzionare su 3 o più macchine....ma come mysql non so...
Praticamente questo server mysql riceve numerose richieste su un db molto 
grande e molto spesso si siede... la macchina non ce la fa.. dovrei 
risolvere il problema... affiancando una macchina, due che potranno anche 
aumentare... in modo da bilanciare il lavoro.
Come posso procedere? solitamente si fanno più macchine con db sincronizzati 
o si usa un area dati (tipo nas) condivisa?
Grazie
Stefano 

Come posso procedere? solitamente si fanno più macchine con db sincronizzati 
Un idea potrebbe essere questa, ma non e' detto che sia la soluzione a tutti
i mali:
http://dev.mysql.com/doc/mysql/en/Replication.html
Qualcuno se la sente di consigliare PostgreSQL?
(Io non lo conosco quindi non posso).
Alessandro.

 (Io non lo conosco quindi non posso).
Se l'applicazione è scritta per mysql migrare a postgres può essere
pesante.
Ad ogni modo ho dei DB veramente ma veramente grossi su mysql e non ho mai
avuto problemi.
Chi sviluppa di solito fa le tabelle ma non sa cosa sono gli indici.
Una aggiunta oculata di essi semplifica molto il lavoro, sia su mysql che
su postgresql. Ma oculata e fatta da chi ha esperienza.
Parlando di postgresql, invece, in linea di massima, su query semplici
nelle ultime versioni è leggermente (non tanto) meno veloce di mysql.
Subquery, viste e funzioni evolute non sono confrontabili con mysql che non
le supporta.
Ad ogni modo, postgres è sottovalutato.
Il suo problema è che per ottimizzarlo bisogna documentarsi molto bene e
fare dei grossi tuning (sorattutto con la shm).
Ho una macchina che appena messa in produzione (webserver ad alto traffico
di un sito di un famoso quotidiano) mi dava un load di 20/30 nelle ore di
punta.
Ottimizzando la conf di postgres adesso non si schioda da 0.5 - 0.8 .
Mi sono stupito pure io !!
Max

 
http://dev.mysql.com/doc/mysql/en/Replication.html
Ho guardato e letto.. anche se il mio inglese non è il massimo... ho capito 
un pò di cose... tra cui è previsto un master e n server slave... ma 
essendoci un master devo scrivere solo sul master? se questo è vero non 
posso usare un virtual server... non indovinerei il server su cui 
scrivere... a meno che uso per scrivere il mater e per leggere gli slave 
dietro virtual server...
mi sapete dare qualca altra delucidazione se qualcuno l'ha provata? o 
un'howto...
Grazie
Stefano 

essendoci un master devo scrivere solo sul master?
Anche io l'ho capita cosi', comunque e' una soluzione che non ho mai provato.
Alessandro.


quindi come faccio poi a bilanciare il traffico tra questi? sempre usando un 
virtual server?
quindi bilancerò il traffico su tutti gli slave... e lascerò il master solo 
per le operazioni di scrittura?
Grazie
stefano 

 o simile per un db mysql,
Essenzialmente le strade sono due:
a) replicazione (rodatissima già su mysql 3);
b) mysql cluster (appena messa fuori);
Se non sei un minimo esperto ti sconsiglio la soluzione b), la a) basta
ed avanza.
Tieni conto che sul master (quello sul quale devi scrivere) puoi anche
leggere, e che per gestire tutti gli slave basta ed avanza un round
robin sul dns, un virtual server è quasi superfluo.
-- 
Luca Villani     NOC Manager  -  Wireless Solutions S.p.A.  (Dada Group)
http://www.wseurope.com
          via Castiglione 25, 40124 Bologna Italy
T:
+39 051 2966826
   F:
+39 051 2966800
   M:
+39 348 5298542
   UIN:76272621
GPG public key available

 Vedi un mio post qui?
si ti leggo...
Stefano 

 robin sul dns, un virtual server è quasi superfluo.
mi sapresti dire cos' un round robin e dove trovo info?
Grazie
Stefano 

 SI.
perfetto...  ma se cade il master che succede? devo prendere uno slave 
(l'ultimo penso) e metterlo come master? e soprattutto... ogni quanto 
replica i dati il master sugli slave?
Grazie mile
Stefano 

 mi sapresti dire cos' un round robin e dove trovo info?
Ecco un round robin:
 villo@fidokaos:~$ host 
www.google.it
 
www.google.it
 is an alias for 
www.google.com
.
 
www.google.com
 is an alias for 
www.google.akadns.net
.
 
www.google.akadns.net
 has address 216.239.59.99
 
www.google.akadns.net
 has address 216.239.59.104
 
www.google.akadns.net
 has address 216.239.59.147
 villo@fidokaos:~$
In poche parole si istruisce il dns a dare risposte multiple, ed ogni volta
la sequenza cambia. I vari client prendono il primo indirizzo, così sulle
grandi richieste si bilancia il carico.
Nota bene: se uno dei server va giù, tutte le richieste a quel server
falliscono, nell'esempio riportato significa che il 33% delle richieste
fallisce, però se tieni un TTL abbastanza basso sul dns (tipo 10 secondi)
puoi intervenire a questo livello per eliminare l'indirizzo dal round
robin, e dopo 10 secondi i vari client smettono di ricevere
quell'indirizzo.
-- 
Ciao da Villo  -  GPG public key available
Gli sviluppatori sono tuoi nemici. Non fidarti. (Fabio Coatti)
Protect your Freedom:   
http://www.againsttcpa.com/index.shtml

 e soprattutto... ogni quanto replica i dati il master sugli slave?
La replicazione è molto semplice, il master scrive tutti gli statement
appena eseguiti su un logfile binario, gli slave leggono via rete quegli
statement uno per uno e poi li eseguono.
Quindi la latenza dipende da quanto tempo gli slave ci mettono ad eseguire
gli statement appena letti: se sul master dai un alter table che dura venti
minuti, appena quello passa agli slave questi ultimi stanno venti minuti ad
eseguire l'alter table prima di leggere qualsiasi altra cosa dal master.
Ogni info la puoi trovare sul manuale di mysql:
 
http://dev.mysql.com/doc/mysql/en/Replication.html


 
http://dev.mysql.com/doc/mysql/en/Replication.html
Leggo con attenzione anche se il mio inglese fa a dir poco pena...
Grazie
Stefano 

 quell'indirizzo.
non so se sbaglio ma se non erro non č un'ottima soluzione se rivolta verso 
il web... perchč generi un casino di traffico dns tenere ttl molto bassi... 
nel mio caso essendo tutto in lan perň potrei anche farlo....
:-) sempre che il virtual server non riconosca in automatico i failover e 
corregga la deviazione del traffico perchč potrebbe essere una soluzione 
migliore...
Grazie
Stefano 

 una soluzione migliore...  
Okkio, che a quel punto il single point of failure diventa la macchina
che gestisce il reindirizzamento...


 Infatti esiste linux-ha.org...
esatto... pensavo di mettere un paio di linux-ha... anche se devo ancora 
capire un paio di cose :-)
Grazie a tutti!!!
Stefano