我的工作项目是运行在 Kubernetes 上的应用程序连接到在虚拟机上运行的 MariaDB Galera 集群。为了管理与 MariaDB 的连接,我使用 HAProxy 在 Kubernetes 中作为 pod 运行。但是,HAProxy 设置为使用主动备份配置按照企业 DBA 的建议,以防止出现死锁问题。
如果只有一个 Pod,HAProxy 可以正常工作,但是如果有两个或更多 pod,则第二个 pod 及以后的 pod 将间歇性地连接到 MariaDB其中有以下条目kubectl logs
:
[WARNING] 313/013536 (8) : Server galera/node2 is DOWN, reason: Layer4 timeout, check duration: 5001ms. 0 active and 2 backup servers left. Running on backup. 3 sessions active, 0 requeued, 0 remaining in queue.
[WARNING] 313/013611 (8) : Server galera/node2 is UP, reason: Layer4 check passed, check duration: 2ms. 1 active and 2 backup servers online. 0 sessions requeued, 0 total in queue.
[WARNING] 313/013916 (8) : Server galera/node2 is DOWN, reason: Layer4 timeout, check duration: 5000ms. 0 active and 2 backup servers left. Running on backup. 4 sessions active, 0 requeued, 0 remaining in queue.
[WARNING] 313/013951 (8) : Server galera/node2 is UP, reason: Layer4 check passed, check duration: 1ms. 1 active and 2 backup servers online. 0 sessions requeued, 0 total in queue.
[WARNING] 313/014446 (8) : Server galera/node2 is DOWN, reason: Layer4 timeout, check duration: 5001ms. 0 active and 2 backup servers left. Running on backup. 16 sessions active, 0 requeued, 0 remaining in queue.
[WARNING] 313/014521 (8) : Server galera/node2 is UP, reason: Layer4 check passed, check duration: 28ms. 1 active and 2 backup servers online. 0 sessions requeued, 0 total in queue.
MariaDB 服务器上的连接数仍远低于最大连接数设置,并且 DBA 在 MariaDB 日志中未发现任何异常,因此我排除了 MariaDB 服务本身拒绝连接的可能性。间歇性问题的疑似原因可能是从 HAProxy pod 到运行 MariaDB 的 VM 之间的某个地方,但我不确定从哪里开始以及需要检查什么。
这里是haproxy.conf
:
listen galera
bind *:3306
balance source
mode tcp
option tcpka
default-server inter 5s downinter 5s fall 3 rise 1
server node1 172.20.193.120:3306 check weight 1 backup
server node2 172.20.193.121:3306 check weight 1
server node3 172.20.193.122:3306 check weight 1 backup
截至本文发布时,HAProxy 版本是最新版本。如果有任何相关性,2.6.6
Kubernetes 集群正在运行VMWare Tanzu。v1.22.12+vmware.1
有人遇到过这样的问题吗?您建议从哪里开始进行故障排除?