服务器高可用架构是保障业务连续性的核心基础设施。在IDC数据中心和云服务器选型场景中,双节点高可用集群是最小可用单元,也是理解集群原理的起点。本文以CentOS 9为例,使用Corosync+Pacemaker搭建一个完整的双节点高可用集群,覆盖资源代理配置、Fencing机制和故障自动切换全流程。
Corosync与Pacemaker架构关系解析
Corosync负责集群成员管理和消息传递,提供节点间的通信层和法定人数(Quorum)机制。Pacemaker是集群资源管理器,运行在Corosync之上,负责定义资源行为、监控健康状态和执行故障转移。两者配合的工作流:Corosync检测到节点失联 → Quorum计算触发 → Pacemaker执行资源迁移 → 备节点接管服务。双节点场景下Quorum无法自然形成多数,需配置第三方仲裁设备(如diskless SBD或QDevice)。
环境准备与基础配置
两台服务器的基本信息:
node1: 192.168.10.11(主节点)
node2: 192.168.10.12(备节点)
VIP: 192.168.10.100(浮动IP)
前置条件:两台服务器时间同步(NTP/Chrony),主机名解析正常(/etc/hosts配置),防火墙放行集群端口。
配置hosts文件(两台均执行):
# /etc/hosts
192.168.10.11 node1
192.168.10.12 node2
安装集群组件:
dnf install -y pacemaker corosync pcs psmisc policycoreutils-selinux
systemctl enable pcsd
systemctl start pcsd
设置hacluster用户密码(两台均执行):
echo "hacluster:your_password" | chpasswd
集群认证与初始化
在node1上执行节点认证:
pcs cluster auth node1 node2 -u hacluster -p your_password
创建集群:
pcs cluster setup mycluster node1 node2
启动集群并设置开机自启:
pcs cluster start --all
pcs cluster enable --all
验证集群状态:
pcs status cluster
# 预期输出:两节点均为online
pcs status corosync
# 预期输出:两节点membership一致
双节点Quorum问题与QDevice配置
双节点集群天然缺少Quorum(需要3票中的2票,但只有2票存在),任何节点宕机都会导致集群冻结。解决方案是部署QDevice作为第三方仲裁。在独立服务器上安装QDevice:
dnf install -y corosync-qnetd
systemctl enable corosync-qnetd
systemctl start corosync-qnetd
在集群节点上添加QDevice:
pcs cluster qdevice add model net host=qdevice-host
pcs cluster quorum status
# 确认QDevice vote为1,总votes为3
配置后,单节点故障时集群仍能维持Quorum,Pacemaker正常执行故障转移。
资源配置:浮动IP与Nginx服务
添加浮动IP资源:
pcs resource create VirtualIP ocf:heartbeat:IPaddr2 \
ip=192.168.10.100 cidr_netmask=24 \
op monitor interval=30s
添加Nginx服务资源:
pcs resource create Nginx systemd:nginx \
op monitor interval=20s timeout=10s \
op start timeout=40s \
op stop timeout=30s
设置资源启动顺序和同位置约束:
pcs constraint colocation add Nginx with VirtualIP INFINITY
pcs constraint order VirtualIP then Nginx
这样确保Nginx只在持有VIP的节点上运行,且IP总是先于Nginx启动。
Fencing机制:SBD配置与故障隔离
没有Fencing的集群在脑裂场景下可能造成数据损坏。双节点环境推荐使用SBD(Storage-based Death)+ 共享磁盘方案:
# 在两台节点安装sbd
dnf install -y sbd
# 初始化SBD分区(在共享磁盘上)
sbd -d /dev/sdb create
# 修改Pacemaker配置启用SBD
pcs property set stonith-enabled=true
pcs property set no-quorum-policy=freeze
pcs stonith create sbd_fencing stonith:external/sbd \
pcmk_delay_max=30s
SBD的工作原理:节点失联后,存活节点通过共享磁盘写入终止消息,失联节点读取后自行执行reboot强制关机,确保故障节点彻底释放资源。
故障切换测试与运维要点
手动迁移资源验证故障转移:
# 将所有资源迁移到node2
pcs resource move Nginx node2
# 验证
pcs status resources
# VirtualIP和Nginx应在node2上运行
# 清除手动约束(否则资源不会自动回迁)
pcs resource clear Nginx
模拟节点故障:
# 在node1上执行
echo c > /proc/sysrq-trigger
# 节点立即崩溃,Pacemaker应在30秒内完成资源接管
# 在node2上检查:
pcs status resources
日常运维注意事项:定期检查pcs status输出,关注Quorum状态和资源运行位置;日志排查路径/var/log/pacemaker.log和/var/log/corosync.log;升级集群组件前务必备份/etc/corosync/corosync.conf和CIB配置;生产环境建议部署监控告警体系,对节点离线和资源切换事件设置即时告警。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-gao-ke-yong-ji-qun-da-jian-corosyncpacemaker/