HAproxy MySQL-Failover

HAproxy MySQL-Failover

Ich versuche, einen HA-Cluster mit Percona xtraDB Cluster für die MySQL-Replikation und HAproxy für den Lastausgleich einzurichten.

HAproxy funktioniert wirklich gut mit Apache. Wenn Apache abstürzt oder nicht reagiert, schaltet HAproxy auf einen anderen Knoten um.

Mein Problem beginnt mit MySQL. Ich habe auch MySQL im selben HAproxy eingerichtet, aber wenn MySQL nicht antwortet, schaltet HAproxy keinen anderen Knoten ein. HAproxy erkennt jedoch, dass MySQL nicht antwortet, weil der MySQL-Server ausgefallen ist, wenn ich die HAproxy-Statistiken überprüfe.

Meine Frage ist, ist es möglich, zwei Ressourcen in HAproxy einzurichten? Kann er prüfen, ob Apache aktiv ist und einen anderen Knoten einschalten, wenn nicht, UND prüfen, ob MySQL aktiv ist und einen anderen Knoten einschalten, wenn nicht?

HAproxy.conf:

[...]
frontend redmine
    bind 192.168.7.149:80
    reqadd X-Forwarded-Proto:\ http
    default_backend redmine

frontend redmineS
    bind 192.168.7.149:443 ssl crt /etc/ssl/private/quipment.fr.pem
    reqadd X-Forwarded-Proto:\ https
    default_backend redmine

backend redmine 192.168.7.149:80
    redirect scheme https if !{ ssl_fc }
    mode http
    balance roundrobin
    option http-server-close
    timeout http-keep-alive 3000
    option forwardfor
    cookie PHPSESSID prefix
    cookie SRVNAME insert
    server xtra1 192.168.7.151:80 cookie x1 check
    server xtra2 192.168.7.147:80 cookie x2 check
    server xtra3 192.168.7.152:80 cookie x3 check

listen mysql-cluster 192.168.7.149:3306
    mode tcp
    balance roundrobin
    option  httpchk
    server xtra1 192.168.7.151:3306 check port 9200 inter 1000 rise 3 fall 1
    server xtra2 192.168.7.147:3306 check port 9200 inter 1000 rise 3 fall 1
    server xtra3 192.168.7.152:3306 check port 9200 inter 1000 rise 3 fall 1
[...]

Antwort1

Ihr HAProxy führt keine Tests auf MySQL-Integrität durch, da Sie in Ihrem MySQL-Abschnitt angeben, Tests für http durchzuführen (mit der Zeile option httpchk). Sie sollten verwendenOption MySQL-Checkes müsste also heißen

listen mysql-cluster 192.168.7.149:3306
    mode tcp
    balance roundrobin
    option  mysql-check user a_test_user
    server xtra1 192.168.7.151:3306 check inter 1000 rise 3 fall 1
    server xtra2 192.168.7.147:3306 check inter 1000 rise 3 fall 1
    server xtra3 192.168.7.152:3306 check inter 1000 rise 3 fall 1

Und Sie sollten in Ihrer MySQL-Datenbank den Benutzer a_test_user haben, der Verbindungen von HAProxy zulässt.

verwandte Informationen