HAproxy mysql 故障转移

HAproxy mysql 故障转移

我尝试使用 Percona xtraDB Cluster 设置 HA 集群以实现 MySQL 复制,并使用 HAproxy 实现负载平衡。

HAproxy 与 apache 配合得很好,当 apache 崩溃或者没有响应时,HAproxy 会切换到另一个节点。

我的问题始于 MySQL,我也在同一个 HAproxy 中设置了 MySQL,但当 MySQL 没有响应时,HAproxy 不会切换到另一个节点。然而,当我检查 HAproxy 统计信息时,HAproxy 发现 MySQL 没有响应,因为 MySQL 服务器已关闭。

我的问题是,是否可以在 HAproxy 中设置两个资源?他是否可以检查 apache 是否已启动,如果没有启动则切换到另一个节点,以及检查 MySQL 是否已启动,如果没有启动则切换到另一个节点?

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
[...]

答案1

你的 HAProxy 没有测试 MySQL 的健康状况,因为在你的 MySQL 部分中你告诉要对 http 进行测试(使用行option httpchk),你应该使用选项 mysql-check所以它应该读作

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

并且您的 MySQL 数据库中应该有用户 a_test_user 允许来自 HAProxy 的连接。

相关内容