You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes实现外部MariaDB PXC集群负载均衡与故障转移方案咨询

结论

你当前提供的静态Service与Endpoints配置无法实现自动故障转移。

原因说明

  • Kubernetes 不会对用户手动创建的静态Endpoints资源自动进行后端健康检测,只要你不手动修改Endpoints的地址列表,就算其中某个MariaDB节点宕机,kube-proxy依然会将请求转发到这个不可用IP上,导致部分请求失败。
  • 你配置的是无头Service(clusterIP: None),对该Service的DNS查询会直接返回所有3个后端IP,由客户端自行选择IP建立连接,这种场景下节点宕机后客户端依然会拿到不可用IP,同样会出现连接异常。

可实现自动故障转移的方案

方案1:动态更新Endpoints

你可以部署一个简单的自定义巡检任务,定期探测三个MariaDB节点的端口连通性和数据库可用性:

  • 某节点探测失败时,自动从Endpoints的地址列表中移除该IP
  • 节点恢复正常后自动将IP加回地址列表
    保证Endpoints中始终只保留可用节点,即可实现K8s侧的自动故障转移。

方案2:依赖数据库客户端驱动的故障转移能力

不需要改动K8s侧配置,直接在应用的数据库连接串中填写所有三个节点的地址,利用MariaDB官方驱动自带的故障转移逻辑,自动跳过不可用节点,这种方案实现更简单,无需额外维护K8s侧资源,以JDBC连接串为例:
jdbc:mariadb://172.16.10.100,172.16.10.101,172.16.10.102:3306/数据库名?autoReconnect=true&failOverReadOnly=false

方案3:使用EndpointSlice资源(K8s 1.21及以上版本适用)

改用EndpointSlice替代静态Endpoints,为每个端点配置就绪探测规则,Kubernetes会自动更新端点的可用状态,只有标记为就绪的端点才会接收流量。


内容的提问来源于stack exchange,提问作者TW2021

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:54:02