目录
一、部署nginx01、nginx02
二、keepalived配置(抢占模式、master- backup模式)
三、测试
四、非抢占模式(backup-backup模式)
nginx01 | 11.0.1.31 |
nginx02 | 11.0.1.32 |
虚拟IP(VIP) | 11.0.1.30 |
一、部署nginx01、nginx02
部署nginx:Nginx、keepalived安装详细步骤_keepalive 安装-CSDN博客
先部署一台,另一台直接克隆改ip就可以
二、keepalived配置(抢占模式、master- backup模式)
keepalived配置文件路径 /etc/keepalived/keepalived.conf
主机 11.0.1.31
需要更改的参数:router_id、interface ens33、真实IP mcast_src_ip 、虚拟IP11.0.1.30、优先级priority(master需要比backup高)
global_defs {
router_id nginx-01 #标识本节点的名称,通常为hostname
}
## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2 #每2秒检测一次nginx的运行状态
weight -20 #失败一次,将自己的优先级-20
}
vrrp_instance VI_1 {
state MASTER # 状态,主节点为MASTER,备份节点为BACKUP
interface ens33 # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口
virtual_router_id 51 # 虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
mcast_src_ip 11.0.1.31 # 本机IP地址
priority 100 # 节点优先级,值范围0~254,MASTER要比BACKUP高
advert_int 1 # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
# 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
virtual_ipaddress {
11.0.1.30
}
track_script {
chk_nginx # nginx存活状态检测脚本
}
}
备机 11.0.1.32
global_defs {
router_id nginx-02
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
mcast_src_ip 11.0.1.32
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
11.0.1.30
}
track_script {
chk_nginx
}
}
检测nginx存活脚本,如果nginx进程不存在,尝试启动,如果nginx启动失败(服务器宕机),杀死主机的keepalived程序。主机的keepalived被杀死后VIP将转移到备机11.0.1.32。
主备机都要有检测脚本
vi /etc/keepalived/nginx_check.sh
chmod +x /etc/keepalived/nginx_check.sh
注意许多教程的脚本是centos6的,需要注意“systemctl stop keepalived” 命令是否可以正常关闭keepalived进程。
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
sleep 2
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
systemctl stop keepalived
fi
fi
主机IP,此时VIP在主机上
备机IP
三、测试
VIP可以正常访问,主机正常
关闭主机nginx进程
[root@nginx01 sbin]# ./nginx -s stop
访问正常
将主机11.0.1.31直接关机,再次测试
VIP成功漂移到备机11.0.1.32
查看备机IP,VIP漂移到备机上
重启主机后VIP重新漂移回到主机11.0.1.31
不需要给nginx设置开机自启动,keepalived开机自启动即可,keepalived发现nginx没启动,会自动执行脚本启动nginx。
四、非抢占模式(backup-backup模式)
两台主机均为backup,谁先启动谁就是临时master
11.0.1.31 backup
global_defs {
router_id nginx-01 #标识本节点的名称,通常为hostname
}
## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2 #每2秒检测一次nginx的运行状态
weight -20 #失败一次,将自己的优先级-20
}
vrrp_instance VI_1 {
state BACKUP # 状态,主节点为MASTER,备份节点为BACKUP
interface ens33 # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口
virtual_router_id 51 # 虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
mcast_src_ip 11.0.1.31 # 本机IP地址
priority 100 # 节点优先级,值范围0~254,MASTER要比BACKUP高
advert_int 1 # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
nopreempt
# 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
virtual_ipaddress {
11.0.1.30
}
track_script {
chk_nginx # nginx存活状态检测脚本
}
}
11.0.1.32 backup
global_defs {
router_id nginx-02
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
mcast_src_ip 11.0.1.32
priority 90
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
11.0.1.30
}
track_script {
chk_nginx
}
}
非抢占模式backup-backup模式,在此模式下,即使重启了主机11.0.1.31,VIP仍然保留在备机11.0.1.32。
在非抢占模式下,也有优先级的高低,谁先启动谁就被选举为master,不看优先级(两台抖配配置nopreempt情况下),并且不会被抢走VIP,除非master宕机,VIP漂移到backup(注意此时backup已经升级为master,而原先的master重启后已经变为backup)。
现在将11.0.1.32关机,VIP回到11.0.1.31
重新将11.0.1.32开机,发现VIP不会回到11.0.1.32,因为11.0.1.32配置了nopreempt参数,所以“不会抢11.0.1.31的VIP”
和抢占模式的配置相比,只改了两个地方:
1> 在vrrp_instance块下两个节点各增加了nopreempt指令,表示不争抢vip
2> 节点的state都为BACKUP
两个keepalived节点都启动后,默认都是BACKUP状态,双方在发送组播信息后,keepalived会自动选举一个MASTER出来(不是根据优先级)。由于两者都配置了nopreempt,所以MASTER从故障中恢复后,不会抢占vip。这样会避免VIP切换可能造成的服务延迟。
两台服务器都启用nopreempt后,必须修改角色状态统一为BACKUP,唯一的区分就是优先级。
官方对nopreempt参数解释:高优先级VRRP实例通常会抢占低优先级VRRP实例,
"nopreempt"参数将停止优先级更高的机器在抢占vip,并允许较低优先级的机器保持为master。
注意:要使nopreempt参数起作用,初始状态不能是MASTER。
https://www.cnblogs.com/lichunyang321/p/8889326.html
非抢占模式与优先级关系:
keepalived配置非抢占模式_keepalived非抢占模式-CSDN博客