说说keepalive的脑裂

1。工作场景

keepalive提供了loadbalance和高可用性的功能,本文说的是其为2个字符集节点提供HA功能的场景。



2。关键配置如下,为主备非抢占模式。

!mycat01, 192.168.4.196


global_defs {

,,#一个keepalive。会议,对应一个router_id

,,router_id mycat01

}


vrrp_instance VI_1 {

,,状态备份

,,nopreempt

,,接口eth0

,,#一个组播内,各节点该值相同

,,virtual_router_id 196

,,优先级200

,,advert_int 1

,,身份验证{

,,,,auth_type通过

,,,,auth_pass Zf4aqy

,,}


,,virtual_ipaddress {

,,,,192.168.4.200

,,}

},,,


!mycat02, 192.168.4.195


global_defs {

,,router_id mycat02

}


vrrp_instance VI_1 {

,,状态备份

,,nopreempt

,,接口eth0

,,virtual_router_id 196

,,优先级200

,,advert_int 1

,,身份验证{

,,,,auth_type通过

,,,,auth_pass Zf4aqy

,,}


,,virtual_ipaddress {

,,,,192.168.4.200

,,}

},,,



3。keepalive提供HA的工作原理

keepalive的HA功能,是通过VRRP(虚拟路由器冗余协议,虚拟路由冗余协议)来实现的。其用IP组播的方式(默认组播地址:224.0.0.18),实现服务节点间的通信,通过一种竞选机制来将路由任务交给某台VRRP路由器。工作时主节点发送VRRP协议报文,备节点接收报文,若一段时间(默认3个报文发送时间)备节点接收不到主节点发送的报文,就会启动接管程序接管主节点的资源。备节点可以有多个,通过优先级竞选。



4。keepalive发生脑裂的情况

4.1根据上述工作原理知道,备节点接收不到报文时,如两者间的网络不通了,备节点就会启动接管程序接管主节点的资源,对外提供服务,表现形式就是备节点上出现了虚拟IP,此时主节点也是持有虚拟IP的。


问题重现如下,此时mycat01为主节点,mycat02为备节点,在mycat02上删除掉组播数据包。

# iptables -输入- m pkttype——pkt-type多播- j下降


然后观察消息日志,可见其也变成了主节点。

# tail - f/var/log/messages

3月17 00:13:58 mycat02内核:ip_tables: Netfilter核心团队(C) 2000 - 2006

3月17 00:14:00 mycat02 Keepalived_vrrp: VRRP_Instance (VI_1)掌握状态转换

3月17 00:14:01 mycat02 Keepalived_vrrp: VRRP_Instance (VI_1)进入主国家

3月17 00:14:01 mycat02 Keepalived_vrrp: VRRP_Instance (VI_1)设置协议贵宾。

3月17 00:14:01 mycat02 Keepalived_vrrp: VRRP_Instance (VI_1)发送无端ARPs alt="说说keepalive的脑裂”>

说说keepalive的脑裂