准备两台nginx(安装参考:yum安装nginx)
主:nginx-master 192.168.44.132
备:nginx-backup 192.168.44.133
1、 修改index文件方便查看keepalived效果
1.1、 修改主服务器index文件
[root@nginx-master html]# vim index.html
<h1>this is nginx-master</h1>
1.2、 修改备服务器index文件
[root@nginx-backup html]# vim index.html
<h1>this is nginx-backup</h1>
2、 下载keepalived并配置
2.1、主服务器下载配置keepalived(192.168.44.132)
yum -y install keepalived #下载
systemctl enable --now keepalived #启动自启
2.1.1、修改keepalived配置文件
使用yum安装的keepalived的配置文件位置在/etc/keepalived
vim keepalived.conf
global_defs {
router_id nginx-master ##标识节点的字符串,通常为hostname
}
## 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/nginx_pid.sh" ##执行脚本位置、需要自己编写
interval 2 ##检测时间间隔
weight -20 ## 如果条件成立则权重减20(-20)
}
## 定义虚拟路由 VI_1为自定义标识。
vrrp_instance VI_1 {
state MASTER ## 主节点为MASTER,备份节点为BACKUP
## 绑定虚拟IP的网络接口(网卡),与本机IP地址所在的网络接口相同(我这里是ens33)
interface ens33
virtual_router_id 172 ## 虚拟路由ID号
mcast_src_ip 192.168.44.132 ## 本机ip地址
priority 100 ##优先级配置(0-254的值)
Nopreempt ##
advert_int 1 ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.44.139 ## 虚拟ip(vip),可以指定多个(这里设置同一网段是为了方便测试,不然就需要代理或者路由了)
}
}
2.1.2、编写nginx状态检测脚本
vim nginx_pid.sh
#!/bin/bash
Pid_num=`ps -C nginx --no-header |wc -l`
if [ $Pid_num -eq 0 ];then
systemctl restart nginx #重启nginx
sleep 3
Pid_num=`ps -C nginx --no-header |wc -l`
if [ $Pid_num -eq 0 ];then
systemctl stop keepalived #如果重启失败,关闭keepalived
fi
fi
chmod a+x nginx_pid.sh #脚本给执行权限
2.1.3、重启keepalived
systemctl restart keepalived
2.2、备服务器下载配置keepalived(192.168.44.133)
安装忽略
2.2.1、修改keepalived配置文件
global_defs {
router_id nginx-backup
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_pid.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP #备用服务器
interface ens33
virtual_router_id 173
mcast_src_ip 192.168.44.133 ## 本机ip地址
priority 90 ##优先级配置需要小于主服务器配置
advert_int 1 #与主服务器保持一致
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.44.139
}
}
2.2.2、编写nginx状态检测脚本
与主服务器一致(这里忽略)
2.2.3、重启keepalived
systemctl restart keepalived
3、 进行测试
3.1、停止master服务器的nginx和keepalived进行测试
systemctl stop keepalived && systemctl stop nginx
3.2、使用虚拟IP:192.168.44.139 进行访问测试
#可以看到已经完成IP漂移了
启动master服务器上的nginx 和 keepalived在次访问测试
#流量成功发送到了maser服务器