Nginx+Keepalived高可用部署
一、安装nginx
官方下载 https://nginx.org/download/nginx-1.20.2.tar.gz
1.关闭防火墙,将安装nginx所需软件包传到/opt目录下
systemctl stop firewalld systemctl disable firewalld
setenforce 0
nginx-1.20.2.tar.gz
2.安装依赖包
#nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel
3.创建运行用户、组
(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)
useradd -M -s /sbin/nologin nginx
4.编译安装Nginx
cd /opt tar zxvf nginx-1.20.2.tar.gz -C /opt/
cd nginx-1.20.2/
./configure \
--prefix=/usr/local/nginx \ #指定nginx的安装路径
--user=nginx \ #指定用户名 --group=nginx \ #指定组名
--with-http_stub_status_module
--with-http_ssl_module #启用 http_stub_status_module 模块以支持状态统计 操作
cd nginx-1.20.2/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #让系统识别nginx的操作命令
5.检查、启动、重启、停止 nginx服务
nginx -t #检查配置文件是否配置正确
#启动
nginx
6.添加 Nginx 系统服务
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
二、安装 Keepalived
同样在两台服务器上执行:
bash
# 安装 Keepalived
yum install -y keepalived# 启动 Keepalived 并设置开机自启
systemctl start keepalived
systemctl enable keepalived
三、配置 Keepalived
1. 主服务器配置(192.168.1.100)
编辑 /etc/keepalived/keepalived.conf
文件:
conf
! Configuration File for keepalivedglobal_defs {router_id LVS_MASTER # 标识本节点的字符串,主备不同
}# 检测 Nginx 服务是否存活的脚本
vrrp_script check_nginx {script "/etc/keepalived/check_nginx.sh" # 脚本路径interval 2 # 检测间隔(秒)weight -20 # 检测失败时权重减少量
}vrrp_instance VI_1 {state MASTER # 主服务器为 MASTER,备服务器为 BACKUPinterface eth0 # 绑定的网卡接口,根据实际情况修改virtual_router_id 51 # 虚拟路由 ID,主备必须相同priority 100 # 优先级,主服务器高于备服务器advert_int 1 # 心跳间隔(秒)# 认证信息,主备必须相同authentication {auth_type PASSauth_pass 1111}# 虚拟 IP 地址virtual_ipaddress {192.168.1.102}# 调用 Nginx 检测脚本track_script {check_nginx}
}
2. 备服务器配置(192.168.1.101)
编辑 /etc/keepalived/keepalived.conf
文件:
conf
! Configuration File for keepalivedglobal_defs {router_id LVS_BACKUP
}vrrp_script check_nginx {script "/etc/keepalived/check_nginx.sh"interval 2weight -20
}vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 90 # 优先级低于主服务器advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.102}track_script {check_nginx}
}
四、创建 Nginx 检测脚本
在两台服务器上都创建 /etc/keepalived/check_nginx.sh
文件:
bash
#!/bin/bash
# 检查 Nginx 进程是否存在
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then# 如果 Nginx 未运行,则尝试启动systemctl start nginx# 等待 3 秒后再次检查sleep 3# 如果仍未启动,则停止 Keepalived,让备机接管if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; thensystemctl stop keepalivedfi
fi
添加执行权限:
chmod +x /etc/keepalived/check_nginx.sh
五、重启服务
在两台服务器上重启 Keepalived 使配置生效:
bash
systemctl restart keepalived
六、验证高可用
-
查看虚拟 IP 绑定情况:
bash
ip addr show eth0 # 替换为实际网卡
正常情况下,虚拟 IP 应绑定在主服务器上。
-
测试故障切换:
- 停止主服务器的 Nginx 或 Keepalived
- 在备服务器上检查虚拟 IP 是否自动绑定
- 恢复主服务器服务,虚拟 IP 应自动切回
- 停止主服务器的 Nginx 或 Keepalived
七、注意事项
- 确保两台服务器的时间同步
- 关闭或配置防火墙,允许 VRRP 协议(端口 112)
- 生产环境中建议对 Nginx 进行更完善的健康检查
- 可以通过
journalctl -u keepalived
查看 Keepalived 日志
通过以上配置,就实现了 Nginx 服务的高可用架构,当主服务器出现故障时,备服务器会自动接管虚拟 IP 提供服务,从而保证服务的连续性。