HAProxy con database

Bozza

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!

Introduzione

MySQL Replication with a load balancer MySQL Replication with a load balancer

Nella configurazione dei load balancer una semplice configurazione consiste nel verificare se la porta 3306 dei server e' in LISTEN.

Installazione e configurazione

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:3316
Un 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.

Varie ed eventuali

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 (4/5)
Data: 1 Aprile 2017
Versione: 1.0.0 - 1 Aprile 2017
Autore: mail [AT] meo.bogliolo.name