三篇很好的讲解keppalived的博客

VRRP协议介绍

参考资料: RFC 3768

1. 前言

VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,最新协议在RFC3768中定义,原来的定义RFC2338被废除,新协议相对还简化了一些功能。

2. 协议说明

2.1 协议

VRRP协议是为消除在静态缺省路由环境下的缺省路由器单点故障引起的网络失效而设计的主备模式的协议,使得在发生故障而进行设备功能切换时可以不影响内外数据通信,不需要再修改内部网络的网络参数。VRRP协议需要具有IP地址备份,优先路由选择,减少不必要的路由器间通信等功能。

VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个),而在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话就是MASTER,或者是通过算法选举产生,MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等;其他设备不拥有该IP,状态是BACKUP,除了接收MASTER的VRRP状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先MASTER的网络功能。

配置VRRP协议时需要配置每个路由器的虚拟路由器ID(VRID)和优先权值,使用VRID将路由器进行分组,具有相同VRID值的路由器为同一个组,VRID是一个0~255的正整数;同一组中的路由器通过使用优先权值来选举MASTER,优先权大者为MASTER,优先权也是一个0~255的正整数。

VRRP协议使用多播数据来传输VRRP数据,VRRP数据使用特殊的虚拟源MAC地址发送数据而不是自身网卡的MAC地址,VRRP运行时只有MASTER路由器定时发送VRRP通告信息,表示MASTER工作正常以及虚拟路由器IP(组),BACKUP只接收VRRP数据,不发送数据,如果一定时间内没有接收到MASTER的通告信息,各BACKUP将宣告自己成为MASTER,发送通告信息,重新进行MASTER选举状态。

2.2 MASTER选举
如果对外的虚拟路由器IP就是路由器本身配置的IP地址的话,该路由器始终都是MASTER;
否则如果不具备虚拟IP的话,将进行MASTER选举,各路由器都宣告自己是MASTER,发送VRRP通告信息;
如果收到其他机器的发来的通告信息的优先级比自己高,将转回BACKUP状态;
如果优先级相等的话,将比较路由器的实际IP,IP值较大的优先权高;
不过如果对外的虚拟路由器IP就是路由器本身的IP的话,该路由器始终将是MASTER,这时的优先级值为255。

2.3 协议状态机

VRRP协议状态比较简单,就三种状态,初始化,主机,备份机。

  1. +---------------+
  2. +--------->|               |<-------------+
  3. |          |  Initialize   |              |
  4. |   +------|               |----------+   |
  5. |   |      +---------------+          |   |
  6. |   |                                 |   |
  7. |   V                                 V   |
  8. +---------------+                       +---------------+
  9. |               |---------------------->|               |
  10. |    Master     |                       |    Backup     |
  11. |               |<----------------------|               |
  12. +---------------+                       +---------------+

复制代码

初始化:
路由器启动时,如果路由器的优先级是255(最高优先级,路由器拥有路由器地址),要发送VRRP通告信息,并发送广播ARP信息通告路由器IP地址对应的MAC地址为路由虚拟MAC,设置通告信息定时器准备定时发送VRRP通告信息,转为MASTER状态;
否则进入BACKUP状态,设置定时器检查定时检查是否收到MASTER的通告信息。

主机:
主机状态下的路由器要完成如下功能:
设置定时通告定时器;
用VRRP虚拟MAC地址响应路由器IP地址的ARP请求;
转发目的MAC是VRRP虚拟MAC的数据包;
如果是虚拟路由器IP的拥有者,将接受目的地址是虚拟路由器IP的数据包,否则丢弃;
当收到shutdown的事件时删除定时通告定时器,发送优先权级为0的通告包,转初始化状态;
如果定时通告定时器超时时,发送VRRP通告信息;
收到VRRP通告信息时,如果优先权为0,发送VRRP通告信息;否则判断数据的优先级是否高于本机,或相等而且实际IP地址大于本地实际IP,设置定时通告定时器,复位主机超时定时器,转BACKUP状态;否则的话,丢弃该通告包;

备机:
备机状态下的路由器要实现以下功能:
设置主机超时定时器;
不能响应针对虚拟路由器IP的ARP请求信息;
丢弃所有目的MAC地址是虚拟路由器MAC地址的数据包;
不接受目的是虚拟路由器IP的所有数据包;
当收到shutdown的事件时删除主机超时定时器,转初始化状态;
主机超时定时器超时的时候,发送VRRP通告信息,广播ARP地址信息,转MASTER状态;
收到VRRP通告信息时,如果优先权为0,表示进入MASTER选举;否则判断数据的优先级是否高于本机,如果高的话承认MASTER有效,复位主机超时定时器;否则的话,丢弃该通告包;

2.4 ARP查询处理

