MySQL集群节点异常时,核心思路是分层排查:先确认节点是否存活,再查网络连通性、配置一致性、数据同步状态和错误日志。定位关键在“看状态、查日志、验连接、比配置”。
检查集群节点运行状态
登录任意正常节点,执行 SHOW STATUS LIKE 'wsrep_%'; 查看 Galera 状态关键指标:
wsrep_local_state_comment:应为 Synced,若为 Joiner、Donor 或 Disconnected,说明未完成加入或已失联 wsrep_cluster_size:显示当前在线节点数,明显少于预期即存在掉线节点 wsrep_ready:必须为 ON,否则该节点拒绝写入 wsrep_connected 和 wsrep_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 4567 或 nc -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_address 和 wsrep_node_name 外):
wsrep_cluster_address:必须指向同一集群地址,如 gcomm://192.168.1.10,192.168.1.11,192.168.1.12 wsrep_provider_options:尤其是 gcache.size、evs.keepalive_period 等参数不一致会导致脑裂或同步卡死 binlog_format=ROW、default_storage_engine=InnoDB、innodb_autoinc_lock_mode=2 这三项必须启用,否则无法兼容 Galera 复制 注意:新增节点启动时,首次需清空数据目录并指定 --wsrep-new-cluster 仅用于初始化,其他节点严禁使用