我有一个使用 Percona XtraDB 的 3 个节点的数据库集群。这三个节点配置在三个不同的系统上。我使用 HAProxy 负载平衡器将请求传递给这些节点。3 个节点中的两个在 HAProxy 中配置为备份。当我向负载均衡器连接 URL 发出请求时,我可以看到请求默认转到节点 A。如果节点 A 关闭并且我请求新的数据库连接,我会看到请求被路由到节点 B。这符合所需的设计。但是,如果使用 Java 程序(jdbc URL)向 HAProxy 发送连接请求,该请求将被路由到节点 A,如果节点 A 出现故障,在处理几个请求后,我希望节点 B/节点 C 处理该请求。在当前情况下,我看到“连接失败”。是否有任何配置可以确保在节点发生故障的情况下,数据库连接不会失败,未来的请求将被路由到下一个可用节点?我目前的HAProxy配置文件如下:
global
stats socket /var/run/haproxy.sock mode 0600 level admin
log 127.0.0.1 local2 debug
#chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
daemon
defaults
mode tcp
log global
option tcplog
timeout connect 10000 # default 10 second time out if a backend is not found
timeout client 300000
timeout server 300000
maxconn 20000
# For Admin GUI
listen stats
bind :8080
mode http
stats enable
stats uri /stats
listen mysql *:3306
mode tcp
balance roundrobin
option mysql-check user haproxyUser
option log-health-checks
server MySQL-NodeA <ip-address>:3306 check
server MySQL-NodeB <ip-address>:3306 check backup
server MySQL-NodeC <ip-address>:3306 check backup