当内部主机通过ARP查询虚拟路由器IP地址对应的MAC地址时,MASTER路由器回复的MAC地址为虚拟的VRRP的MAC地址,而不是实际网卡的MAC地址,这样在路由器切换时让内网机器觉察不到;而在路由器重新启动时,不能主动发送本机网卡的实际MAC地址。如果虚拟路由器开启的ARP代理(proxy_arp)功能,代理的ARP回应也回应VRRP虚拟MAC地址;

2.5 VRRP应用举例

  1. +-----------+      +-----------+
  2. |   Rtr1    |      |   Rtr2    |
  3. |(MR VRID=1)|      |(BR VRID=1)|
  4. |(BR VRID=2)|      |(MR VRID=2)|
  5. VRID=1  +-----------+      +-----------+  VRID=2
  6. IP A ---------->*            *<---------- IP B
  7. |            |
  8. |            |
  9. ------------------+------------+-----+--------+--------+--------+--
  10. ^        ^        ^        ^
  11. |        |        |        |
  12. (IP A)   (IP A)   (IP B)   (IP B)
  13. |        |        |        |
  14. +--+--+  +--+--+  +--+--+  +--+--+
  15. |  H1 |  |  H2 |  |  H3 |  |  H4 |
  16. +-----+  +-----+  +--+--+  +--+--+
  17. Legend:
  18. ---+---+---+--  =  Ethernet, Token Ring, or FDDI
  19. H  =  Host computer
  20. MR  =  Master Router
  21. BR  =  Backup Router
  22. *  =  IP Address
  23. (IP)  =  default router for hosts

复制代码

这是通常VRRP使用拓扑,两台路由器运行VRRP互为备份,路由器1作为VRID组1的MASTER,IP地址A,VRID组2的BACKUP,路由器2作为VRID组2的MASTER,IP地址B,VRID组1的BACKUP,内部网络中一部分机器的缺省网关地址是IP地址A,一部分是IP地址B,正常情况下以A为网关的数据将走路由器1,以B为网关的数据将走路由器2,如果一台路由器发生故障,所有数据将走另一台路由器。

3. 协议定义

3.1 以太头

源MAC地址必须为虚拟MAC地址:00-00-5E-00-01-{VRID},VRID为虚拟路由器ID值,16进制格式,所以同一网段中最多有255个VRRP路由器;目的MAC为多播类型的MAC。

这里可以看出VRID非常重要

3.2 IP头参数

VRRP包的源地址是本机地址,目的地址必须为224.0.0.18,为一多播地址;IP协议号为112;IP包的TTL值必须为255。

3.3 VRRP协议数据格式

  1. 0                   1                   2                   3
  2. 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  3. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4. |Version| Type  | Virtual Rtr ID|   Priority    | Count IP Addrs|
  5. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  6. |   Auth Type   |   Adver Int   |          Checksum             |
  7. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  8. |                         IP Address (1)                        |
  9. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  10. |                            .                                  |
  11. |                            .                                  |
  12. |                            .                                  |
  13. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  14. |                         IP Address (n)                        |
  15. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  16. |                     Authentication Data (1)                   |
  17. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  18. |                     Authentication Data (2)                   |
  19. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

复制代码

其中:
version:版本,4位,在RFC3768中定义为2;
Type:类型,4位,目前只定义一种类类型:通告数据,取值为1;
Virtual Rtr ID:虚拟路由器ID,8位
Priority:优先级,8位,具备冗余IP地址的设备的优先级为255;
Count IP Addrs:VRRP包中的IP地址数量,8位;
Auth Type:认证类型,8位,RFC3768中认证功能已经取消,此字段值定义0(不认证),为1,2只作为对老版本的兼容;
Adver Int:通告包的发送间隔时间,8位,单位是秒,缺省是1秒;
Checksum:校验和,16位,校验数据范围只是VRRP数据,即从VRRP的版本字段开始的数据,不包括IP头;
IP Address(es):和虚拟路由器相关的IP地址,数量由Count IP Addrs决定
Authentication Data:RFC3768中定义该字段只是为了和老版本兼容,必须置0。

3.4 接收数据时的必须检查

收到VRRP数据包时要进行以下验证,不满足的数据包将被丢弃:
   -  TTL必须为255;
   -  VRRP版本号必须为2;
   -  一个包中数据字段必须完整;
   -  校验和必须正确;
   -  必须验证在接收的网卡上配置了VRID值,而且本地路由器不是路由IP地址的拥有者
   -  必须验证VVRP认证类型和配置的一致;

4. 结论

VRRP实现了对路由器IP地址的冗余功能,防止了单点故障造成的网络失效,VRRP本身是热备形式的,但可以通过互相热备实现路由器的均衡处理,新版的VRRP较老版简化了认证处理,实际不再进行数据的认证,这是因为在实际应用中经常出现认证成为造成多个MASTER同时使用的异常情况。

