keepalived高可用
一、高可用keepalived与nginx
Nginx默认监听在所有的IP地址上,VIP会飘到一台节点上,相当于那台nginx多了VIP这么一个网卡,所以可以访问到nginx所在机器
如果nginx宕机,会导致用户请求失败,但是keepalived没有挂掉不会进行切换,所以需要编写一个脚本检测Nginx的存活状态,如果不存活则kill掉keepalived
1.nginx故障切换脚本
[root@lb01 ~]# vim check_web.sh
#!/bin/sh
nginxpid=$(ps -ef | grep [n]ginx | wc -l)
#1.判断Nginx是否存活,如果不存活则尝试启动Nginx
if [ $nginxpid -eq 0 ];then
systemctl restart nginx &>/dev/null
sleep 3
#2.等待3秒后再次获取一次Nginx状态
nginxpid=$(ps -ef | grep [n]ginx | wc -l)
#3.再次进行判断, 如Nginx还不存活则停止Keepalived,让地址进行漂移,并退出脚本
if [ $nginxpid -eq 0 ];then
systemctl stop keepalived
fi
fi
#给脚本增加执行权限
[root@lb01 ~]# chmod +x /root/check_web.sh
[root@lb01 ~] ./check_web.sh (两者都行)
## 把lb01的脚本复制给lb02
[root@lb01 ~]# scp -r check_web.sh 10.10.0.6:/root/
[root@lb02 ~]# chmod +x /root/check_web.sh
[root@lb02 ~] ./check_web.sh (两者都行)
2.使用keepalived配置文件调用nginx切换脚本
1、配置抢占式时
#只需要在主节点配置 #修复好了,负载均衡的服务,一直都是跑在lb01上的,所以监听的一直都是主节点负载均衡的nignx有没有出问题,假如脚本检测到主节点的nginx有问题,就会把keepilved停止,lb02ping不通VIP,LB02自己会生成VIP,当我们把LB01主节点修号了,因为配置了抢占式,主节点会把VIP抢回来,所以之需要在主节点配,但是不重要,一般配置最好都是非抢占式。
[root@lb02 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
router_id lb02
}
#给此脚本起个名字,什么名字都可以,给下面的调用使用。
vrrp_script check_web {
script "/root/check_web.sh"
#每5秒执行一次脚本,脚本执行内容不能超过5秒,否则会中断再次重新执行脚本
interval 5
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface eth0
virtual_router_id 50
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.10.0.102
}
#调用计划的脚本 --调用
track_script {
check_web
}
}
# 配置抢占式时,备节点配置脚本
# 配置抢占式时,两边都要配置脚本
2、配置非抢占式时
#先给原文件备份一下
[root@lb01 keepalived]# mkdir aa
[root@lb01 keepalived]# mv keepalived.conf aa/
[root@lb01 keepalived]# ll
total 4
drwxr-xr-x 2 root root 29 Apr 10 13:16 aa
#主节点也要配置
[root@lb01 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
router_id lb01
}
vrrp_script check_web {
script "/root/check_web.sh"
interval 5
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface eth0
virtual_router_id 50
priority 10.10.0.102
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.10.0.102
}
track_script {
check_web
}
}
## 把lb01的脚本复制给lb02
[root@lb01 ~]# scp -r/etc/keepalived/keepalived.conf 10.10.0.6:/etc/keepalived/
## 把lb01改成lb02
# 然后实现两台keepalived VIP飘逸
[root@lb01 keepalived]# vim/etc/nginx/nginx.conf
# 故意改错 user www; 改成 us3e2r www;
[root@lb01 keepalived]# systemctl stop nginx
[root@lb02 keepalived]# systemctl restart keepalived
[root@lb02 keepalived]# systemctl restart keepalived
[root@lb02 keepalived]# ip addr | grep 10.10.0.102
inet 10.10.0.102/32 scope global eth0
3.测试
1.将VIP所在机器nginx的配置文件修改错误
2.停止nginx
3.查看VIP是否切换