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.