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

Percona XtraDB Cluster 5.7.20同步复制测试失败求助

排查Percona XtraDB Cluster同步复制测试失败的问题

我完全理解你的困惑——Percona XtraDB Cluster(PXC)主打的就是强同步复制能力,按官方描述,事务提交后理论上其他节点应该立刻能查到数据。咱们一步步拆解可能的问题:

1. 先确认集群基础状态是否正常

先在每个节点执行以下SQL,检查集群健康度:

SHOW STATUS LIKE 'wsrep_%';

重点关注这几个核心指标:

  • wsrep_cluster_size:确认数值是3(假设你是3节点集群),如果不对,说明有节点未正常加入集群。
  • wsrep_ready:必须为ON,否则节点无法参与复制流程。
  • wsrep_local_state_comment:必须是Synced,如果显示Joining/Donor等状态,说明节点还在全量同步或存在异常。
  • wsrep_flow_control_paused:如果这个值接近1,说明流控被触发了——你配置的gcs.fc_limit=256和fc_factor=0.99阈值过于严格,一旦节点间同步速度跟不上,写操作会被暂停,导致插入事务的写集无法及时传到其他节点。

2. 危险参数可能破坏强同步保证

你的wsrep_provider_options里有两个关键参数:

pc.ignore_quorum=true;pc.ignore_sb=true;

这两个参数的作用是允许节点在无集群quorum(多数节点在线)或脑裂场景下继续处理写请求,这直接打破了PXC的强同步机制:

  • 如果测试时集群有节点离线,或存在网络分区,node1的事务可能只在本地提交,根本不会同步到其他节点。
  • 正常3节点集群的quorum是2,只要有2个节点在线就能保证写集被多数节点确认。建议先注释掉这两个参数,重启所有节点后再测试。

3. 验证测试代码的事务逻辑

虽然你提到插入事务已提交,但还是要确认:

  • PHP代码是否真的执行了COMMIT?如果关闭了自动提交(autocommit=0)却未手动提交,事务只会在node1的当前会话中可见,其他节点无法查询到。
  • 测试时是否在提交后立刻发起查询?理论上PXC是提交前等待多数节点确认,但极端情况下如果网络延迟极低,可适当增加100ms左右的等待再查询(不过这种情况概率极低)。

4. 检查写集同步情况

在node1执行插入事务后,立刻在node1和node2执行:

SHOW STATUS LIKE 'wsrep_last_committed';

如果两个节点的数值不一致,说明写集根本没同步过去。此时再查看wsrep_local_recv_queue(接收队列)和wsrep_local_send_queue(发送队列),若队列不为0,大概率是集群网络问题或流控导致的同步阻塞。

总结建议

  1. 先关闭pc.ignore_quorum和pc.ignore_sb参数,重启所有节点,确保集群处于健康的Synced状态。
  2. 调整流控参数:将gcs.fc_limit设为1024或更高,fc_factor设为0.75左右,避免轻易触发流控。
  3. 确认测试代码的事务提交逻辑正确,比如开启自动提交或手动执行COMMIT。
  4. 重新测试,同时监控wsrep状态指标,观察写集是否正常同步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:43:34