Linux下Nginx+Keepalived高可用集群通过VRRP协议实现VIP自动漂移,要求两台同网段主机关闭SELinux和防火墙、配置静态IP与hosts解析、安装并启动Nginx和Keepalived,主备节点分别设state MASTER/BACKUP及不同priority,统一virtual_router_id,绑定健康检查脚本至vrrp_instance,停主Nginx后VIP秒级切换至备机,访问VIP持续可用。

Linux 下用 Nginx 配合 Keepalived 实现高可用集群,核心是让两台(或以上)Nginx 服务器共享一个虚拟 IP(VIP),当主节点故障时,VIP 自动漂移到备用节点,用户无感知切换。整个过程不依赖外部云服务,全靠 VRRP 协议和本地健康检查驱动。
基础环境准备要到位
两台 Linux 主机必须在同一局域网内,能互相 ping 通,并满足以下条件:
- 关闭 SELinux(临时+永久):执行
setenforce 0并修改/etc/selinux/config中SELINUX=disabled - 关闭防火墙:运行
systemctl disable --now firewalld(VRRP 使用组播,防火墙会拦截) - 设置主机名与 hosts 解析:如
master和backup,并在两台机器的/etc/hosts中互相映射 IP - 分配静态 IP 和规划 VIP:例如主节点
192.168.24.10、备节点192.168.24.20,VIP 设为未被占用的192.168.24.100
Nginx 与 Keepalived 都得装好且可运行
在两台机器上分别安装并验证基础服务:
- 安装 Nginx:
yum install -y nginx(CentOS/RHEL)或apt install -y nginx(Ubuntu/Debian),启动后访问本机 IP 应返回欢迎页 - 安装 Keepalived:
yum install -y keepalived(推荐方式,自动处理依赖;源码编译需指定--sysconf=/etc和--prefix=/usr/local) - 确认安装成功:
rpm -q keepalived或keepalived --version
Keepalived 配置主从逻辑与健康检查
关键在 /etc/keepalived/keepalived.conf,需区分主备节点配置:
- 主节点:设置
state MASTER、priority 100(数值越大优先级越高) - 备节点:设置
state BACKUP、priority 90 - 统一配置
virtual_router_id 51(同一集群必须相同,取值 1–255) - 定义健康检查脚本(如检测 Nginx 进程或端口):
vrrp_script chk_http_port,失败时降权,确保 Nginx 挂了 VIP 就主动让出 - 将脚本绑定到 vrrp_instance,用
track_script关联,避免“脑裂”或误切换
启动服务并验证 VIP 漂移效果
按顺序操作,观察行为是否符合预期:
- 先启动两台的 Nginx:
systemctl start nginx - 再启动两台的 Keepalived:
systemctl start keepalived - 在主节点执行
ip a,应看到 VIP 绑定在eth0(或对应网卡)上 - 手动停掉主节点 Nginx:
systemctl stop nginx,几秒后 VIP 应消失,并在备节点ip a中出现 - 用浏览器或 curl 访问 VIP 地址,始终能获得响应,即高可用生效



















