之前我们学习过keepalive的部署,这次我们来学习下keepalive各种运行模式
keepalive目前有两种运行模式
1.抢占模式
抢占模式下其实还可以分组主主模式和主备模式
主备模式:
当master宕机或者网络等各种因素不能工作时会自动切换到备机,这时备机通过VIP接管主机的全部服务,同时如果master恢复服务,VIP就会再次漂回至master
主主模式:
主主模式这时候所有的机器state都配置为MASTER,这时候所有keepalive节点都会进行VIP的抢占,这时候是通过priority这个优先级的参数决定的
2.非抢占模式
非抢占模式下当一台节点网络等各种因素不能工作时,VIP会自动漂移到另外的节点,如果之前挂掉的节点恢复,VIP仍然会在目前节点工作,不会漂移回去,非抢占模式下,主备机的state都应该配置为BACKUP
接着我们看下以上各种模式的安装和配置方式
首先我们安装keepalive
yum install ipvsadm keepalived -y modprobe ip_vs cat /proc/net/ip_vs
然后在master上绑定VIP
ip addr add 192.168.100.100/24 dev eth0
然后修改配置文件
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bak
主从模式的配置如下
cat /etc/keepalived/keepalived.conf global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id R1 } vrrp_instance VI_1 { state MASTER interface eth0 #绑定的网卡名 virtual_router_id 51 #主从填写一致 VRID priority 100 #优先级,主大于从 advert_int 1 #心跳间隔 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.100.100/24 #VIP地址 } }
备份服务器与主服务器配置大致相同,只需要修改state为BACKUP,priority优先级设为100下,最好设为90或以下,router_id改为R2。
非抢占模式的配置,两个服务器都要把state改为BACKUP,并在其中添加nopreempt,默认主设备(priority 值大的 Keepalived 节点) 配置一定要加上 nopreempt,否则非抢占不起作用,另外防火墙配置允许组播(主、备两台设备上都需要配置, keepalived使用224.0.0.18作为Master和Backup 健康检查的通信IP)
cat /etc/keepalived/keepalived.conf vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 nopreempt priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.100.100/24 } }
如果需要延迟抢占,主要添加一个preempt_delay的配置
vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 preempt_delay 30 nopreempt priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.100.100/24 } }
keepalived单播模式
如果网路不允许组播(可能是交换机策略设置),又要使用keepalived,那么开启单播。
使用单播模式,即使网络环境内有相同的virtual_router_id,也没有关系,具体配置如下
vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 preempt_delay 30 nopreempt priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } unicast_src_ip 192.168.1.80 #自己的IP #单播模式 unicast_peer { 192.168.1.81 #另一个IP } virtual_ipaddress { 192.168.100.100/24 } }
keepalived组播模式
默认组播是抢占模式,当master down 时,backup会接管vip地址。
keepalived在组播模式下所有的信息都会向224.0.0.18的组播地址发送,产生众多的无用信息,并且会产生干扰和冲突,所以需要将其组播的模式改为单拨。这是一种安全的方法,避免局域网内有大量的keepalived造成虚拟路由id的冲突。单播模式需要关闭vrrp_strict,严格遵守vrrp协议这个选项,配置如下
global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id R1 vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 }
如何判断脑裂?
分别在两台机查看当前服务器是否拥有虚拟IP,如果两台服务器都拥有,则说明发生了脑裂,证明目前双机通信出现问题,产生此问题的原有在于两台服务器都探测不到组内其他服务器的状态(心跳请求无法正常响应),最后启来的keepalived私自判定另一台先启来的keepalived服务器挂起,则抢占虚拟IP,脑裂的出现是不被允许的。
造成脑裂的原因:通过查看VRRP通信原理发现VRRP基于报文实现的。master设置(advert_int 1 )一定时间发送一个报文给backup。如果backup没有收到就自己成为master。可推出导致问题的原因是因为backup没有收到报文,所以自己成为了master。
VRRP控制报文只有一种:VRRP通告(advertisement)。它使用IP多播数据包进行封装,组地址为224.0.0.18,发布范围只限于同一局域网内。这保证了VRID在不同网络中可以重复使用。为了减少网络带宽消耗只有主控路由器才可以周期性的发送VRRP通告报文。备份路由器在连续三个通告间隔内收不到VRRP或收到优先级为0的通告后启动新的一轮VRRP选举。