HA-Keepalived-01-Keepalived
简介
基本原理
引入的VIP即虚拟ip,不是nginx服务器的真实IP,而是一个虚拟的"漂移的"IP,为实现nginx服务的高可用,nginx将存在多台服务器(>=2),每台对应的后端应用服务器集群的配置应保持一致,为保障nginx能7*24的提供负载均衡或反向代理的服务,在多台nginx服务器中选择1台进行服务,那么怎么选择这台呢?这就是VIP的意义,根据keepalived中配置的规则(优先级排序),priority最高的那个将绑定VIP,成为master,其余主机成为BACKUP,master将一直发送组播信息,而当master挂或者由于priority降低将导致它退出master的角色,backup收不到组播信息后就认为master已挂,这时他们之间会进行抢占、选举,再根据priority选出新的master。
简单的说,虽然配置了多台nginx服务器,但只有一台会绑定VIP,提供nginx服务,当这台服务挂掉后,自动退出master角色,在剩下的backup中选出一台成为master,绑定VIP,继续提供nginx服务。
主从模式
前端使用两台服务器,一台主服务器和一台热备服务器,正常情况下,主服务器绑定一个公网虚拟IP,提供负载均衡服务,热备服务器处于空闲状态;当主服务器发生故障时,热备服务器接管主服务器的公网虚拟IP,提供负载均衡服务;但是热备服务器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠。
主主模式
前端使用两台负载均衡服务器,互为主备,且都处于活动状态,同时各自绑定一个公网虚拟IP,提供负载均衡服务;当其中一台发生故障时,另一台接管发生故障服务器的公网虚拟IP(这时由非故障机器一台负担所有的请求)。这种方案,经济实惠。
前提条件
CentOS7:2009
环境
Keepalived:1.3.5
服务器
主机名称 | IP | IP所在网卡 |
---|---|---|
HA1 | 192.168.62.127 | ens33 |
HA2 | 192.168.62.128 | ens33 |
主备模式
VIP: 192.168.62.126
主从模式
VIP1:192.168.62.125
VIP2:192.168.62.126
安装
直接安装二进制
# 安装epel(Extra Packages for Enterprise Linux)企业Linux扩展包
yum install -y epel-release
# 安装keepalived
yum install -y keepalived
配置
自动启动
# 启用开机启动
systemctl enable keepalived
# 确认开机启动已启用
systemctl is-enabled keepalived
启动
# 启动
systemctl start keepalived
# 查看状态
systemctl status keepalived
路由[好像不必要]
# VIP的80端口可以访问
iptables -I INPUT -p tcp -dport 80 -j ACCEPT
# 允许VRRP协议,防止同时两个服务器拥有相同网络的同一VIP 否则会脑裂
iptables -I INPUT -p ah -j ACCEPT
iptables -I INPUT -p vrrp -j ACCEPT
iptables -A INPUT -p vrrp -j ACCEPT
systemctl restart iptables
防火墙
增加VRRP(Virtual Router Redundancy Protocol) 虚拟路由冗余协议的例外规则
firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
firewall-cmd --reload
配置主从模式
主从都需要执行
注意:需要禁用SELinux否则脚本执行不正常
新增脚本文件/etc/keepalived/nginx_check.sh
cat >/etc/keepalived/nginx-check.sh <<EOF
#!/bin/bash
# description:
# 定时查看nginx是否存在,如果不存在则启动nginx
# 如果启动失败,则停止keepalived
status=$(ps -C nginx --no-headers|wc -l)
if [ "${status}" = "0" ]; then
systemctl restart nginx
sleep 3
status2=$(ps -C nginx --no-headers|wc -l)
status3=$(ps -C keepalived --no-headers|wc -l)
if [ "${status2}" = "0" ]; then
systemctl stop keepalived
elif [ "${status3}" = "0" ]; then
systemctl restart keepalived
fi
fi
EOF
# 将脚本赋予可执行权限
chmod +x /etc/keepalived/nginx-check.sh
主服务器
在/etc/keepalived/keepalived.conf 文件中
cat >/etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL # 机器标识,在一个网络中应该唯一,通常可设为hostname。故障发生时,邮件通知会用到
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
# 优先级不会不断的提高或者降低
# 可以编写多个检测脚本并为每个检测脚本设置不同的weight(在配置中列出就行)
vrrp_script nginx_check {
# 脚本两种写法
# 1、通过脚本执行的返回结果,改变优先级,keepalived继续发送通告消息,backup比较优先级再决定
# script "/usr/bin/killall -0 nginx"
# 2、脚本里面检测到异常,直接关闭keepalived进程,backup机器接收不到advertisement会抢占IP
script "/etc/keepalived/nginx-check.sh"
interval 5 # 脚本执行间隔5s
# 如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加
# 如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少
# 其他情况,原本配置的优先级不变,即配置文件中priority对应的值
weight -5
fall 3 # 检测失败3次就定义为down状态
rise 2 # 检测失败后,检测成功超过2次就定义为up状态,但不修改优先级
}
vrrp_instance VI_1 {
state MASTER #指定初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为MASTER.
interface ens33 #支持MULTICAST多播的网卡名 ip a 获取
virtual_router_id 51 # 虚拟路由ID标识,一组的keepalived配置中主备都是设置一致, 相同的VRID为一个组,它将决定多播的MAC地址
priority 100 # 1-254 设置本节点的优先级,优先级高的为MASTER,所以MASTER必须大于BACKUP
advert_int 2 # 检查间隔,默认为1秒。这就是VRRP的定时器,MASTER每隔这样一个时间间隔,就会发送一个advertisement报文以通知组内其他路由器自己工作正常
mcast_src_ip 192.168.62.127 # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在那个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
# # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
# # 本机ip
# unicast_src_ip 192.168.124.14
# unicast_peer {
# # 其他机器ip
# 192.168.124.13
# }
# 当它异常恢复后,即使它 prio 更高也不会抢占,这样可以避免正常情况下做无谓的切换
nopreempt
# 认证方式,主从需要一致否则无法通信导致脑裂
authentication {
auth_type PASS # 密码认证
auth_pass 1111 # 密码最多8位
}
track_script {
nginx_check # 引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行该脚本改变优先级,并最终引发主从切换
}
# 虚拟IP地址,它随着state的变化而增加删除,当state为MASTER的时候就添加,当state为backup的时候删除
# 这里主要是由优先级来决定的,和state设置的值没有多大关系
# 如果有多个虚拟IP 换行填写多个
virtual_ipaddress {
192.168.62.125 #虚拟IP, 主从应该填写一致
192.168.62.126 #虚拟IP, 主从应该填写一致
}
notify /etc/keepalived/notify-nginx.sh
}
EOF
备服务器
cat >/etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL # 机器标识,在一个网络中应该唯一,通常可设为hostname。故障发生时,邮件通知会用到
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
# 优先级不会不断的提高或者降低
# 可以编写多个检测脚本并为每个检测脚本设置不同的weight(在配置中列出就行)
vrrp_script nginx_check {
# 脚本两种写法
# 1、通过脚本执行的返回结果,改变优先级,keepalived继续发送通告消息,backup比较优先级再决定
# script "/usr/bin/killall -0 nginx"
# 2、脚本里面检测到异常,直接关闭keepalived进程,backup机器接收不到advertisement会抢占IP
script "/etc/keepalived/nginx-check.sh"
interval 5 # 脚本执行间隔5s
# 如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加
# 如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少
# 其他情况,原本配置的优先级不变,即配置文件中priority对应的值
weight -5
fall 3 # 检测失败3次就定义为down状态
rise 2 # 检测失败后,检测成功超过2次就定义为up状态,但不修改优先级
}
vrrp_instance VI_1 {
state BACKUP #指定初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为MASTER.
interface ens33 #支持MULTICAST多播的网卡名 ip a 获取
virtual_router_id 51 # 虚拟路由ID标识,一组的keepalived配置中主备都是设置一致, 相同的VRID为一个组,它将决定多播的MAC地址
priority 98 # 1-254 设置本节点的优先级,优先级高的为MASTER,所以MASTER必须大于BACKUP
advert_int 2 # 检查间隔,默认为1秒。这就是VRRP的定时器,MASTER每隔这样一个时间间隔,就会发送一个advertisement报文以通知组内其他路由器自己工作正常
mcast_src_ip 192.168.62.128 # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在那个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
# # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
# # 本机ip
# unicast_src_ip 192.168.124.14
# unicast_peer {
# # 其他机器ip
# 192.168.124.13
# }
# 当它异常恢复后,即使它 prio 更高也不会抢占,这样可以避免正常情况下做无谓的切换
nopreempt
# 认证方式,主从需要一致否则无法通信导致脑裂
authentication {
auth_type PASS # 密码认证
auth_pass 1111 # 密码最多8位
}
track_script {
nginx_check # 引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行该脚本改变优先级,并最终引发主从切换
}
# 虚拟IP地址,它随着state的变化而增加删除,当state为MASTER的时候就添加,当state为backup的时候删除
# 这里主要是由优先级来决定的,和state设置的值没有多大关系
# 如果有多个虚拟IP 换行填写多个
virtual_ipaddress {
192.168.62.125 #虚拟IP, 主从应该填写一致
192.168.62.126 #虚拟IP, 主从应该填写一致
}
notify /etc/keepalived/notify-nginx.sh
}
EOF
配置主主模式
主从都需要执行
注意:需要禁用SELinux否则脚本执行不正常
新增脚本文件/etc/keepalived/nginx_check.sh
cat >/etc/keepalived/nginx-check.conf <<EOF
#!/bin/bash
# description:
# 定时查看nginx是否存在,如果不存在则启动nginx
# 如果启动失败,则停止keepalived
status=$(ps -C nginx --no-headers|wc -l)
if [ "${status}" = "0" ]; then
systemctl restart nginx
sleep 3
status2=$(ps -C nginx --no-headers|wc -l)
status3=$(ps -C keepalived --no-headers|wc -l)
if [ "${status2}" = "0" ]; then
systemctl stop keepalived
elif [ "${status3}" = "0" ]; then
systemctl restart keepalived
fi
fi
EOF
# 将脚本赋予可执行权限
chmod +x /etc/keepalived/nginx-check.sh
主服务器
cat >/etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL # 机器标识,在一个网络中应该唯一,通常可设为hostname。故障发生时,邮件通知会用到
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
# 优先级不会不断的提高或者降低
# 可以编写多个检测脚本并为每个检测脚本设置不同的weight(在配置中列出就行)
vrrp_script check-nginx {
# 脚本两种写法
# 1、通过脚本执行的返回结果,改变优先级,keepalived继续发送通告消息,backup比较优先级再决定
# script "/usr/bin/killall -0 nginx"
# 2、脚本里面检测到异常,直接关闭keepalived进程,backup机器接收不到advertisement会抢占IP
script "/etc/keepalived/check-nginx.sh"
interval 5 # 脚本执行间隔5s
# 如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加
# 如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少
# 其他情况,原本配置的优先级不变,即配置文件中priority对应的值
weight -5
fall 3 # 检测失败3次就定义为down状态
rise 2 # 检测失败后,检测成功超过2次就定义为up状态,但不修改优先级
}
# 双主模式 该配置是第一个VIP的Master
vrrp_instance VI_1 {
state MASTER #指定初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为MASTER.
interface ens33 #支持MULTICAST多播的网卡名 ip a 获取
virtual_router_id 51 # 虚拟路由ID标识,一组的keepalived配置中主备都是设置一致, 相同的VRID为一个组,它将决定多播的MAC地址
priority 100 # 1-254 设置本节点的优先级,优先级高的为MASTER,所以MASTER必须大于BACKUP
advert_int 2 # 检查间隔,默认为1秒。这就是VRRP的定时器,MASTER每隔这样一个时间间隔,就会发送一个advertisement报文以通知组内其他路由器自己工作正常
mcast_src_ip 192.168.62.127 # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在那个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
# # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
# # 本机ip
# unicast_src_ip 192.168.124.14
# unicast_peer {
# # 其他机器ip
# 192.168.124.13
# }
# 认证方式,主从需要一致否则无法通信导致脑裂
authentication {
auth_type PASS # 密码认证
auth_pass 1111 # 密码最多8位
}
track_script {
nginx_check # 引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行该脚本改变优先级,并最终引发主从切换
}
# 虚拟IP地址,它随着state的变化而增加删除,当state为MASTER的时候就添加,当state为backup的时候删除
# 这里主要是由优先级来决定的,和state设置的值没有多大关系
# 如果有多个虚拟IP 换行填写多个
virtual_ipaddress {
192.168.62.125 #虚拟IP, 主从应该填写一致
}
}
# 双主模式 该配置是第二个VIP的Backup
vrrp_instance VI_2 {
state BACKUP #指定初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为MASTER.
interface ens33 #支持MULTICAST多播的网卡名 ip a 获取
virtual_router_id 52 # 虚拟路由ID标识,一组的keepalived配置中主备都是设置一致, 相同的VRID为一个组,它将决定多播的MAC地址
priority 90 # 1-254 设置本节点的优先级,优先级高的为MASTER,所以MASTER必须大于BACKUP
advert_int 2 # 检查间隔,默认为1秒。这就是VRRP的定时器,MASTER每隔这样一个时间间隔,就会发送一个advertisement报文以通知组内其他路由器自己工作正常
mcast_src_ip 192.168.62.127 # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在那个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
# # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
# # 本机ip
# unicast_src_ip 192.168.124.14
# unicast_peer {
# # 其他机器ip
# 192.168.124.13
# }
# 认证方式,主从需要一致否则无法通信导致脑裂
authentication {
auth_type PASS # 密码认证
auth_pass 1111 # 密码最多8位
}
track_script {
check-nginx # 引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行该脚本改变优先级,并最终引发主从切换
}
# 虚拟IP地址,它随着state的变化而增加删除,当state为MASTER的时候就添加,当state为backup的时候删除
# 这里主要是由优先级来决定的,和state设置的值没有多大关系
# 如果有多个虚拟IP 换行填写多个
virtual_ipaddress {
192.168.62.126 #虚拟IP, 主从应该填写一致
}
}
EOF
备服务器
cat >/etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL # 机器标识,在一个网络中应该唯一,通常可设为hostname。故障发生时,邮件通知会用到
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
# 优先级不会不断的提高或者降低
# 可以编写多个检测脚本并为每个检测脚本设置不同的weight(在配置中列出就行)
vrrp_script check-nginx {
# 脚本两种写法
# 1、通过脚本执行的返回结果,改变优先级,keepalived继续发送通告消息,backup比较优先级再决定
# script "/usr/bin/killall -0 nginx"
# 2、脚本里面检测到异常,直接关闭keepalived进程,backup机器接收不到advertisement会抢占IP
script "/etc/keepalived/check-nginx.sh"
interval 5 # 脚本执行间隔5s
# 如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加
# 如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少
# 其他情况,原本配置的优先级不变,即配置文件中priority对应的值
weight -5
fall 3 # 检测失败3次就定义为down状态
rise 2 # 检测失败后,检测成功超过2次就定义为up状态,但不修改优先级
}
# 双主模式 该配置是第一个VIP的Master
vrrp_instance VI_1 {
state BACKUP #指定初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为MASTER.
interface ens33 #支持MULTICAST多播的网卡名 ip a 获取
virtual_router_id 51 # 虚拟路由ID标识,一组的keepalived配置中主备都是设置一致, 相同的VRID为一个组,它将决定多播的MAC地址
priority 90 # 1-254 设置本节点的优先级,优先级高的为MASTER,所以MASTER必须大于BACKUP
advert_int 2 # 检查间隔,默认为1秒。这就是VRRP的定时器,MASTER每隔这样一个时间间隔,就会发送一个advertisement报文以通知组内其他路由器自己工作正常
mcast_src_ip 192.168.62.128 # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在那个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
# # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
# # 本机ip
# unicast_src_ip 192.168.124.14
# unicast_peer {
# # 其他机器ip
# 192.168.124.13
# }
# 认证方式,主从需要一致否则无法通信导致脑裂
authentication {
auth_type PASS # 密码认证
auth_pass 1111 # 密码最多8位
}
track_script {
nginx_check # 引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行该脚本改变优先级,并最终引发主从切换
}
# 虚拟IP地址,它随着state的变化而增加删除,当state为MASTER的时候就添加,当state为backup的时候删除
# 这里主要是由优先级来决定的,和state设置的值没有多大关系
# 如果有多个虚拟IP 换行填写多个
virtual_ipaddress {
192.168.62.125 #虚拟IP, 主从应该填写一致
}
}
# 双主模式 该配置是第二个VIP的Backup
vrrp_instance VI_2 {
state MASTER #指定初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为MASTER.
interface ens33 #支持MULTICAST多播的网卡名 ip a 获取
virtual_router_id 52 # 虚拟路由ID标识,一组的keepalived配置中主备都是设置一致, 相同的VRID为一个组,它将决定多播的MAC地址
priority 100 # 1-254 设置本节点的优先级,优先级高的为MASTER,所以MASTER必须大于BACKUP
advert_int 2 # 检查间隔,默认为1秒。这就是VRRP的定时器,MASTER每隔这样一个时间间隔,就会发送一个advertisement报文以通知组内其他路由器自己工作正常
mcast_src_ip 192.168.62.128 # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在那个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
# # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
# # 本机ip
# unicast_src_ip 192.168.124.14
# unicast_peer {
# # 其他机器ip
# 192.168.124.13
# }
# 认证方式,主从需要一致否则无法通信导致脑裂
authentication {
auth_type PASS # 密码认证
auth_pass 1111 # 密码最多8位
}
track_script {
check-nginx # 引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行该脚本改变优先级,并最终引发主从切换
}
# 虚拟IP地址,它随着state的变化而增加删除,当state为MASTER的时候就添加,当state为backup的时候删除
# 这里主要是由优先级来决定的,和state设置的值没有多大关系
# 如果有多个虚拟IP 换行填写多个
virtual_ipaddress {
192.168.62.126 #虚拟IP, 主从应该填写一致
}
}
EOF
调试
# 查看keepalived日志
journalctl -u keepalived -f
测试
主从模式
正常测试
操作:正常访问VIP
期望:应该负载均衡的访问到两个服务器, 并且只有Keepalived的Master服务由虚拟IP
步骤:
1、
# Keepalived当前为Backup角色的服务器执行,应该不包含虚拟IP
ip a
2、
# Keepalived当前为Master角色的服务器执行,应该包含虚拟IP
ip a
测试其中一Nginx关闭
操作:关闭其中一台服务器上的Nginx,访问VIP
期望:Keepalived重启当前服务器中的Nginx,访问到当前服务器上的Nginx
步骤:
1、
# 停掉Backup角色的nginx服务
systemctl stop nginx
# 当前Backup角色的nginx服务应该还是启动的
systemctl status nginx
2、
# 停掉Master角色的nginx服务
systemctl stop nginx
# 当前Master角色的nginx服务应该还是启动的
systemctl status nginx
测试其中一Keepalived关闭
操作:关闭其中一台服务器上的Keepalived,访问VIP
期望:应该访问到另一台服务器上的Nginx
步骤:
1、
# 停掉Backup角色的Keepalived服务
systemctl stop keepalived
# 另一个Master角色的Keepalived服务还是Master角色并包含虚拟IP
ip a
# 重新启动原Backup角色的Keepalived服务
systemctl start keepalived
2、
# 停掉Master角色的Keepalived服务
systemctl stop keepalived
# 另一个Backup角色的Keepalived服务应该切换为Master并包含虚拟IP
ip a
# 重新启动原Master角色的Keepalived服务
systemctl start keepalived
# 另一个原Backup角色的Keepalived服务应该保持Master角色并保留虚拟IP
# 因为nopreempt配置的原因,即使原Master已恢复也不会切换,防止来回切换导致服务中断
ip a
测试其中一个服务器关闭
操作:关闭其中一台服务器,访问VIP
期望:应该访问到另一台服务器上的Nginx
步骤:
1、
# 关闭Backup角色的服务器
shutdown now
# 在Master角色服务器访问VIP,应该访问到Master角色上的Nginx
curl <VIP>
# 手动开启Backup角色的服务器
# 开机后访问VIP,应该还是访问到Master角色上的Nginx
curl <VIP>
2、
# 关闭Master角色的服务器
shutdown now
# 原Backup角色服务器应该变为Master角色,并拥有VIP
ip a
# 在原Backup角色服务器访问VIP,应该访问到原Backup角色上的Nginx
curl <VIP>
# 手动开启Master角色的服务器
# 开机后访问VIP,应该还是访问到原Backup角色上的Nginx
curl <VIP>
主主模式
正常测试
操作:正常访问VIP
期望:应该负载均衡的访问到两个服务器, 并且只有Keepalived的Master服务由虚拟IP
步骤:
1、
# Keepalived第一组网络当前为Backup角色的服务器执行,应该包含虚拟IP1
ip a
2、
# Keepalived第二组网络当前为Master角色的服务器执行,应该包含虚拟IP2
ip a
测试其中一Nginx关闭
操作:关闭其中一台服务器上的Nginx,访问VIP
期望:Keepalived重启当前服务器中的Nginx,访问到当前服务器上的Nginx
步骤:
1、
# 停掉HA1的nginx服务
systemctl stop nginx
# HA1的nginx服务应该还是启动的
systemctl status nginx
2、
# 停掉HA2的nginx服务
systemctl stop nginx
# HA2的nginx服务应该还是启动的
systemctl status nginx
测试其中一Keepalived关闭
操作:关闭其中一台服务器上的Keepalived,访问VIP
期望:应该访问到另一台服务器上的Nginx
步骤:
1、
# 停掉HA1的Keepalived服务
systemctl stop keepalived
# HA2的IP地址包含VIP1
ip a
# 重新启动HA1的Keepalived服务
systemctl start keepalived
# HA1的IP地址包含VIP1
ip a
2、
# 停掉HA2的Keepalived服务
systemctl stop keepalived
# HA1的IP地址包含VIP2
ip a
# 重新启动HA2的Keepalived服务
systemctl start keepalived
# HA2的IP地址包含VIP2
ip a
测试其中一个服务器关闭
操作:关闭其中一台服务器,访问VIP
期望:应该访问到另一台服务器上的Nginx
步骤:
1、
# 关闭HA1服务器
shutdown now
# HA2的IP地址包含VIP1
ip a
# 手动开启HA1服务器
# HA1服务器IP地址包含VIP1
ip a
2、
# 关闭HA2服务器
shutdown now
# HA1的IP地址包含VIP2
ip a
# 手动开启HA2服务器
# HA2服务器IP地址包含VIP2
ip a
FAQ
Q1: /etc/keepalived/nginx-check.sh exited due to signal 15
A1: 修改vrrp_script chk_nginx配置项中interval的时间必须大于脚本中设置的sleep时间,3秒不行就5秒
Q2: /etc/keepalived/nginx-check.sh exited with status 127或126
A2: 脚本错误,查看脚本中的命令如nginx所在位置
Q3: /etc/keepalived/nginx-check.sh exited with status 1
A3: SELinux是否禁用