You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何配置应用连接MySQL NDB集群以同时实现负载均衡与高可用

如何配置MySQL NDB集群实现高可用+负载均衡的应用连接?

当然可以同时实现这两项功能!MySQL Connector/J(JDBC驱动)已经原生支持把高可用故障转移和负载均衡结合起来,完美适配NDB集群的特性,不用额外折腾复杂的中间件。

核心配置思路

你之前了解的两种单独配置方案,其实可以通过loadbalance协议+故障转移相关参数的组合来融合——NDB集群的SQL节点本身是无状态的(所有节点都连接到同一个存储集群),所以负载均衡可以把请求均匀分发到可用的SQL节点,同时故障转移机制会自动跳过不可用的节点,一次性满足高可用和负载均衡需求。

具体连接URL格式

直接用loadbalance://作为协议前缀,同时列出所有NDB集群的SQL节点地址,再加上关键的故障转移和负载均衡参数即可:

jdbc:mysql:loadbalance://[sql-node1]:[port],[sql-node2]:[port],...,[sql-nodeN]:[port]/[database]?[参数列表]

完整示例及参数说明

这里给一个实际可用的配置示例,你可以根据自己的集群调整:

jdbc:mysql:loadbalance://sql-node-01:3306,sql-node-02:3306,sql-node-03:3306/my_app_db?loadBalanceConnectionGroup=ndb-cluster-pool&loadBalanceValidateConnectionOnSwapServer=true&failoverReadOnly=false&autoReconnect=true

关键参数的作用:

  • loadbalance://:开启负载均衡模式,驱动会把新的连接请求按配置策略(默认轮询)分发到列表中的SQL节点
  • 多节点地址:列出所有正常运行的NDB SQL节点,一旦某个节点宕机,驱动会自动将后续请求切换到其他可用节点,实现高可用故障转移
  • loadBalanceValidateConnectionOnSwapServer=true:切换到新节点前自动验证连接有效性,避免分发到已经故障的节点
  • failoverReadOnly=false:因为NDB集群的所有SQL节点默认都支持读写操作,设为false确保故障转移后依然可以执行写操作(如果你的集群做了读写分离,可以根据实际调整)
  • autoReconnect=true:连接断开时自动尝试重连,进一步提升可用性

额外注意事项

  • 确保所有SQL节点都正确注册到NDB存储集群,状态正常(可以用SHOW ENGINE NDB STATUS命令检查)
  • 建议使用Connector/J 5.1.37及以上版本(或最新的8.x版本),这些版本对NDB集群的负载均衡和故障转移支持更稳定
  • 如果搭配了连接池(比如HikariCP、Druid),记得在连接池配置中配合这些参数,比如设置合理的连接超时、验证超时时间,让连接池能及时剔除无效连接

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

火山引擎 最新活动