In questa pagina presentiamo l'utilizzo di HAproxy per bilanciare il carico su un database.
Nel seguito sono riportate alcune informazioni di interesse organizzate in paragrafi specifici: Introduzione, Installazione e configurazione, Esempi, Varie ed eventuali, ...
Il contenuto di questo documento e' tecnico. E' opportuna una conoscenza dell'architettura MySQL e della Replication.
Negli esempi che seguono vengono utilizzate le sintassi valide sugli ambienti piu' recenti ovvero: CentOS 7.3, MySQL 5.7 ed HAproxy 1.7 ma valgono per altri sistemi, programmi e versioni naturalmente... mutatis mudandis!
Nella configurazione dei load balancer una semplice configurazione consiste nel verificare se la porta 3306 dei server e' in LISTEN.
download haproxy-1.3.26-1.el5.x86_64.rpm rpm -ilv haproxy-1.3.26-1.el5.x86_64.rpm vi /etc/haproxy/haproxy.cfg haproxy -f /etc/haproxy/haproxy.cfg -D [WARNING] 086/123022 (13774) : config : 'option httplog' not usable with frontend 'mysql-front37' (needs 'mode http'). Falling back to 'option tcplo mysql --host=dev-spdb-01.self.csi.it --port=3306 --user=root -pXXX select @@hostname, @@port; mysql --host=dev-spdb-01.self.csi.it --port=3307 --user=root -pXXX Warning: Using a password on the command line interface can be insecure. ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0 --user=mybck --password='XXX' mysql --host=dev-spdb-01.self.csi.it --port=3307 --user=mybck --password='XXX' mysql --host=dev-spdb-01.self.csi.it --port=3309 --user=mybck --password='XXX'https://www.haproxy.com/documentation/aloha/10-0/traffic-management/lb-layer7/health-checks/
global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon defaults mode http log global option dontlognull option httpclose option tcplog option forwardfor option redispatch timeout connect 10000 # default 10 second time out if a backend is not found timeout client 300000 timeout server 300000 maxconn 60000 retries 3 #--------------------------------------------------------------------- # main frontend which proxys to the backends #--------------------------------------------------------------------- frontend mysql-front37 bind *:3307 mode tcp default_backend mysql-back37 backend mysql-back37 mode tcp balance leastconn server mysql37 tst-domdb37.csi.it:3316Un altro esempio (master-master):
global log 127.0.0.1 local0 notice user haproxy group haproxy defaults log global retries 2 timeout connect 3000 timeout server 5000 timeout client 5000 listen mysql-cluster bind 0.0.0.0:3306 mode tcp option tcplog log global option mysql-check user haproxy_check balance roundrobin server database1 10.2.10.102:3306 check server database2 10.2.10.103:3306 check server database3 10.2.10.104:3306 check
La configurazione del load balancer dipende dal... load balancer!
Ecco un esempio per HAProxy (file /etc/haproxy/haproxy.cfg):
frontend mysql-gr-front bind *:3306 mode tcp default_backend mysql-gr-back backend mysql-gr-back mode tcp balance leastconn option httpchk server mysql1 192.168.1.92:3306 check port 6446 inter 1000 rise 1 fall 2 server mysql2 192.168.1.93:3306 check port 6446 inter 1000 rise 1 fall 2 server mysql3 192.168.1.94:3306 check port 6446 inter 1000 rise 1 fall 2
Le configurazioni ed i controlli possibili sono innumerevoli
e dipendono dall'architettura presente e dalle funzionalita' desiderate.
Ad esempio si puo' voler dare precedenza a DB server locali,
escludere i nodi che effettuano backup o sono in manutenzione, ...
e' semplice modificare la query di controllo eseguita da xinetd
o le politiche di bilanciamento configurate sul load balancer
per ottenere il risultato voluto.
La scelta del load balancer presenta molteplici possibilita'
in termini di funzionalita', prestazioni, costi, ...
Tra i moltissimi fornitori di load balancer Hardware:
F5 BIG-IP Local Traffic Manager (LTM),
Citrix NetScaler,
Cisco,
Radware,
Kemp,
Barracuda,
...
Tra i moltissimi fornitori di load balancer Software generici:
HAProxy,
NGINX,
...
Ed infine i load balancer specifici per MySQL:
ProxySQL,
Max Scale,
MySQL Router,
...
Per completare il quadro si deve ricordare che praticamente tutti i fornitori HW
hanno anche una versione SW, che tutti i balancer SW possono
essere installati su appliance e che per fare bilanciamento
non e' strettamente necessario un load balancer
(lo fanno anche il DNS ed i DB driver).
Titolo: HAProxy
Livello: Esperto
Data:
1 Aprile 2017
Versione: 1.0.0 - 1 Aprile 2017
Autore: mail [AT] meo.bogliolo.name