Prvo i osnovno: doljnji blok i konfe koristite na vlastitu odgovornost. Ako itko dobije otkaz, probleme, novčane kazne ja za to nisam odgovoran. Savjet je svima pročitati iscrpnu haproxy konfiguraciju prije primjene kako bi ste razumijeli što je što.
Zaboravio sam dati primjer haproxy konfe. Znači, ako imaš haproxy evo *veoma* simplificirani primjer koji radi za galeru (ovaj blok dolje će raditi, ali gotovo sigurno nije optimalan za tvoj slučaj ili većinu drugih):
- Kod:
backend galera
mode tcp
option srvtcpka
option mysql-check user monitor post-41
timeout connect 20s
timeout server 240m
balance roundrobin
server baza1 1.2.3.4:3306 weight 10 maxconn 150 check port 3306 inter 6s fastinter 2s rise 5 fall 5
server baza2 4.5.6.7:3308 weight 10 maxconn 150 check port 3308 inter 6s fastinter 2s rise 5 fall 5
server baza3 8.9.10.11:3306 weight 10 maxconn 200 check port 3306 inter 6s fastinter 2s rise 5 fall 5 backup
frontend mysql
bind 100.100.100.100:3306
mode tcp
option clitcpka
option tcplog
option log-separate-errors
maxconn 8192
timeout client 240m
default_backend galera
backend dio:
baza1/2/3 su proizvoljna imena za db servere, backup na kraju baza3 znači da se baza3 neće koristiti sve dok baza1 i baza2 ne riknu. check port 3306 znači da će provjeravati dostupnost porta 3306 i ako nije onda će označiti backend kao mrtvim i prestat slat querye tamo. "balance roundrobin" znač ida će jednako slati requeste na baza1 i baza2 (postoje i druge opcije poput leastconn, pogledati dokumetnaciju) Na ovo za galeru treba dodati da prepoznaje DONOR i ostale statuse kako bi i njih maknuo iz poola (3306 je dostupan u tim slučajavima).
frontend dio:
bind 100.100.100.100:3306 ti je IP adresa na koju će se haproxy bindat i ono na što šalješ SQL zahtjeve.
Ostale elemente nisam namjerno objasnio da se malo pogleda i dokumentacija. Poanta gornjeg bloka je da haproxy sam može slati requeste na različite backende i ako neki prestane raditi da se makne iz poola. requesti mogu ići i na jedan nod, tj. 2 ili više mogu biti proglašena backupima, a tu postoji više alternativnih scenarija kako se to može hendlat.
UPOZORENJE: Ovo gore nije niti iz aviona „optimizirani“ blok nego vrlo generički opisni segment haproxy konfiguracije.
Niti u najgoroj domeni ludila nemojte koristiti gornji blok niti njegove ekvivalente u asinhronoj replikaciji bilo kakve vrste baze (klasični master->slave bez obzira da li je mysql, postgres, redis ili nešto tisućito).