高可用集群的核心组件选型
服务器运维中,单点故障是最大的风险敞口。Corosync负责集群通信和成员管理,Pacemaker负责资源调度和故障切换——这套组合已在生产环境运行十余年,成熟度和社区支持远超Keepalived等轻量方案。
本文在两台CentOS 9 Stream服务器上完成双节点HA集群搭建,以Nginx作为受管服务演示故障自动切换。
双节点环境规划与网络配置
节点规划:
- node1:192.168.10.11(主节点)
- node2:192.168.10.12(备节点)
- VIP:192.168.10.100(浮动IP,客户端访问入口)
两台服务器需要双向SSH免密登录和主机名解析:
# 两台节点均执行
hostnamectl set-hostname node1 # node2上设为node2
echo "192.168.10.11 node1" >> /etc/hosts
echo "192.168.10.12 node2" >> /etc/hosts
# 生成SSH密钥并同步
ssh-keygen -t ed25519
ssh-copy-id root@node2
时间同步是集群通信的前提:
dnf install -y chrony
systemctl enable --now chronyd
chronyc sources
安装Corosync与Pacemaker
# 两台节点均安装
dnf install -y pacemaker corosync pcs
# 设置hacluster用户密码(pcs命令需要)
echo "hacluster:YourStr0ngP@ss" | chpasswd
# 启动pcsd服务
systemctl enable --now pcsd
节点认证与集群创建:
# 在node1执行
pcs host auth node1 node2 -u hacluster -p YourStr0ngP@ss
# 创建名为hacluster的双节点集群
pcs cluster setup hacluster node1 node2
# 启动集群
pcs cluster start --all
pcs cluster enable --all
验证集群状态:
pcs status cluster
pcs status nodes
两个节点均显示Online即表示集群通信正常。
集群属性与STONITH配置
STONITH(Shoot The Other Node In The Head)是高可用的关键机制,防止脑裂后双写。生产环境必须配置IPMI或iLO fence设备。测试环境可临时禁用:
pcs property set stonith-enabled=false
pcs property set no-quorum-policy=ignore
生产环境中应配置fence设备:
# 示例:IPMI fence配置
pcs stonith create ipmi_fence fence_ipmilan ipaddr=192.168.10.200 login=admin passwd=ipmipass pcmk_hostlist="node1 node2" op monitor interval=60s
配置Nginx资源与浮动VIP
创建资源组,确保VIP和Nginx在同一节点运行:
# 创建VIP资源
pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=192.168.10.100 cidr_netmask=24 op monitor interval=30s
# 创建Nginx资源
pcs resource create Nginx ocf:heartbeat:nginx configfile=/etc/nginx/nginx.conf op monitor interval=20s timeout=10s op start timeout=40s op stop timeout=30s
# 将资源加入同一组,保证同节点运行
pcs resource group add WebGroup VirtualIP Nginx
# 设置资源黏性,避免不必要的迁移
pcs constraint location WebGroup prefers node1=100
pcs constraint location WebGroup prefers node2=50
验证资源配置:
pcs status resources
pcs constraint list
故障切换测试与日常维护
模拟主节点故障:
# 在node1上停止集群服务
pcs cluster stop node1
# 在node2上观察
pcs status resources
VIP和Nginx应在30秒内自动迁移到node2。恢复node1后,资源不会自动回迁(因为设置了黏性),除非node2也发生故障。
日常维护命令:
# 将node1设为维护模式
pcs node standby node1
# 恢复node1
pcs node unstandby node1
# 手动迁移资源
pcs resource move WebGroup node2
# 清除手动迁移约束
pcs constraint remove location-cli-prefer-WebGroup
高可用集群不是装完就完的工作。定期验证切换、监控Corosync环形缓冲区溢出、关注Pacemaker的CRM日志,才能在故障真正发生时从容应对。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-gao-ke-yong-ji-qun-da-jian-corosyncpacemaker/