mysql集群节点异常如何定位_mysql集群故障分析

10次阅读

MySQL 集群节点异常时,核心思路是分层排查:先确认节点是否存活,再查网络连通性、配置一致性、数据同步状态和错误日志;定位关键在“看状态、查日志、验连接、比配置”。

mysql 集群节点异常如何定位_mysql 集群故障分析

MySQL 集群节点异常时,核心思路是分层排查:先确认节点是否存活,再查网络连通性、配置一致性、数据同步状态和错误日志。定位关键在“看状态、查日志、验连接、比配置”。

检查集群节点运行状态

登录任意正常节点,执行 SHOW STATUS LIKE ‘wsrep_%’; 查看 Galera 状态关键指标:

  • wsrep_local_state_comment:应为 Synced,若为 JoinerDonorDisconnected,说明未完成加入或已失联
  • wsrep_cluster_size:显示当前在线节点数,明显少于预期即存在掉线节点
  • wsrep_ready:必须为 ON,否则该节点拒绝写入
  • wsrep_connectedwsrep_primary:二者都需为 ON,否则无法参与集群决策

查看错误日志定位根本原因

直接读取 MySQL 错误日志(默认 /var/log/mysql/error.log/var/lib/mysql/hostname.err),重点关注以下几类信息:

  • 包含 “gcomm://”“IST failed” 的行:通常指向组通信层失败或状态传输中断
  • 出现 “Failed to open gcache”“No cache memory”:gcache 文件损坏或空间不足
  • 反复出现 “Connection refused”“Timeout”:网络或 防火墙 阻断了 端口(默认 4567、4568)
  • 报错 “Node is not ready”“Waiting for SST”:SST 正在进行中,但耗时过长可能因磁盘 I/O 或网络慢

验证节点间网络与端口连通性

集群依赖稳定低延迟的 TCP 连接,需逐项验证:

  • 使用 telnet NODE_IP 4567nc -zv NODE_IP 4567 测试组通信端口是否可达
  • 确认防火墙放行:CentOS 用 firewall-cmd –list-ports,Ubuntu 检查 ufw 状态
  • 检查 hosts 解析是否一致:cat /etc/hosts 中各节点 hostname 对应 IP 必须完全相同,避免 Galera 因解析失败拒绝加入
  • 禁用 NetworkManager 或设置其不管理集群网卡,防止 IP 地址被意外重置

核对集群配置一致性

所有节点的 my.cnf 中 Galera 相关参数必须严格一致(除 wsrep_node_addresswsrep_node_name 外):

  • wsrep_cluster_address:必须指向同一集群地址,如 gcomm://192.168.1.10,192.168.1.11,192.168.1.12
  • wsrep_provider_options:尤其是 gcache.sizeevs.keepalive_period 等参数不一致会导致脑裂或同步卡死
  • binlog_format=ROWdefault_storage_engine=InnoDBinnodb_autoinc_lock_mode=2 这三项必须启用,否则无法兼容 Galera 复制
  • 注意:新增节点启动时,首次需清空数据目录并指定 –wsrep-new-cluster 仅用于初始化,其他节点严禁使用
text=ZqhQzanResources