24- 高可用与集群基础(Keepalived + HAProxy / Corosync + Pacemaker) 🔄
前提条件 ✅
- 已完成 Web 服务、数据库、邮件服务、VPN 配置(至少有 1–2 个可用的服务,如 Nginx + MariaDB)
- 以 ops 用户登录(具有 sudo 权限)
- 系统运行在 Debian 12 Bookworm
- 准备至少 两台 Debian 虚拟机(主节点 LinuxDC1 192.168.1.100 + 备节点 LinuxDC2 192.168.1.101)
- 防火墙已放行相关端口(HAProxy 80/443,Keepalived VRRP 112/udp,Corosync 5404–5405/udp)
- 全局约定:VIP(虚拟 IP)为 192.168.1.200(漂移 IP)
本章分为两套常见方案:L4/L7 负载均衡 + Keepalived(Web 前端高可用)与 Corosync + Pacemaker(数据库/状态服务高可用)
详细步骤 🛠️
方案一:Keepalived + HAProxy(Web 服务高可用)
- 在两台节点都安装软件
sudo apt update
sudo apt install -y keepalived haproxy
- 配置 HAProxy(两台相同配置)
sudo nano /etc/haproxy/haproxy.cfg
示例配置(负载均衡后端 Nginx):
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend http_front
bind *:80
bind *:443 ssl crt /etc/ssl/private/ssl-cert-snakeoil.pem
mode http
option forwardfor
default_backend web_backend
backend web_backend
balance roundrobin
server node1 192.168.1.100:80 check
server node2 192.168.1.101:80 check backup
重启:
sudo systemctl restart haproxy
- 配置 Keepalived(实现 VIP 漂移)
主节点(LinuxDC1):
sudo nano /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface ens33 # 替换为你的网卡名
virtual_router_id 51
priority 100 # 主节点高优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200
}
notify_master "/etc/keepalived/master.sh"
}
备节点(LinuxDC2):priority 改为 90,state 改为 BACKUP
创建通知脚本(可选):
sudo nano /etc/keepalived/master.sh
#!/bin/bash
systemctl restart haproxy
权限:
sudo chmod +x /etc/keepalived/master.sh
启动:
sudo systemctl enable --now keepalived
sudo systemctl status keepalived
ip addr show | grep 192.168.1.200 # 主节点应看到 VIP
方案二:Corosync + Pacemaker(集群资源管理,适合数据库等状态服务)
- 在两台节点安装
sudo apt install -y corosync pacemaker pcs fence-agents
- 创建集群
在一台节点执行:
sudo pcs cluster auth LinuxDC1 LinuxDC2 -u hacluster -p StrongPass123!
sudo pcs cluster setup --name ha_cluster LinuxDC1 LinuxDC2
sudo pcs cluster start --all
sudo pcs cluster enable --all
- 禁用 quorum(两节点场景常见)
sudo pcs property set stonith-enabled=false
sudo pcs property set quorum-policy=ignore
- 添加资源(示例:MariaDB 高可用)
sudo pcs resource create mariadb systemd:mariadb op monitor interval=30s
sudo pcs resource create vip IPaddr2 ip=192.168.1.200 cidr_netmask=24 op monitor interval=30s
sudo pcs constraint colocation add mariadb with vip INFINITY
sudo pcs constraint order vip then mariadb
查看集群状态:
sudo pcs status
sudo crm_mon -1
- 测试故障转移
在主节点:
sudo pcs cluster stop
观察 VIP 与服务是否漂移到备节点。
实践任务 🎯
- 在两台虚拟机上配置 Keepalived + HAProxy,实现 VIP 192.168.1.200 漂移,浏览器访问 VIP 确认负载均衡
- 关闭主节点 keepalived 服务,观察 VIP 是否自动漂移到备节点
- (可选进阶)搭建 Corosync + Pacemaker 集群,将 MariaDB 服务加入管理,测试节点宕机后服务自动切换
- 查看 /var/log/syslog | grep keepalived 或 pcs status,确认高可用事件记录
自测问题 ❓
- Keepalived 的 virtual_router_id 和 priority 参数分别代表什么?
- HAProxy 的 backend balance roundrobin 和 leastconn 的区别是什么?
- Corosync + Pacemaker 中 quorum-policy=ignore 适用于什么场景?
- 如何确认 VIP 已成功漂移到另一节点(两条命令)?
总结 📌
Keepalived + HAProxy 适合 Web 前端无状态高可用,Corosync + Pacemaker 适合有状态服务(如数据库、主从切换)。
本章建立了基本的双节点高可用架构,为后续容器集群(Docker Swarm/Kubernetes)提供底层思路。
生产环境中建议结合 STONITH(隔离)、监控告警、自动 failover 测试,形成完整 HA 方案。