Percona XtraDB Cluster:Java Spring Boot应用节点自动故障转移配置咨询
双节点Percona XtraDB Cluster + Spring Boot 自动故障转移配置指导
Percona XtraDB Cluster 侧配置
双节点集群存在quorum(法定人数)核心问题:当其中一个节点故障时,剩余节点因未达到半数以上集群节点数,会自动进入只读状态。需先解决该问题,再确保集群节点间能正常感知故障:
调整集群quorum参数:在两个节点的
my.cnf(或my.cnf.d/server.cnf)中添加以下配置,让剩余节点在单节点存活时仍可提供读写服务:wsrep_provider_options="pc.ignore_sb=true; pc.bootstrap=true"pc.ignore_sb=true:忽略脑裂检测,允许单节点集群继续运行pc.bootstrap=true:允许节点作为集群初始启动节点,故障恢复后可自动重建集群
基础集群一致性配置:确保两个节点的核心集群参数一致:
wsrep_cluster_name=pxc-cluster wsrep_node_address=节点自身IP wsrep_cluster_address=gcomm://node1-IP,node2-IP wsrep_sst_method=xtrabackup-v2 wsrep_auto_increment_control=ON innodb_flush_log_at_trx_commit=1 sync_binlog=1配置完成后重启两个节点的PXC服务。
Spring Boot 应用侧配置
应用需配置多节点连接、自动重连及故障转移逻辑,确保节点故障时无缝切换:
1. JDBC URL 多节点配置
将JDBC URL改为包含两个PXC节点的地址,用逗号分隔,并添加故障转移相关参数:
spring.datasource.url=jdbc:mysql://node1-IP:3306,node2-IP:3306/your-db-name?useSSL=false&allowPublicKeyRetrieval=true&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&initialTimeout=2
参数说明:
autoReconnect=true:连接失效时自动尝试重连failOverReadOnly=false:故障转移到备用节点后,允许执行写操作(默认只读)maxReconnects=10:最大重连次数,避免无限重试initialTimeout=2:每次重连的间隔时间(秒)
2. 连接池参数优化(以默认HikariCP为例)
调整连接池参数,加快故障节点的检测与切换:
spring.datasource.hikari.connection-timeout=30000 spring.datasource.hikari.max-lifetime=1800000 spring.datasource.hikari.validation-timeout=5000 spring.datasource.hikari.connection-test-query=SELECT 1 spring.datasource.hikari.idle-timeout=600000
connection-test-query=SELECT 1:定期验证连接有效性,MySQL 8.0+可省略(HikariCP会用原生检测)connection-timeout=30000:缩短连接超时时间,快速感知节点不可用
3. 事务容错配置
添加事务相关配置,确保故障切换时事务能正确处理:
spring.transaction.rollback-on-commit-failure=true
补充方案:使用中间代理层(可选)
若需更可靠的负载均衡与故障转移,可引入HAProxy或ProxySQL作为数据库代理:
- 应用仅连接代理地址,由代理负责检测PXC节点状态,自动路由到可用节点
- 代理层可配置节点健康检查(如执行
SELECT 1),实时剔除故障节点
内容的提问来源于stack exchange,提问作者Muhammad Umar
相关产品推荐
相关产品推荐

