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的脑裂”>