主备服务器配置(主):
第一步:安装keepalived
[root@lb01 ~]# yum install -y keepalived
第二步:修改配置文件
[root@lb01 ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@lb01 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
# 路由id:当前安装keepalived的节点主机标识符,保证全局唯一
router_id keep_101
}
vrrp_script check_web {
script "/etc/keepalived/check_web.sh" # 脚本存放的位置
interval 2 # 每隔两秒运行上一行脚本
weight -20 # 如果脚本运行成功,则升级权重-20,自动切换到备
}
vrrp_instance VI_1 {
# 主机=MASTER;备用机=BACKUP
state MASTER
# 该实例绑定的网卡名称
interface ens33
# 保证主备节点一致
virtual_router_id 51
# 权重,master值 > backup值
priority 100
# 主备组播报发送间隔时间2秒
advert_int 2
# 认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
10.0.0.3
}
# 调用监控脚本
track_script {
check_web
}
}
第三步:编写nginx监控脚本,如果nginx服务停止,keepalived服务也停止,并切换到备主机
[root@lb01 ~]# vim /etc/keepalived/check_web.sh
#!/bin/bash
num=`ps -C nginx --no-header |wc -l`
if [ $num -eq 0 ]
then
systemctl stop keepalived
fi
[root@lb01 ~]# chmod +x /etc/keepalived/check_web.sh
ps:第二种方式,如果nginx服务停止,则只切换到备主机,keepalived服务并不停止
[root@lb01 ~]# vim /etc/keepalived/check_web.sh
#!/bin/bash
num=`ps -ef|grep -c [n]ginx`
if [ $num -eq 0 ]
then
exit 1
else
exit 0
fi
[root@lb01 ~]# chmod +x /etc/keepalived/check_web.sh
第四步:启动、开机自启keepalived服务
[root@lb01 ~]# systemctl start keepalived
[root@lb01 ~]# systemctl enable keepalived
第五步:查看keepalived服务状态;查看虚拟IP生效情况;
[root@lb01 ~]# ps -ef|grep "keepalived"
root 1647 1 0 09:35 ? 00:00:00 /usr/sbin/keepalived -D
root 1648 1647 0 09:35 ? 00:00:00 /usr/sbin/keepalived -D
root 1649 1647 0 09:35 ? 00:00:00 /usr/sbin/keepalived -D
root 1706 1191 0 10:11 pts/0 00:00:00 grep --color=auto keepalived
[root@lb01 ~]# ip a
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:fb:05:d3 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.5/24 brd 10.0.0.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 10.0.0.3/32 scope global ens33 ------------ 此处为创建出的虚拟IP
valid_lft forever preferred_lft forever
inet6 fe80::be70:f662:30f9:ed7b/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::b2c2:a66b:86bf:3a1/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::3b1b:133e:a53:1683/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
主备服务器配置(备):
第一步:安装keepalived ----略
第二步:修改配置文件
[root@lb02 ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@lb02 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
router_id keep_102 #此处id修改为唯一标识
}
vrrp_script check_web {
script "/etc/keepalived/check_web.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP #此处名称修改为备
interface ens33
virtual_router_id 51
priority 90
advert_int 2
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
track_script {
check_web
}
}
第三步:编写nginx监控脚本 ----略
第四步:启动、开机自启keepalived服务 ----略
第五步:查看keepalived服务状态; ----略
开始测试:如果主服务器nginx服务停止,则自动切换到备主机
第零步:主备服务器 keepalived + nginx 服务都处于开启的状态
[root@lb01 keepalived]# ps -ef|grep "nginx\|keepalived"
root 30384 1 0 14:40 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 30385 30384 0 14:40 ? 00:00:00 nginx: worker process
nginx 30386 30384 0 14:40 ? 00:00:00 nginx: worker process
root 32449 1 0 15:05 ? 00:00:00 /usr/sbin/keepalived -D
root 32450 32449 0 15:05 ? 00:00:00 /usr/sbin/keepalived -D
root 32451 32449 0 15:05 ? 00:00:00 /usr/sbin/keepalived -D
root 32458 1191 0 15:06 pts/0 00:00:00 grep --color=auto nginx\|keepalived
第一步:查看虚拟IP在哪台主机,结果为主服务器。
[root@lb01 ~]# ip a|grep "10.0.0.3"
inet 10.0.0.3/32 scope global ens33
[root@lb02 ~]# ip a|grep "10.0.0.3"
第二步:浏览器访问虚拟IP
第三步:停止主服务器 nginx 服务,并查看nginx + keepalived服务状态
[root@lb01 ~]# systemctl stop nginx
[root@lb01 ~]# ps -ef|grep "nginx\|keepalived"
root 34807 1191 0 15:42 pts/0 00:00:00 grep --color=auto nginx\|keepalived
# ps:停止主服务器nginx服务,keepalived服务监控的脚本自动生效,会执行以下结果
# 1.停止keepalived服务
# 2.降级权重为80
# 3.自动切换到备服务器
第四步:查看是否已经自动切换到备服务器
[root@lb02 ~]# ip a|grep "10.0.0.3"
inet 10.0.0.3/32 scope global ens33