主备模式:主Nginx和备Nignx,加上Keepalived来监控主节点运行状态。
1. 主节点安装keepalived
// 或下载源码编译
# yum install -y keepalived // centos redhat
# apt-get keepalived // ubuntu
在主节点机器/etc/keepalived目录下修改keepalived.conf配置文件:
global_defs {
notification_email {
25278885@qq.com // 接收通知邮件列表
}
## 发送邮件地址
notification_email_from 25278885@qq.com
smtp_server smtp.qq.com
smtp_connect_timeout 30
## 标识节点的字符串,通常为hostname
router_id master_node
}
## keepalived会定时执行脚本并且对脚本的执行结果进行分析,动态调整vrrp_instance的优先级。这里的权重weight 是与下面的优先级priority有关,如果执行了一次检查脚本成功,则权重会-20,也就是由100 - 20
变成了80,Master 的优先级为80 就低于了Backup的优先级90,那么会进行自动的主备切换。
如果脚本执行结果为0并且weight配置的值大于0,则优先级会相应增加。
如果脚本执行结果不为0 并且weight配置的值小于0,则优先级会相应减少。
vrrp_script chk_nginx {
script "/etc/keepalived/chk_nginx.sh" ## 执行脚本的位置
interval 2 ## 检测时间间隔
weight -5 ## 如果条件成立则优先级-5
fall 2
rise 1
}
## 定义虚拟路由 VI_1为自定义标识
vrrp_instance VI_1 {
state MASTER ## 主节点为MASTER,备份节点为BACKUP
interface enp0s8 ## 绑定虚拟IP的网络接口(网卡)
mcast_src_ip 192.168.2.137 ## 本机ip地址
virtual_router_id 137 ## 虚拟路由ID号
priority 100 ##优先级配置(0-254的值)
advert_int 1 ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
authentication { ## 真实生产环境下对密码进行匹配
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { ## 虚拟ip(vip),可以指定多个
192.168.2.20
}
track_script {
chk_nginx
}
}
2. 从节点安装keepalived
安装过程同上,修改/etc/keepalived/keepalived.conf配置文件:
! Configuration File for keepalived
global_defs {
notification_email {
25278885@qq.com // 接收通知邮件列表
}
## 发送邮件地址
notification_email_from 25278885@qq.com
smtp_server smtp.qq.com
smtp_connect_timeout 30
## 标识节点的字符串,通常为hostname
router_id backup_node
}
## keepalived会定时执行脚本并且对脚本的执行结果进行分析,动态调整vrrp_instance的优先级。这里的权重weight 是与下面的优先级priority有关,如果执行了一次检查脚本成功,则权重会-20,也就是由100 - 20
变成了80,Master 的优先级为80 就低于了Backup的优先级90,那么会进行自动的主备切换。
如果脚本执行结果为0并且weight配置的值大于0,则优先级会相应增加。
如果脚本执行结果不为0 并且weight配置的值小于0,则优先级会相应减少。
vrrp_script chk_nginx {
script "/etc/keepalived/chk_nginx.sh" ## 执行脚本的位置
interval 2 ## 检测时间间隔
weight -5 ## 如果条件成立则优先级-5
fall 2
rise 1
}
## 定义虚拟路由 VI_1为自定义标识
vrrp_instance VI_1 {
state BACKUP ## 主节点为MASTER,备份节点为BACKUP
interface ens33 ## 绑定虚拟IP的网络接口(网卡),对应本机网卡
mcast_src_ip 192.168.56.101 ## 本机ip地址
virtual_router_id 51 ## 虚拟路由ID号
priority 100 ##优先级配置(0-254的值)
advert_int 1 ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
authentication { ## 真实生产环境下对密码进行匹配
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { ## 虚拟ip(vip),可以指定多个
192.168.2.20
}
track_script {
chk_nginx
}
}
3. 检查Nginx状态脚本
chk_nginx.sh
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
/usr/local/c10k/nginx-1.15.0/sbin/nginx
sleep 2
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
/usr/sbin/keepalived stop
fi
fi
4. 启动
先启动两台机器的Nginx后,再启动Keepalived。
检查:
- 查看两台机器的IP地址:ip addr, 会出现配置的虚拟IP地址;
- 在不关闭Keepalived的情况下,Kill掉Nginx,看是否会重启Nginx;
- 关闭Keepalived的情况下,Kill掉Nginx,看是否会重启Nginx;