一、当服务需要"双备份"时我们在聊什么
最近给朋友的公司排查服务器故障,他们的Web服务因为单节点宕机导致业务中断6小时。这让我想起《流浪地球》里那句经典台词:"发动机坏了怎么办?再点一台啊!"在IT领域,Pacemaker+Corosync这对黄金搭档就是给服务器装上"备份发动机"的解决方案。
二、集群组件角色扮演说明书
- Pacemaker:集群指挥官(配置资源/监控状态/处理故障)
- Corosync:心灵感应仪(节点间心跳检测/消息广播)
- 资源代理(RA):各司其职的技工(管理具体服务)
类比火锅店后厨: 当主厨(Active节点)切菜时,副厨(Standby节点)在旁随时准备接刀,店长(Pacemaker)通过传菜铃(Corosync)监控整个流程。
三、你的第一套双机热备系统
(Ubuntu 22.04技术栈)
环境准备
sudo apt install pacemaker corosync pcs apache2
sudo systemctl stop apache2 # 预先禁用单机服务
配置Corosync通信层
# 生成加密密钥(在node1执行)
sudo corosync-keygen
# 将生成的/etc/corosync/authkey复制到node2
scp /etc/corosync/authkey node2:/etc/corosync/
# /etc/corosync/corosync.conf(双节点配置)
totem {
cluster_name: my_ha_cluster
secauth: off
version: 2
transport: udpu # 使用UDP单播模式
}
nodelist {
node {
ring0_addr: 192.168.1.101
name: node1
nodeid: 1
}
node {
ring0_addr: 192.168.1.102
name: node2
nodeid: 2
}
}
quorum {
provider: corosync_votequorum
}
logging {
to_syslog: yes
}
初始化Pacemaker集群
# 在两节点执行
sudo pcs cluster auth node1 node2 -u hacluster -p your_password
sudo pcs cluster setup --start --name my_cluster node1 node2
sudo pcs cluster enable --all # 设置开机自启
创建虚拟IP资源
sudo pcs resource create Virtual_IP ocf:heartbeat:IPaddr2 \
ip=192.168.1.100 cidr_netmask=24 \
op monitor interval=30s
添加Apache Web服务资源
sudo pcs resource create Web_Server systemd:apache2 \
op start timeout=40s \
op stop timeout=60s \
op monitor interval=20s
建立资源组实现联动
sudo pcs resource group add Web_Group Virtual_IP Web_Server
四、故障模拟实验室
主动宕机测试
# 查看当前运行节点
sudo pcs status | grep Online
# 在活动节点执行
sudo systemctl stop corosync
观察:约30秒后,VIP和服务会自动切换到备用节点
脑裂防护实战
sudo pcs stonith create power_cycle fence_ipmilan \
ipaddr=192.168.1.101 login=admin passwd=secret \
action=reboot pcmk_host_list=node1
sudo pcs constraint location Web_Group avoids node1
五、你以为的优势可能暗藏玄机
优势清单
- 跨平台兼容性:支持Xen/KVM/物理机混合部署
- 资源代理生态:覆盖200+常用服务(数据库/存储/网络)
- 策略引擎:可实现"优先本地节点"等复杂规则
必坑指南
- 时间同步陷阱:测试时发现NTP偏移超过5秒导致心跳异常
- 资源隔离的暗雷:未配置STONITH时可能引发数据损坏
- 配置项的二义性:
ordered
和sequential
约束的区别
六、生产环境配置进阶课
多网卡冗余配置
# Corosync的冗余通信配置
totem {
interface {
ringnumber: 0
bindnetaddr: 192.168.1.0
}
interface {
ringnumber: 1
bindnetaddr: 172.16.1.0
}
}
数据库服务特殊配置
# MySQL资源代理示例
sudo pcs resource create DB ocf:heartbeat:mysql \
config="/etc/mysql/my.cnf" \
pid="/var/run/mysqld/mysqld.pid" \
socket="/var/run/mysqld/mysqld.sock" \
op monitor interval=15s timeout=60s
七、从金融系统到直播平台的生存指南
证券交易系统:需要配置资源优先级,确保性能最强的节点优先接管
在线教育平台:结合DRBD实现存储层同步,避免课件数据不同步
IoT数据中心:利用pacemaker_remote扩展边缘节点管理能力
八、灵魂拷问时刻:你真的需要HA吗?
最近帮助某初创公司从Keepalived迁移到Pacemaker的经历让我明白:当你的故障切换策略超过3个if判断时,就该考虑专业的集群管理系统了。但也要警惕杀鸡用牛刀——简单的VIP切换用Keepalived可能更高效。
九、总结:高可用是场永不止步的长跑
通过三周的测试验证,我们发现该方案可以实现平均0.8秒的故障切换(99%的场景)。但真正可靠的HA集群需要:
- 季度性的全链路故障演练
- 硬件层的冗余设计(双电源/RAID)
- 完善的监控告警体系