Nginx高可用
Nginx高可用
使用 keepalived

- 需要两台Nginx服务器
- 每台服务器需要安装 keepalived
- 需要提供一个虚拟IP
安裝 Keepalived
安装命令
yum -y install keepalived开机启动
chkconfig keepalived on修改 Keepalived 的配置
vim /etc/keepalived/keepalived.confMASTER节点
! Configuration File for keepalived
global_defs {
## keepalived 自带的邮件提醒需要开启 sendmail 服务。 建议用独立的监视或第三方 SMTP
router_id ethan3 ## 标识本节点,通常为 hostname,可以在 服务器使用 hostname 指令得到
}
## keepalived 會定時執行腳本並對腳本執行的結果進行分析,動態調整 vrrp_instance 的優先。如果腳本執行結果為 0,並且 weight 配置的值大於 0,則優先相應的增加。如果腳本執行結果非 0,並且 weight配置的值小於 0,則優先相應的減少。其他情況,維持原本配置的優先,即配置檔案中 priority 對應的值。
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" ## 检查 nginx 状态的脚本路径
interval 2 ## 检查时间间隔
weight -20 ## 如果条件成立,权重-20
}
## 定义虚拟路由, VI_1 为虚拟路由的标识符,自己定义名称
vrrp_instance VI_1 {
state MASTER ## 主节点为 MASTER, 对应的备份节点为 BACKUP
interface eno16777736 ## 绑定虚拟 IP 的网路API,与本机 IP 地址所在的网路API相同。
virtual_router_id 33 ## 虚拟路由的 ID 号, 两个节点设定必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
mcast_src_ip 192.168.2.110 ## 本机 IP 地址
priority 200 ## 节点优先, 值范围 0-254, MASTER 要比 BACKUP 高
advert_int 1 ## 组播资讯传送间隔,两个节点设定必须一样, 预设 1s
## 设定验证资讯,两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111 ## 真实生产,按需求对应该过来
}
## 将 track_script 块加入 instance 配置块
track_script {
chk_nginx ## 执行 Nginx 监视的服务
} #
# 虚拟 IP 池, 两个节点设定必须一样
virtual_ipaddress {
192.168.2.50 ## 虚拟 ip,可以定义多个
}
}BACKUP节点
! Configuration File for keepalived
global_defs {
router_id localhost.localdomain
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens192
virtual_router_id 33
mcast_src_ip 192.168.2.111
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.2.50
}
}检查Nginx状态文件
检查Nginx状态文件 /etc/keepalived/nginx_check.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi赋予档案权限: chmod +x /etc/keepalived/nginx_check.sh
启动
systemctl start keepalived效果查看
节点上有虚拟 IP 时,可透过虚拟 IP 存取相应的 nginx 及下面相应的档案。
使用ip addr语句,可以看到虚拟 IP 192.168.2.50 绑定在了 MASTER 伺服器上面。而 BACKUP 节点上没有虚拟 IP。使用systemctl stop keepalived停掉主节点的 keepalived 服务,备节点上有虚拟 IP 。