Keepalived原理与实战精讲

http://bbs.nanjimao.com/thread-845-1-1.html

Keepalived案例一:Keepalived双机热备(HA)精讲

http://bbs.nanjimao.com/thread-855-1-1.html

时间: 2024-10-06 22:53:41

三篇很好的讲解keppalived的博客的相关文章

来了很久今天才想到写博客

来了很久今天才想到写博客.以后会常来记录自己的学习心得.

[uiautomator篇] 如何获取apk的包名 博客模板

Android自动化学习笔记:获取APK包名的几种方法 ---------------------------------------------------------------------------------------------------------------------------- 小记:自学过程中,经常需要用得到一个APK的包名,总结一下得到包名的几种方式. ********************** 2017-16-23:初版 ********************

三天独立开发的iOS端CSDN博客阅读器上线了

作为CSDN博客的忠实读者,作为一个iOS开发者,实在是不能忍受手机上无法看CSDN博客的不便,五一节抽空做了一个简单的CSDN博客阅读器,第一版仅提供博客首页热门文章查看功能和阅读个人博客功能.如果你认为有其他值得实现的优秀功能或者发现了bug,欢迎及时联系我. 由于第一天上架,AppStore还无法搜索到.从5.17日起,直接搜索csdn博客即可. 下载地址:https://itunes.apple.com/us/app/csdn-bo-ke/id991337359?l=zh&ls=1&

赢在面试之Java基础篇(4)--本文摘自小山博客,由java知音公众号发布

31.String s = new String("xyz");创建了几个StringObject?是否可以继承String类? 两个或一个都有可能,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个.NewString每写一遍,就创建一个新的对                象,它使用常量”xyz”对象的内容来创建出一个新String对象.如果以前就用过’xyz’,那么这里就不会创建”xyz”了,直接从缓冲区拿,这时创建了一个St

几篇很好的SPI相关文档

1, http://www.gammon.com.au/spi 这篇很详细地讲解了Arduino的SPI通信. 2,http://www.brianhensley.net/2012/07/getting-spi-working-on-raspberry-pi.html 这篇是讲Raspberry Pi的SPI通信. 3,http://mitchtech.net/raspberry-pi-arduino-spi/ 这篇介绍Pi与Arduino之间通过SPI通信,不过因为没有在二者之间加入电平转换,

第一篇无关技术的博客

光阴似高铁,岁月如动车.弹指一瞬间,开通博客园已经一年又七个月了,在这段时间里园子里的各种大神博客倒是浏览,学习了不少.然而自己的博客基本没怎么写过,不,应该是一篇都没写,说来惭愧.在5个月前,准备写一篇关于WebRTC的文章,然而两个小时过去了,绞尽脑汁仅仅写了个引言和第一段,第一次写博客确实难以下笔,不同于上学时期的写作文,提笔就写,这算是自己真正意义上的第一篇博客吧,无关技术,既然打算开始写博客了,就单单词从几个方面谈谈对于写博客这件事的理解吧. 通过这几个月的工作的一些总结与思考,自己觉

【资源篇】常用博客网站

描述 本篇文章简要推荐一些常用技术博客网站 1   内容区 2  版权区 感谢您的阅读,若有不足之处,欢迎指教,共同学习.共同进步. 博主网址:http://www.cnblogs.com/wangjiming/. 极少部分文章利用读书.参考.引用.抄袭.复制和粘贴等多种方式整合而成的,大部分为原创. 如您喜欢,麻烦推荐一下:如您有新想法,欢迎提出,邮箱:[email protected]. 可以转载该博客,但必须著名博客来源.

转载一篇比较详细的讲解html,css的一篇文章,很长

转载自这里,转载请注明出处. DIV+CSS系统学习笔记回顾 第一部分 HTML 第一章 职业规划和前景 职业方向规划定位: web前端开发工程师 web网站架构师 自己创业 转岗管理或其他 web前端开发的前景展望: 未来IT行业企业需求最多的人才 结合最新的html5抢占移动端的市场 自己创业做老板 随着互联网的普及web开发成为企业的宠儿和核心 web职业发展目标: 第一.梳理知识架构 负责内容的HTML 负责外观的css(层叠样式表) 负责行为的js ps切图 第二.分解目标(起步阶段.

linux设备驱动第三篇:写一个简单的字符设备驱动

在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动.本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分配的一些内存. 下面就开始学习如何写一个简单的字符设备驱动.首先我们来分解一下字符设备驱动都有那些结构或者方法组成,也就是说实现一个可以使用的字符设备驱动我们必须做些什么工作. 1.主设备号和次设备号 对于字符设备的访问是通过文件系统中的设备名称进行的.他们通常位于/dev目录下.如下: [plain] vie