判断 pacemaker + corosync 集群真正“在线”,需执行 crm status –full 并比对 corosync-quorumtool -s 输出是否一致,同时用 pcs Resource show –full 检查 failed/block 状态,并通过 journalctl -u pacemaker 查看 pacemaker-controld/attrd 错误日志。

怎么判断 Pacemaker + Corosync 集群真正“在线”而不是假活
集群节点显示 online 不代表服务可用,常见假活是 Corosync 通信正常、Pacemaker 进程在跑,但资源代理(如 ocf:heartbeat:IPaddr2)已崩溃或被反复重启。
实操建议:
- 别只看
crm status,必须加--full参数:运行crm status --full,重点检查Online:后面的节点列表是否和corosync-quorumtool -s输出一致;不一致说明 Pacemaker 没同步到最新法定人数状态 - 查资源真实状态用
pcs resource show --full,注意failed和blocked状态——后者常因约束冲突或依赖未就绪导致,不是资源本身出错 - 检查日志不能只翻
/var/log/cluster/corosync.log,要同步 greppacemaker-controld和attrd进程输出:journalctl -u pacemaker --since "5 minutes ago" | grep -E "(Error|warn|fail)"
DRBD 主从切换后 NFS 共享挂载失败的典型原因
DRBD 切换后 mount.nfs 报 Stale file handle 或直接超时,多数不是网络问题,而是 NFS server 端没正确重载导出表或内核 NFS 模块状态残留。
实操建议:
- DRBD 切换完成后,必须手动触发
exportfs -ra,再检查cat /var/lib/nfs/etab是否包含新主节点的实际 IP 和路径;旧 IP 条目残留会导致客户端反复尝试错误地址 - 如果用了
nohide或嵌套导出,确保/etc/exports中每个子目录都显式声明了fsid=,否则 NFSv4 客户端可能无法重建文件句柄 - 避免在 DRBD 资源里直接启动
nfs-server服务,改用ocf:heartbeat:nfsnotify代理——它会在导出更新后主动通知内核清理 stale handle 缓存
Keepalived + lvs 实战中 realserver 健康检查总失败的排查点
Keepalived 的 HTTP_GET 或 TCP_CHECK 显示 realserver “DOWN”,但 curl 或 telnet 手动测试完全正常,问题往往出在检查逻辑与实际服务监听行为不匹配。
实操建议:
- 确认 realserver 上监听的是
0.0.0.0:port而非127.0.0.1:port——Keepalived 健康检查走的是 VIP 所在网卡的本地路由,不会命中 loopback - 若用
HTTP_GET,检查返回码是否为 200:nginx 默认 404 页面也返回 404,但 Keepalived 默认只认 200;需加status_code 200 404显式允许 - 不要在 realserver 上开防火墙(如
ufw或iptables)却只放行业务端口,健康检查端口(默认同业务端口)也必须放行;更稳妥的做法是用ipset白名单只允许可信 director IP
etcd 集群跨机房部署时 leader 频繁变更的底层诱因
三个节点分别在 A/B/C 机房,网络延迟波动稍大(比如跨城专线偶尔 >100ms),etcd 就频繁换 leader,不是配置太激进,而是心跳与选举超时参数没按 RTT 校准。
实操建议:
-
ETCD_HEARTBEAT_INTERVAL必须 ≥ 2× 实测最大 RTT(单位 ms),ETCD_ELECTION_TIMEOUT必须 ≥ 5× 最大 RTT;例如 RTT 峰值 80ms,则至少设为160和400 - 禁用
ETCD_AUTO_COMPACTION_RETENTION自动压缩,改用定时etcdctl compact+etcdctl defrag组合——自动压缩会阻塞 Raft 日志写入,放大网络抖动影响 - 跨机房 etcd 节点间务必用
--initial-advertise-peer-urls指向对方公网/专线 IP,别用 hostname 或内网 DNS;DNS 解析失败或缓存过期会直接导致 peer 连接中断
集群里最麻烦的从来不是单点故障,而是半同步状态下的状态不一致——比如 Corosync 成员视图分裂后 Pacemaker 还在发 fencing 指令,或者 etcd quorum 残留旧 term 但新 leader 已提交数据。这些边界情况不会报错,只会让日志里出现看似无关的 warning,得盯住 quorum、term、in_quorum 这类关键词。