Nginx + Keepalived 高可用部署指南
在生产环境中,单点故障往往意味着服务中断。利用 Keepalived 配合 Nginx,可以构建主备模式的热备集群,当主节点异常时,虚拟 IP(VIP)会自动漂移到备用节点,保障业务连续性。
环境准备与安装
编译安装 Keepalived 需要 OpenSSL 支持。在 CentOS 环境下,可执行以下命令获取源码并编译:
yum install -y openssl-devel wget
cd /tmp
wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
tar xzf keepalived-1.2.2.tar.gz
cd keepalived-1.2.2
./configure && make && make install
安装完成后,需将启动脚本和配置文件复制到系统目录,并设置开机自启:
cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
chmod +x /etc/init.d/keepalived
chkconfig --add keepalived
chkconfig keepalived on
ln -s /usr/local/sbin/keepalived /usr/sbin/
mkdir -p /etc/keepalived
配置文件详解
Keepalived 的核心配置位于 /etc/keepalived/keepalived.conf。这里以主节点(Master)和备节点(Backup)为例,IP 规划如下:
- 主节点:192.168.1.103
- 备节点:192.168.1.101
- 虚拟 IP:192.168.1.110
主节点配置
主节点优先级应高于备节点,同时开启 VRRP 脚本监控 Nginx 状态。
global_defs {
notification_email { [email protected] }
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "/opt/nginx_pid.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
mcast_src_ip 192.168.1.103
priority 102
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.1.110
}
}
备节点配置
备节点只需修改 state 为 BACKUP,priority 设为低于主节点的值(如 101),其余保持一致。
健康检查脚本
为了让 Keepalived 感知 Nginx 是否存活,我们需要编写一个监控脚本。当 Nginx 进程消失时,脚本会尝试重启;若重启失败,则降低 Keepalived 的权重或直接退出,触发 VIP 漂移。
vi /opt/nginx_pid.sh
#!/bin/bash
A=$(ps -C nginx --no-header | wc -l)
if [ $A -eq 0 ];
/usr/local/nginx/sbin/nginx
3
[ $(ps -C nginx --no-header | -l) -eq 0 ];
killall keepalived

