一、安装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 keepalived
global_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,备服务器为 BACKUP
interface eth0 # 绑定的网卡接口,根据实际情况修改
virtual_router_id 51 # 虚拟路由 ID,主备必须相同
priority 100 # 优先级,主服务器高于备服务器
advert_int 1 # 心跳间隔(秒)
# 认证信息,主备必须相同
authentication {
auth_type PASS
auth_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 keepalived
global_defs {
router_id LVS_BACKUP
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90 # 优先级低于主服务器
advert_int 1
authentication {
auth_type PASS
auth_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 ]; then
systemctl stop keepalived
fi
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 提供服务,从而保证服务的连续性。
3737

被折叠的 条评论
为什么被折叠?



