keepalived
2015-09-06 12:01
309 查看
http://blog.csdn.net/kkdelta/article/details/39433137
通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务。
当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短。
下面来以keepalived结合tomcat来实现一个web服务器的双机热备。
keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议。
在VRRP中有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。
VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协同工作,共同构成一台虚拟路由器。 Vrrp中存在着一种选举机制,用以选出提供服务的路由即主控路由,其他的则成了备份路由。当主控路由失效后,备份路由中会重新选举出一个主控路由,来继续工作,来保障不间断服务。
我们在本文中的测试环境如下
两台物理服务器和一个虚拟服务器(vip):
master:redhat 2.6.18-53.el5 192.168.8.4
backup: redhat 2.6.18-53.el5 192.168.8.6
vip: 192.168.8.100
测试环境的网络topology图如下:
节点A 192.168.8.4 (主节点), 节点B 192.168.8.6(备用节点),虚拟IP(对外提供服务的IP 192.168.8.100)
在这种模式下,虚拟IP在某时刻只能属于某一个节点,另一个节点作为备用节点存在。
当主节点不可用时,备用节点接管虚拟IP(即虚拟IP漂移至节点B),提供正常服务。
keepalived的原理可以这样简单理解:
keepalived安装在两台物理服务器上,并相互监控对方是否在正常运行。
当节点A正常的时候:节点A上的keepalived会将下面的信息广播出去:
192.168.8.100 这个IP对应的MAC地址为节点A网卡的MAC地址
图中的其它电脑如客户端和NodeB会更新自己的ARP表,对应192.168.8.100的MAC地址=节点A网卡的MAC地址。
当节点A发生故障的时候,节点B上的keepalived会检测到,并且将下面的信息广播出去:
192.168.8.100 这个IP对应的MAC地址为节点B网卡的MAC地址
图中的其它电脑如客户端会更新自己的ARP表,对应192.168.8.100的MAC地址=节点B网卡的MAC地址。
1,在主备机器上安装keepalived,
步骤如下:下载keepalived-1.1.15.tar.gz,然后解压安装
#tar zxvf keepalived-1.1.15.tar.gz
#cd keepalived-1.1.15
#./configure
#make
#make install
2,配置keepalived
配置中的state MASTER决定了节点为主节点
priority决定了优先级,比如在有多个备用节点的时候,主节点故障后优先级值大的接管。
主节点的配置如下:
[html]
view plaincopy
global_defs {
router_id NodeA
}
vrrp_instance VI_1 {
state MASTER #设置为主服务器
interface eth0 #监测网络接口
virtual_router_id 51 #主、备必须一样
priority 100 #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)
advert_int 1 #VRRP Multicast广播周期秒数
authentication {
auth_type PASS #VRRP认证方式,主备必须一致
auth_pass 1111 #(密码)
}
virtual_ipaddress {
192.168.8.100/24 #VRRP HA虚拟地址
}
备用节点的配置如下:
[html]
view plaincopy
global_defs {
router_id NodeB
}
vrrp_instance VI_1 {
state BACKUP #设置为主服务器
interface eth0 #监测网络接口
virtual_router_id 51 #主、备必须一样
priority 90 #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)
advert_int 1 #VRRP Multicast广播周期秒数
authentication {
auth_type PASS #VRRP认证方式,主备必须一致
auth_pass 1111 #(密码)
}
virtual_ipaddress {
192.168.8.100/24 #VRRP HA虚拟地址
}
3,启动keepalived:
keepalived -D -f /usr/local/etc/keepalived/keepalived.conf
查看log消息:
tail -f /var/log/messages
启动主节点A后的日志为:会广播ARP消息
[html]
view plaincopy
[root@srv4 ~]# tail -f /var/log/messages
Sep 20 01:45:29 srv4 Keepalived_vrrp: Configuration is using : 34546 Bytes
Sep 20 01:45:29 srv4 Keepalived_vrrp: VRRP sockpool: [ifindex(2), proto(112), fd(8,9)]
Sep 20 01:45:30 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
Sep 20 01:45:31 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
Sep 20 01:45:31 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.
Sep 20 01:45:31 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100
Sep 20 01:45:31 srv4 Keepalived_vrrp: Netlink reflector reports IP 192.168.8.100 added
Sep 20 01:45:31 srv4 Keepalived_healthcheckers: Netlink reflector reports IP 192.168.8.100 added
Sep 20 01:45:31 srv4 avahi-daemon[4029]: Registering new address record for 192.168.8.100 on eth0.
Sep 20 01:45:36 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100
通过ip a 命令可以看到192.168.8.100/24绑定到了eth0上
[html]
view plaincopy
[root@srv4 bin]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:50:2d:9d brd ff:ff:ff:ff:ff:ff
inet 192.168.8.4/24 brd 192.168.8.255 scope global eth0
inet 192.168.8.100/24 scope global secondary eth0
inet6 fe80::20c:29ff:fe50:2d9d/64 scope link
valid_lft forever preferred_lft forever
启动备用节点B后的日志为:
[html]
view plaincopy
Sep 20 01:47:31 hadoopsrv Keepalived_vrrp: Configuration is using : 34262 Bytes
Sep 20 01:47:31 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE
Sep 20 01:47:31 hadoopsrv Keepalived_vrrp: VRRP sockpool: [ifindex(2), proto(112), fd(7,8)]
Sep 20 01:47:31 hadoopsrv Keepalived: Starting VRRP child process, pid=20567
4,在两台机器上安装tomcat,安装步骤省略
安装完成后在节点A的机器上创建一个html文件内容如下
[html]
view plaincopy
this is the test page
<br>
from server 192.168.8.4
通过下面的url验证能够正常访问
http://192.168.8.4:8080/test/test.html
安装完成后在节点B的机器上创建一个html文件内容如下
[html]
view plaincopy
this is the test page
<br>
from server 192.168.8.6
通过下面的url验证能够正常访问
http://192.168.8.6:8080/test/test.html
在主节点,节点A正常的时候通过下面的url访问
192.168.8.100:8080/test/test.html
返回的内容应该为主节点上的html
[html]
view plaincopy
this is the test page
<br>
from server 192.168.8.4
将节点A的keepalived停止: killall keepalived
通过下面的url访问
192.168.8.100:8080/test/test.html
返回的内容应该为备用节点上的内容
[html]
view plaincopy
this is the test page
<br>
from server 192.168.8.6
同时查看节点B的日志:发现节点B转为主节点并且会广播ARP消息
[html]
view plaincopy
Sep 20 01:55:44 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
Sep 20 01:55:45 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
Sep 20 01:55:45 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.
Sep 20 01:55:45 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100
Sep 20 01:55:45 hadoopsrv avahi-daemon[3769]: Registering new address record for 192.168.8.100 on eth0.
Sep 20 01:55:50 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100
本文的目的主要是演示keepalived实现双机热备的功能和过程。
对于应用本身(tomcat)发生错误,以及"脑裂"等问题是不能解决的。
转帖:http://blog.chinaunix.net/space.php?uid=11654074&do=blog&id=2857384
Contents Page
目录
入木三分学网络第一篇--VRRP协议详解...
1
1.
VRRP产生背景及应用环境... 2
1.1为什么要用VRRP.
2
2.VRRP基本原理及实现过程...
5
2.1
VRRP基本概念... 5
2.2
VRRP报文组成... 6
2.3
VRRP协议状态机... 8
2.3.1初始状态(Initialize)...
8
2.3.2备份路由器状态(Backup)...
9
2.3.3
Master路由器(Master state)... 10
2.4
VRRP通告报文的发送与接收处理流程... 11
3.
VRRP的两种应用需求:... 12
冗余备份、负载均衡...
12
4.实例研究...
14
4.1
VRRP在Cisco路由器上的实现... 14
4.2
VRRP在Redback路由器上的实现... 15
4.3
VRRP在Juniper路由器上的实现... 18
5.
VRRP的安全性... 19
6.一个典型的VRRP故障分析...
20
7.后记...
22
电子邮箱:qdzhangmeng@163.com
MSN:qdzhangmeng@163.com
QQ : 407-960-134
博客地址:http://zmouc.cublog.cn
建立日期:2010年07月23日
版 本:1.0
版权说明:本文基于创作共用约定,内容归作者版权所有,欢迎大家转载,但要保留 作者的完整信息和出处,谢谢!
为什么要用VRRP呢,主要是为了实现数据链路层互通设备的冗余备份功能,我们来看图一:
图一(常规网络架构)
通过上图可以看到,常规的局域网一般都是多个终端接到交换机上,然后通过单独的出口路由器连接到Internet,这时候问题来了,如果这个出口路由器坏掉了,那么整个上行的流量就会全部断掉,这就是传说中的单点故障。
所以说我们要避免出现这种情况,本着冗余备份的思想,我们对上面的网络进行物理改造,如下图:
图二(消除了单点故障的常规网络架构)
现在,这个网络一共有两个Internet出口,这样任何一个出口路由器出现故障都不会导致终端用户的上行流量断掉。
另外一个问题出现了,我们怎么让终端PC知道局域网中有两个出口路由器,并在其中一个出现故障后自动选择另外一个呢?可采用的方案包括让终端PC运行动态路由协议,比如RIP、OSPF,或者ICMP
router Discovery client(DISC),或者指定一条静态缺省路由。
但是这三种实现方法都有其劣势及不可行之处,我们来具体分析一下。首先对于在每一个终端PC上运行动态路由协议来讲,几乎是不可能的,这其中牵涉到网管的技术能力和日常维护、安全性问题、以及某些终端平台不支持动态路由协议,比如我们常用的XP、Windows7都不支持,而windows
Server系列OS支持。
假定我们在终端PC上部署了动态路由协议,那么每一个终端用户都会遇到下面这种情况:
10086:尊敬的用户您好,申报RIP故障请按1,申报OSPF故障请按2,申报ISIS故障请按3……….
用户:(
⊙ o ⊙ )啊!我家是OSPF,按2。
10086:您好,您申报的故障是OSPF,请进一步选择,OSPF邻居无法建立请按1,OSPF密钥不对请按2,链路状态数据库异常请按3,路由表错误请按4…………..
用户:(
⊙ o ⊙ )啊!……………然后吐血身亡………….
所以说,N多现实问题和困难导致在终端PC上部署动态路由协议具有不可行性。
那么对于在终端PC上部署DISC等邻居或路由器发现协议呢?也存在种种问题,例如在网络内存在大量主机,每一台都需要运行DISC,除了增加主机的处理负担外,也会导致协议收敛缓慢,从而不能及时发现不可用邻居路由器,产生路由黑洞,这是不可接受的。
现在只剩下在终端PC上配置静态缺省路由了(其具体表现形式一般是设置网关),这是几乎每一个IP平台都支持的配置功能,即使是一部IP电话机,根据这个思路,我们在终端上配置多个默认网关即可实现路由备份了,但是存在以下两个问题:
1. 对于下行设备是PC来讲,配置了多个默认网关之后,其中一个会作为活动默认
网关,其它的作为备份默认网关,其按照下列过程执行流量转发和失效网关检测:
当TCP/IP在通过活动默认网关向某个目标IP地址进行TCP通信时,如果失败的尝试次数达到TcpMaxDataRetransmissions注册表值(默认为5)的一半(即3次)还没有收到响应,TCP/IP将到达该目标IP地址的通信改为使用列表中的下一默认网关,这一步是通过更改该远程IP地址的路由缓存项(Route
Cache Entry,RCE)来实现的,从而使用列表中的下一个默认网关来作为下一跳地址。其中RCE是路由表中的一个条目,用于存储目的地的下一跳IP地址。当超过25%的TCP连接转向下一默认网关时,TCP/IP将活动默认网关修改为这些连接当前使用的默认网关。
如果此时原始默认网关从故障中回复,TCP/IP将继续使用当前的活动默认网关,而不会转移到原始默认网关,除非重启计算机。如果当前的活动默认网关也出现故障,那么TCP/IP就会继续尝试使用列表中的下一个默认网关,在尝试完整个列表后将返回到列表的开始,又从第一个默认网关开始进行尝试。
死网关检测仅监视TCP流量,如果其他类型的流量连接失败,不会切换默认网关。另外TCP是端到端的协议,因此即使当前默认网关完全正常,本地计算机的TCP通信失败也可能会导致切换默认网关。
当不同网络接口所连接的网络之间没有连接性时(如一个网络接口连接到Internet,而一个网络接口连接到内部网络),如果在多个网络接口上同时配置默认网关,在活动默认网关出现故障导致切换默认网关时,就可能会引起连接性故障。比如活动默认网关为Internet连接,当它出现问题时,此时默认网关切换为内部连接,此时,本地计算机将无法再访问位于Internet连接上的主机。对于这种情况,微软建议使用
route add 来添加对应目的网络的匹配路由,而不是设置多个默认网关,这其实就是最长匹配原则,精确路由优先于缺省路由。
2.对于下行设备是路由器的情况,其不会切换默认路由,只会按照配置好的缺省
路由优先级进行流量转发,从而导致路由黑洞。
结合上面两个原因,在网络出口路由器的下行设备上配置缺省路由的方法也不可行。
综上所述,要想消除单点故障,又同时实现下行设备在故障发生时的流量无障碍
转发,以上的三个方法均不可行,所以人们开发出了一种全新的协议:VRRP,这
种协议无需下行设备与出口路由器进行交互性操作,却完全实现了网络出口的冗
余备份,下一节,我们就来详细讨论下VRRP的基本原理及实现过程。
虚拟路由器:由一个Master路由器和多个Backup路由器组成。其中,无论Master路由器还是Backup路由器都是一台VRRP路由器,下行设备将虚拟路由器当做默认网关。
VRID:虚拟路由器标识,在同一个VRRP组内的路由器必须有相同的VRID,其实VRID就相当于一个公司的名称,每个员工介绍自己时都要包含公司名称,表明自己是公司的一员,同样的道理,VRID表明了这个路由器属于这个VRRP组。
Master路由器:虚拟路由器中承担流量转发任务的路由器
Backup路由器:当一个虚拟路由器中的Master路由器出现故障时,能够代替Master路由器工作的路由器
虚拟IP地址:虚拟路由器的IP地址,一个虚拟路由器可以拥有一个或多个虚拟IP地址。
IP地址拥有者:接口IP和虚拟路由器IP地址相同的路由器就叫做IP地址拥有者。
主IP地址:从物理接口设置的IP地址中选择,一个选择规则是总是选用第一个IP地址,VRRP通告报文总是用主IP地址作为该报文IP包头的源IP。
虚拟MAC地址:组成方式是00-00-5E-00-01-{VRID},前三个字节00-00-5E是IANA组织分配的,接下来的两个字节00-01是为VRRP协议指定的,最后的VRID是虚拟路由器标识,取值范围[1,255]
图三(VRRP报文格式,取自RFC3768)
具体字段含义:
Version:VRRP协议版本号,RFC3768定义了版本2.
Type:该字段指明了VRRP报文的类型,RFC3768只定义了一种VRRP报文,那就是
VRRP通告报文,所以该字段总是置为1,若收到的VRRP通告报文拥有非1的类型
值,那么会被丢弃。
Virtual Rtr ID:也就是我们上面介绍过的VRID,一个VRID唯一地标识了一个虚拟
路由器,取值范围是[1,255],所以一台路由器的接口可以同时运行最多255个VRRP
实例,此字段没有缺省值,必须人为设定。
Priority:优先级,在一个虚拟路由器中用来选取Master路由器和Backup路由器,值越大表明优先级越高,此字段共有8个bit,取值范围[1,254],若没有人为指定,缺省值是100。其中,VRRP协议会将IP地址拥有者路由器的该字段永远设置为255,若人为指定为其它值,也不会影响VRRP协议的默认行为,即IP地址拥有者路由器的该字段总是255。另外,此字段设置为0会出现在下面这种情形中,当Master路由器出现故障后,它会立刻发送一个Priority置0的VRRP通告报文,当Backup路由器收到此通告报文后,会等待Skew
time时间,然后将自己切换为Master路由器,其中Skew time=(256-Backup路由器的优先级)/256,单位为秒,例如若Backup路由器的优先级为100,那么Skew time=156/256=0.609秒,对于主路由器来说,Skew time并没有实际意义,虽然cisco的路由器也会计算并显示出来。
Count IP Addrs:VRRP通告报文中包含的IP地址数量,这个字段其实就是为一个VRRP虚拟路由器所分配的IP地址的数量,我们来看一个cisco的实际例子:
配置如下:
interface Ethernet1/0
ip address 192.168.10.102 255.255.255.0
duplex half
vrrp 1 ip 192.168.10.52
vrrp 1 ip 192.168.10.51 secondary
vrrp 1 ip 192.168.10.53 secondary
end
我们来看一下上面的配置在封装成VRRP通告报文的时候,是如何进行的,如下
图:
图四(VRRP报文的抓包分析)
大家可以看到,VRRP通告报文中的Count IP Addrs字段的值为3,这是因为我们配置了3个虚拟IP地址,另外,下面的IP Address字段也按照我们配置虚拟IP的顺序进行了封装。
Auth Type:认证类型字段,是一个8位的无符号整数,一个虚拟路由器只能使用一种认证类型,如果Backup路由器收到的通告报文中认证类型字段是未知的或和本地配置的不匹配,那么它将丢弃该数据包。
值得注意的是,在RFC2338中为VRRP定义了3种认证类型:无认证、明文认证、MD5认证,但是在后续的实践中发现,这些手段无法提供行之有效的安全性,并且还会导致多个Master路由器的问题,所以在最新的VRRP标准:RFC3768中已经去掉了所有的认证类型。
目前认证类型字段的定义如下:
0 – 无认证,此时下面的Authentication Data字段将会被置为全0,接收到的路由器也会忽略此字段。
1 – 保留,是为了向前一个版本的RFC2338提供兼容性
2 – 保留,是为了向前一个版本的RFC2338提供兼容性
Adver Int::此字段规定了Mater路由器向外发送VRRP通告报文的时间间隔,以秒为单位,取值范围是[1,255],若没有人工配置,缺省为1秒。
Checksum:整个VRRP报文的校验和,计算过程中,将Checksum字段置为0,计算完成后将结果填入此字段。若希望进一步了解Checksum的计算,可以查看RFC1071(CKSM)。
IP Address:此字段存放3个VRRP虚拟路由器的虚拟IP地址,配置了几个就封装几个,在上面的cisco实例中我们配置了三个,那么VRRP通告报文就会封装3个。
Authentication Data:RFC3768中规定,此字段只是为了向RFC2338兼容,在实际的封装时,全置为0.,接收方也会忽略此字段。
2.3.1.1如果本地优先级为255,也就是说自己是IP拥有者路由器,那么接下来它会:
1.发送VRRP通告报文
2.广播免费ARP请求报文,内部封装是虚拟MAC和虚拟IP的对应,有几个虚拟IP地址,那么就发送几个免费ARP请求报文。
3.启动一个Adver_Timer计时器,初始值为Advertisement_Interval(缺省是1秒),当该计时器超时后,会发送下一个VRRP通告报文
4.本地VRRP进程将自己切换为Master路由器
2.3.1.2如果,本地优先级不是255,,那么接下来它会:
1.设置Master_Down_Timer计时器等于Master_Down_Interval,也就是主路由器死亡时
间间隔,如果此计时器超时,那么Backup路由器就会宣布主路由器死亡。
其中Master_Down_Interval =(3*Advertisement_Interval)+ Skew_time举例来说,一个VRRP实例(也就是一个VRRP虚拟器)的优先级是100,报文发送
间隔是1秒,那么Master_Down_Interval = 3*1s +(256-100)/256s
= 3.609秒。
2.本地VRRP进程将自己切换为Backup路由器
备份路由器是为了监控Master路由器的状态,如果一个VRRP路由器处于此状态,那么它会:
1. 不响应对虚拟IP地址的ARP请求报文
2. 丢弃帧头目的MAC地址是虚拟MAC的帧
3. 丢弃IP头中目的IP地址是虚拟IP的IP包
2.3.2.2
如果此时该VRRP路由器收到了一个shutdown事件,那么它会:
1. 取消Master_Down_Timer
2. 转换为初始状态(Initialize state)
2.3.2.3
如果Master_Down_Timer超时,那么该VRRP路由器会执行:
1.发送一个VRRP通告报文,
2.广播免费ARP请求报文,内部封装是虚拟MAC和虚拟IP的对应,有几个虚拟IP
地址,那么就发送几个免费ARP请求报文。
3.设置Adver_Timer计时器为Advertisement_Interval(缺省为1秒)
4.切换到Master状态
2.3.2.4
如果该Backup状态的VRRP路由器收到了一个VRRP通告报文;
当该VRRP通告报文的优先级字段为0时,那么路由器会将当前的
Master_Down_Timer设置为Skew_Time;
如果优先级不为0,并且大于或等于本地优先级,那么本地路由器会重置Master_Down_Timer计时器并保持Backup状态;
如果优先级不为0,并且小于本地优先级,如果开启了抢占模式(Preempt mode),
那么该Backup路由器等待指定的抢占延迟时间后将自己切换为Master路由器;并执
行Master路由器的所有动作;例如:vrrp 1 preempt delay minimum 10,表示等待10秒
后切换自己为Master;
如果优先级不为0,并且小于本地优先级,如果没有开启抢占模式(Preemptmode),那么本地路由器保持Backup状态。
2.3.3.1
当路由器处于Master状态时,会进行下面的动作:
1. 响应对虚拟IP地址的ARP请求
2. 转发目的MAC地址是虚拟MAC的数据帧
3. 拒绝目的IP地址是虚拟IP的数据包,除非它是IP地址拥有者(也就是优先级是
255的那个路由器)。
2.3.3.2
如果处于Master状态的VRRP进程收到了一个shutdown事件,那么它会:
1. 取消Adver_Timer计时器
2. 发送一个优先级字段置零的VRRP通告报文
3. 切换为初始状态(Intialize state)
2.3.3.3
如果Adver_Timer计时器超时,那么:
1. 发送一个VRRP通告报文
2. 重置Adver_Timer计时器
2.3.3.4
如果收到了一个VRRP报文且其优先级为0,那么:
1. 发送一个VRRP通告报文
2. 重置Adver_Timer计时器
2.3.3.5
如果收到了一个VRRP报文且其优先级高于本地优先级,或者收到的VRRP报文优先级等于本地优先级但是主IP地址高于本地的主IP地址,那么:
1. 取消Adver_Timer计时器
2. 设置Master_Down_Timer计时器为Master_Down_Interval
3. 切换为Backup状态
http://blog.csdn.net/fanlu319/article/details/7013258
通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务。
当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短。
下面来以keepalived结合tomcat来实现一个web服务器的双机热备。
keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议。
在VRRP中有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。
VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协同工作,共同构成一台虚拟路由器。 Vrrp中存在着一种选举机制,用以选出提供服务的路由即主控路由,其他的则成了备份路由。当主控路由失效后,备份路由中会重新选举出一个主控路由,来继续工作,来保障不间断服务。
我们在本文中的测试环境如下
两台物理服务器和一个虚拟服务器(vip):
master:redhat 2.6.18-53.el5 192.168.8.4
backup: redhat 2.6.18-53.el5 192.168.8.6
vip: 192.168.8.100
测试环境的网络topology图如下:
节点A 192.168.8.4 (主节点), 节点B 192.168.8.6(备用节点),虚拟IP(对外提供服务的IP 192.168.8.100)
在这种模式下,虚拟IP在某时刻只能属于某一个节点,另一个节点作为备用节点存在。
当主节点不可用时,备用节点接管虚拟IP(即虚拟IP漂移至节点B),提供正常服务。
keepalived的原理可以这样简单理解:
keepalived安装在两台物理服务器上,并相互监控对方是否在正常运行。
当节点A正常的时候:节点A上的keepalived会将下面的信息广播出去:
192.168.8.100 这个IP对应的MAC地址为节点A网卡的MAC地址
图中的其它电脑如客户端和NodeB会更新自己的ARP表,对应192.168.8.100的MAC地址=节点A网卡的MAC地址。
当节点A发生故障的时候,节点B上的keepalived会检测到,并且将下面的信息广播出去:
192.168.8.100 这个IP对应的MAC地址为节点B网卡的MAC地址
图中的其它电脑如客户端会更新自己的ARP表,对应192.168.8.100的MAC地址=节点B网卡的MAC地址。
1,在主备机器上安装keepalived,
步骤如下:下载keepalived-1.1.15.tar.gz,然后解压安装
#tar zxvf keepalived-1.1.15.tar.gz
#cd keepalived-1.1.15
#./configure
#make
#make install
2,配置keepalived
配置中的state MASTER决定了节点为主节点
priority决定了优先级,比如在有多个备用节点的时候,主节点故障后优先级值大的接管。
主节点的配置如下:
[html]
view plaincopy
global_defs {
router_id NodeA
}
vrrp_instance VI_1 {
state MASTER #设置为主服务器
interface eth0 #监测网络接口
virtual_router_id 51 #主、备必须一样
priority 100 #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)
advert_int 1 #VRRP Multicast广播周期秒数
authentication {
auth_type PASS #VRRP认证方式,主备必须一致
auth_pass 1111 #(密码)
}
virtual_ipaddress {
192.168.8.100/24 #VRRP HA虚拟地址
}
备用节点的配置如下:
[html]
view plaincopy
global_defs {
router_id NodeB
}
vrrp_instance VI_1 {
state BACKUP #设置为主服务器
interface eth0 #监测网络接口
virtual_router_id 51 #主、备必须一样
priority 90 #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)
advert_int 1 #VRRP Multicast广播周期秒数
authentication {
auth_type PASS #VRRP认证方式,主备必须一致
auth_pass 1111 #(密码)
}
virtual_ipaddress {
192.168.8.100/24 #VRRP HA虚拟地址
}
3,启动keepalived:
keepalived -D -f /usr/local/etc/keepalived/keepalived.conf
查看log消息:
tail -f /var/log/messages
启动主节点A后的日志为:会广播ARP消息
[html]
view plaincopy
[root@srv4 ~]# tail -f /var/log/messages
Sep 20 01:45:29 srv4 Keepalived_vrrp: Configuration is using : 34546 Bytes
Sep 20 01:45:29 srv4 Keepalived_vrrp: VRRP sockpool: [ifindex(2), proto(112), fd(8,9)]
Sep 20 01:45:30 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
Sep 20 01:45:31 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
Sep 20 01:45:31 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.
Sep 20 01:45:31 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100
Sep 20 01:45:31 srv4 Keepalived_vrrp: Netlink reflector reports IP 192.168.8.100 added
Sep 20 01:45:31 srv4 Keepalived_healthcheckers: Netlink reflector reports IP 192.168.8.100 added
Sep 20 01:45:31 srv4 avahi-daemon[4029]: Registering new address record for 192.168.8.100 on eth0.
Sep 20 01:45:36 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100
通过ip a 命令可以看到192.168.8.100/24绑定到了eth0上
[html]
view plaincopy
[root@srv4 bin]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:50:2d:9d brd ff:ff:ff:ff:ff:ff
inet 192.168.8.4/24 brd 192.168.8.255 scope global eth0
inet 192.168.8.100/24 scope global secondary eth0
inet6 fe80::20c:29ff:fe50:2d9d/64 scope link
valid_lft forever preferred_lft forever
启动备用节点B后的日志为:
[html]
view plaincopy
Sep 20 01:47:31 hadoopsrv Keepalived_vrrp: Configuration is using : 34262 Bytes
Sep 20 01:47:31 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE
Sep 20 01:47:31 hadoopsrv Keepalived_vrrp: VRRP sockpool: [ifindex(2), proto(112), fd(7,8)]
Sep 20 01:47:31 hadoopsrv Keepalived: Starting VRRP child process, pid=20567
4,在两台机器上安装tomcat,安装步骤省略
安装完成后在节点A的机器上创建一个html文件内容如下
[html]
view plaincopy
this is the test page
<br>
from server 192.168.8.4
通过下面的url验证能够正常访问
http://192.168.8.4:8080/test/test.html
安装完成后在节点B的机器上创建一个html文件内容如下
[html]
view plaincopy
this is the test page
<br>
from server 192.168.8.6
通过下面的url验证能够正常访问
http://192.168.8.6:8080/test/test.html
在主节点,节点A正常的时候通过下面的url访问
192.168.8.100:8080/test/test.html
返回的内容应该为主节点上的html
[html]
view plaincopy
this is the test page
<br>
from server 192.168.8.4
将节点A的keepalived停止: killall keepalived
通过下面的url访问
192.168.8.100:8080/test/test.html
返回的内容应该为备用节点上的内容
[html]
view plaincopy
this is the test page
<br>
from server 192.168.8.6
同时查看节点B的日志:发现节点B转为主节点并且会广播ARP消息
[html]
view plaincopy
Sep 20 01:55:44 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
Sep 20 01:55:45 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
Sep 20 01:55:45 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.
Sep 20 01:55:45 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100
Sep 20 01:55:45 hadoopsrv avahi-daemon[3769]: Registering new address record for 192.168.8.100 on eth0.
Sep 20 01:55:50 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100
本文的目的主要是演示keepalived实现双机热备的功能和过程。
对于应用本身(tomcat)发生错误,以及"脑裂"等问题是不能解决的。
转帖:http://blog.chinaunix.net/space.php?uid=11654074&do=blog&id=2857384
Contents Page
目录
入木三分学网络第一篇--VRRP协议详解...
1
1.
VRRP产生背景及应用环境... 2
1.1为什么要用VRRP.
2
2.VRRP基本原理及实现过程...
5
2.1
VRRP基本概念... 5
2.2
VRRP报文组成... 6
2.3
VRRP协议状态机... 8
2.3.1初始状态(Initialize)...
8
2.3.2备份路由器状态(Backup)...
9
2.3.3
Master路由器(Master state)... 10
2.4
VRRP通告报文的发送与接收处理流程... 11
3.
VRRP的两种应用需求:... 12
冗余备份、负载均衡...
12
4.实例研究...
14
4.1
VRRP在Cisco路由器上的实现... 14
4.2
VRRP在Redback路由器上的实现... 15
4.3
VRRP在Juniper路由器上的实现... 18
5.
VRRP的安全性... 19
6.一个典型的VRRP故障分析...
20
7.后记...
22
作者:张蒙 (zmouc)
电子邮箱:qdzhangmeng@163.com
MSN:qdzhangmeng@163.com
QQ : 407-960-134
博客地址:http://zmouc.cublog.cn
建立日期:2010年07月23日
版 本:1.0
版权说明:本文基于创作共用约定,内容归作者版权所有,欢迎大家转载,但要保留 作者的完整信息和出处,谢谢!
1. VRRP产生背景及应用环境
1.1为什么要用VRRP
VRRP(Virtual Router Redundancy Protocol)------虚拟路由器冗余协议,其最新技术标准是RFC3768。为什么要用VRRP呢,主要是为了实现数据链路层互通设备的冗余备份功能,我们来看图一:
图一(常规网络架构)
通过上图可以看到,常规的局域网一般都是多个终端接到交换机上,然后通过单独的出口路由器连接到Internet,这时候问题来了,如果这个出口路由器坏掉了,那么整个上行的流量就会全部断掉,这就是传说中的单点故障。
所以说我们要避免出现这种情况,本着冗余备份的思想,我们对上面的网络进行物理改造,如下图:
图二(消除了单点故障的常规网络架构)
现在,这个网络一共有两个Internet出口,这样任何一个出口路由器出现故障都不会导致终端用户的上行流量断掉。
另外一个问题出现了,我们怎么让终端PC知道局域网中有两个出口路由器,并在其中一个出现故障后自动选择另外一个呢?可采用的方案包括让终端PC运行动态路由协议,比如RIP、OSPF,或者ICMP
router Discovery client(DISC),或者指定一条静态缺省路由。
但是这三种实现方法都有其劣势及不可行之处,我们来具体分析一下。首先对于在每一个终端PC上运行动态路由协议来讲,几乎是不可能的,这其中牵涉到网管的技术能力和日常维护、安全性问题、以及某些终端平台不支持动态路由协议,比如我们常用的XP、Windows7都不支持,而windows
Server系列OS支持。
假定我们在终端PC上部署了动态路由协议,那么每一个终端用户都会遇到下面这种情况:
10086:尊敬的用户您好,申报RIP故障请按1,申报OSPF故障请按2,申报ISIS故障请按3……….
用户:(
⊙ o ⊙ )啊!我家是OSPF,按2。
10086:您好,您申报的故障是OSPF,请进一步选择,OSPF邻居无法建立请按1,OSPF密钥不对请按2,链路状态数据库异常请按3,路由表错误请按4…………..
用户:(
⊙ o ⊙ )啊!……………然后吐血身亡………….
所以说,N多现实问题和困难导致在终端PC上部署动态路由协议具有不可行性。
那么对于在终端PC上部署DISC等邻居或路由器发现协议呢?也存在种种问题,例如在网络内存在大量主机,每一台都需要运行DISC,除了增加主机的处理负担外,也会导致协议收敛缓慢,从而不能及时发现不可用邻居路由器,产生路由黑洞,这是不可接受的。
现在只剩下在终端PC上配置静态缺省路由了(其具体表现形式一般是设置网关),这是几乎每一个IP平台都支持的配置功能,即使是一部IP电话机,根据这个思路,我们在终端上配置多个默认网关即可实现路由备份了,但是存在以下两个问题:
1. 对于下行设备是PC来讲,配置了多个默认网关之后,其中一个会作为活动默认
网关,其它的作为备份默认网关,其按照下列过程执行流量转发和失效网关检测:
当TCP/IP在通过活动默认网关向某个目标IP地址进行TCP通信时,如果失败的尝试次数达到TcpMaxDataRetransmissions注册表值(默认为5)的一半(即3次)还没有收到响应,TCP/IP将到达该目标IP地址的通信改为使用列表中的下一默认网关,这一步是通过更改该远程IP地址的路由缓存项(Route
Cache Entry,RCE)来实现的,从而使用列表中的下一个默认网关来作为下一跳地址。其中RCE是路由表中的一个条目,用于存储目的地的下一跳IP地址。当超过25%的TCP连接转向下一默认网关时,TCP/IP将活动默认网关修改为这些连接当前使用的默认网关。
如果此时原始默认网关从故障中回复,TCP/IP将继续使用当前的活动默认网关,而不会转移到原始默认网关,除非重启计算机。如果当前的活动默认网关也出现故障,那么TCP/IP就会继续尝试使用列表中的下一个默认网关,在尝试完整个列表后将返回到列表的开始,又从第一个默认网关开始进行尝试。
死网关检测仅监视TCP流量,如果其他类型的流量连接失败,不会切换默认网关。另外TCP是端到端的协议,因此即使当前默认网关完全正常,本地计算机的TCP通信失败也可能会导致切换默认网关。
当不同网络接口所连接的网络之间没有连接性时(如一个网络接口连接到Internet,而一个网络接口连接到内部网络),如果在多个网络接口上同时配置默认网关,在活动默认网关出现故障导致切换默认网关时,就可能会引起连接性故障。比如活动默认网关为Internet连接,当它出现问题时,此时默认网关切换为内部连接,此时,本地计算机将无法再访问位于Internet连接上的主机。对于这种情况,微软建议使用
route add 来添加对应目的网络的匹配路由,而不是设置多个默认网关,这其实就是最长匹配原则,精确路由优先于缺省路由。
2.对于下行设备是路由器的情况,其不会切换默认路由,只会按照配置好的缺省
路由优先级进行流量转发,从而导致路由黑洞。
结合上面两个原因,在网络出口路由器的下行设备上配置缺省路由的方法也不可行。
综上所述,要想消除单点故障,又同时实现下行设备在故障发生时的流量无障碍
转发,以上的三个方法均不可行,所以人们开发出了一种全新的协议:VRRP,这
种协议无需下行设备与出口路由器进行交互性操作,却完全实现了网络出口的冗
余备份,下一节,我们就来详细讨论下VRRP的基本原理及实现过程。
2.VRRP基本原理及实现过程
2.1 VRRP基本概念
VRRP路由器:运行VRRP协议一个或多个实例的路由器虚拟路由器:由一个Master路由器和多个Backup路由器组成。其中,无论Master路由器还是Backup路由器都是一台VRRP路由器,下行设备将虚拟路由器当做默认网关。
VRID:虚拟路由器标识,在同一个VRRP组内的路由器必须有相同的VRID,其实VRID就相当于一个公司的名称,每个员工介绍自己时都要包含公司名称,表明自己是公司的一员,同样的道理,VRID表明了这个路由器属于这个VRRP组。
Master路由器:虚拟路由器中承担流量转发任务的路由器
Backup路由器:当一个虚拟路由器中的Master路由器出现故障时,能够代替Master路由器工作的路由器
虚拟IP地址:虚拟路由器的IP地址,一个虚拟路由器可以拥有一个或多个虚拟IP地址。
IP地址拥有者:接口IP和虚拟路由器IP地址相同的路由器就叫做IP地址拥有者。
主IP地址:从物理接口设置的IP地址中选择,一个选择规则是总是选用第一个IP地址,VRRP通告报文总是用主IP地址作为该报文IP包头的源IP。
虚拟MAC地址:组成方式是00-00-5E-00-01-{VRID},前三个字节00-00-5E是IANA组织分配的,接下来的两个字节00-01是为VRRP协议指定的,最后的VRID是虚拟路由器标识,取值范围[1,255]
2.2 VRRP报文组成
下面我们来看VRRP报文的具体组成:图三(VRRP报文格式,取自RFC3768)
具体字段含义:
Version:VRRP协议版本号,RFC3768定义了版本2.
Type:该字段指明了VRRP报文的类型,RFC3768只定义了一种VRRP报文,那就是
VRRP通告报文,所以该字段总是置为1,若收到的VRRP通告报文拥有非1的类型
值,那么会被丢弃。
Virtual Rtr ID:也就是我们上面介绍过的VRID,一个VRID唯一地标识了一个虚拟
路由器,取值范围是[1,255],所以一台路由器的接口可以同时运行最多255个VRRP
实例,此字段没有缺省值,必须人为设定。
Priority:优先级,在一个虚拟路由器中用来选取Master路由器和Backup路由器,值越大表明优先级越高,此字段共有8个bit,取值范围[1,254],若没有人为指定,缺省值是100。其中,VRRP协议会将IP地址拥有者路由器的该字段永远设置为255,若人为指定为其它值,也不会影响VRRP协议的默认行为,即IP地址拥有者路由器的该字段总是255。另外,此字段设置为0会出现在下面这种情形中,当Master路由器出现故障后,它会立刻发送一个Priority置0的VRRP通告报文,当Backup路由器收到此通告报文后,会等待Skew
time时间,然后将自己切换为Master路由器,其中Skew time=(256-Backup路由器的优先级)/256,单位为秒,例如若Backup路由器的优先级为100,那么Skew time=156/256=0.609秒,对于主路由器来说,Skew time并没有实际意义,虽然cisco的路由器也会计算并显示出来。
Count IP Addrs:VRRP通告报文中包含的IP地址数量,这个字段其实就是为一个VRRP虚拟路由器所分配的IP地址的数量,我们来看一个cisco的实际例子:
配置如下:
interface Ethernet1/0
ip address 192.168.10.102 255.255.255.0
duplex half
vrrp 1 ip 192.168.10.52
vrrp 1 ip 192.168.10.51 secondary
vrrp 1 ip 192.168.10.53 secondary
end
我们来看一下上面的配置在封装成VRRP通告报文的时候,是如何进行的,如下
图:
图四(VRRP报文的抓包分析)
大家可以看到,VRRP通告报文中的Count IP Addrs字段的值为3,这是因为我们配置了3个虚拟IP地址,另外,下面的IP Address字段也按照我们配置虚拟IP的顺序进行了封装。
Auth Type:认证类型字段,是一个8位的无符号整数,一个虚拟路由器只能使用一种认证类型,如果Backup路由器收到的通告报文中认证类型字段是未知的或和本地配置的不匹配,那么它将丢弃该数据包。
值得注意的是,在RFC2338中为VRRP定义了3种认证类型:无认证、明文认证、MD5认证,但是在后续的实践中发现,这些手段无法提供行之有效的安全性,并且还会导致多个Master路由器的问题,所以在最新的VRRP标准:RFC3768中已经去掉了所有的认证类型。
目前认证类型字段的定义如下:
0 – 无认证,此时下面的Authentication Data字段将会被置为全0,接收到的路由器也会忽略此字段。
1 – 保留,是为了向前一个版本的RFC2338提供兼容性
2 – 保留,是为了向前一个版本的RFC2338提供兼容性
Adver Int::此字段规定了Mater路由器向外发送VRRP通告报文的时间间隔,以秒为单位,取值范围是[1,255],若没有人工配置,缺省为1秒。
Checksum:整个VRRP报文的校验和,计算过程中,将Checksum字段置为0,计算完成后将结果填入此字段。若希望进一步了解Checksum的计算,可以查看RFC1071(CKSM)。
IP Address:此字段存放3个VRRP虚拟路由器的虚拟IP地址,配置了几个就封装几个,在上面的cisco实例中我们配置了三个,那么VRRP通告报文就会封装3个。
Authentication Data:RFC3768中规定,此字段只是为了向RFC2338兼容,在实际的封装时,全置为0.,接收方也会忽略此字段。
2.3 VRRP协议状态机
对一个VRRP虚拟路由器来讲,,参与它的每一台VRRP路由器,都只有3种VRRP状态:Initialize,Master,Backup,在讲述这三种状态时会碰到一些新的概念,我们会在第一次遇到时做详细解释。2.3.1初始状态(Initialize)
这是配置好VRRP后,VRRP等待一个开始事件时的状态,当本地VRRP进程切换到此状态后,会依次执行下列操作:2.3.1.1如果本地优先级为255,也就是说自己是IP拥有者路由器,那么接下来它会:
1.发送VRRP通告报文
2.广播免费ARP请求报文,内部封装是虚拟MAC和虚拟IP的对应,有几个虚拟IP地址,那么就发送几个免费ARP请求报文。
3.启动一个Adver_Timer计时器,初始值为Advertisement_Interval(缺省是1秒),当该计时器超时后,会发送下一个VRRP通告报文
4.本地VRRP进程将自己切换为Master路由器
2.3.1.2如果,本地优先级不是255,,那么接下来它会:
1.设置Master_Down_Timer计时器等于Master_Down_Interval,也就是主路由器死亡时
间间隔,如果此计时器超时,那么Backup路由器就会宣布主路由器死亡。
其中Master_Down_Interval =(3*Advertisement_Interval)+ Skew_time举例来说,一个VRRP实例(也就是一个VRRP虚拟器)的优先级是100,报文发送
间隔是1秒,那么Master_Down_Interval = 3*1s +(256-100)/256s
= 3.609秒。
2.本地VRRP进程将自己切换为Backup路由器
2.3.2备份路由器状态(Backup)
2.3.2.1备份路由器是为了监控Master路由器的状态,如果一个VRRP路由器处于此状态,那么它会:
1. 不响应对虚拟IP地址的ARP请求报文
2. 丢弃帧头目的MAC地址是虚拟MAC的帧
3. 丢弃IP头中目的IP地址是虚拟IP的IP包
2.3.2.2
如果此时该VRRP路由器收到了一个shutdown事件,那么它会:
1. 取消Master_Down_Timer
2. 转换为初始状态(Initialize state)
2.3.2.3
如果Master_Down_Timer超时,那么该VRRP路由器会执行:
1.发送一个VRRP通告报文,
2.广播免费ARP请求报文,内部封装是虚拟MAC和虚拟IP的对应,有几个虚拟IP
地址,那么就发送几个免费ARP请求报文。
3.设置Adver_Timer计时器为Advertisement_Interval(缺省为1秒)
4.切换到Master状态
2.3.2.4
如果该Backup状态的VRRP路由器收到了一个VRRP通告报文;
当该VRRP通告报文的优先级字段为0时,那么路由器会将当前的
Master_Down_Timer设置为Skew_Time;
如果优先级不为0,并且大于或等于本地优先级,那么本地路由器会重置Master_Down_Timer计时器并保持Backup状态;
如果优先级不为0,并且小于本地优先级,如果开启了抢占模式(Preempt mode),
那么该Backup路由器等待指定的抢占延迟时间后将自己切换为Master路由器;并执
行Master路由器的所有动作;例如:vrrp 1 preempt delay minimum 10,表示等待10秒
后切换自己为Master;
如果优先级不为0,并且小于本地优先级,如果没有开启抢占模式(Preemptmode),那么本地路由器保持Backup状态。
2.3.3 Master路由器(Master state)
处于Master状态的路由器会执行目的MAC为虚拟MAC数据帧的转发,这里要清楚的是对于下行设备的arp表里,该虚拟MAC是和虚拟IP地址相对应的。2.3.3.1
当路由器处于Master状态时,会进行下面的动作:
1. 响应对虚拟IP地址的ARP请求
2. 转发目的MAC地址是虚拟MAC的数据帧
3. 拒绝目的IP地址是虚拟IP的数据包,除非它是IP地址拥有者(也就是优先级是
255的那个路由器)。
2.3.3.2
如果处于Master状态的VRRP进程收到了一个shutdown事件,那么它会:
1. 取消Adver_Timer计时器
2. 发送一个优先级字段置零的VRRP通告报文
3. 切换为初始状态(Intialize state)
2.3.3.3
如果Adver_Timer计时器超时,那么:
1. 发送一个VRRP通告报文
2. 重置Adver_Timer计时器
2.3.3.4
如果收到了一个VRRP报文且其优先级为0,那么:
1. 发送一个VRRP通告报文
2. 重置Adver_Timer计时器
2.3.3.5
如果收到了一个VRRP报文且其优先级高于本地优先级,或者收到的VRRP报文优先级等于本地优先级但是主IP地址高于本地的主IP地址,那么:
1. 取消Adver_Timer计时器
2. 设置Master_Down_Timer计时器为Master_Down_Interval
3. 切换为Backup状态
http://blog.csdn.net/fanlu319/article/details/7013258
相关文章推荐
- Nginx+Tomcat 实现负载均衡(Windows单机测试)
- Html代码中table跨2行和跨2列的用法
- UVALive 2995 Image Is Everything
- onenote未响应
- 如何搭建SSH+JPA+mysql项目
- poj3259 最短路判环
- MySQL数据库加密与解密
- Quartz任务调度2
- Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.
- C++中的多态性
- 从零开始学习嵌入式 - 什么是Endianness?
- Quartz参数说明
- 人和机器的视觉体验:为什么人工智能“会做梦”?
- 运用神经网络方法找寻集成学习中的最优权重
- cocos2d-x设计模式发掘之三:管理者模式
- 验证控件
- Javascript模块化编程-require.js[3]
- mysql innodb count(*)速度慢且不准确的解决办法
- textView画横线需求
- 使用play时使用JPA查询,还是原生SQL查询