写在前面

keepalived是一个基于VRRP协议来实现的服务高可用方案,从而可以避免IP单点故障。一般与其他负载均衡技术,如LVS,Nginx等一起来工作来达到集群高可用的目的
关于Keepalived+LVS-DR+Nginx高可用故障切换模式的环境搭建,写过一篇博客,感兴趣可以参考:[Keepalived+LVS-DR+Nginx高可用故障切换模式](https://blog.csdn.net/zll_0405/article/details/80874545)
这篇文章想把重点放在VRRP协议上面,我觉得这对于理解keepalived如何工作,能够有一个比较好的帮助。

VRRP简介(转发机制)

1. VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)将可以承担网关功能的路由器加入到备份组中,形成一台虚拟路由器,由VRRP的选举机制决定哪台路由器承担转发任务,局域网内的主机只需将虚拟路由器配置为缺省网关

2. VRRP是一种选择协议,它可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。控制虚拟路由器 IP 地址的 VRRP 路由器称为主路由器,它负责转发数据包到这些虚拟 IP 地址。

一旦主路由器不可用,这种选择过程就提供了动态的故障转移机制,这就允许虚拟路由器的 IP 地址可以作为终端主机的默认第一跳路由器

3.VRRP是一种容错协议,在提高可靠性的同时,简化了主机的配置。在具有多播或广播能力的局域网(如以太网)中,借助VRRP 能在某台设备出现故障时仍然提供高可靠的缺省链路,有效避免单一链路发生故障后网络中断的问题,而无需修改动态路由协议、路由发现协议等配置信息

4. VRRP协议的实现有VRRPv2和VRRPv3两个版本,VRRPv2基于IPv4,VRRPv3基于IPv6

5. VRRP路由器: 所有运行VRRP协议的路由器就叫做VRRP路由器

6. VRRP备份组: 多台路由器被分到一个组中,在这个组中选举出一台主路由器,其他作为备份路由器。平常时候都是主路由器一个工作,备份路由器空闲,当主路由器故障后,从多台备份路由器中选举出一台替代故障的主路由器工作。这一组中的路由器构成了一个备份组。

7. 虚拟路由器:虚拟路由器是VRRP备份组中所有路由器的集合,它是一个逻辑概念,并不是正真存在的。从备份组外面看备份组中的路由器,感觉组中的所有路由器就像一个一样,你可以理解为在一个组中: 主路由器+所有备份路由器=虚拟路由器。虚拟路由器有一个虚拟的IP地址和MAC地址。如果虚拟IP和备份组中的某台路由器的IP相同的话,那么这台路由器称为IP地址拥有者,并且作为备份组中的主路由器

VRRP状态

VRRP路由器在运行过程中有三种状态:

  1. Initialize状态: 系统启动后就进入Initialize,此状态下路由器不对VRRP报文做任何处处理,可以理解为初始化
  2. Master状态: 路由器会发送VRRP通告,发送免费ARP报文。
  3. Backup状态: 接受VRRP通告。

    一般主路由器处于Master状态,备份路由器处于Backup状态。
VRRP工作过程如下:

1. 路由器使能VRRP 功能后,会根据优先级确定自己在备份组中的角色。优先级高的路由器成为Master 路由器,优先级低的成为Backup 路由器。Master 路由器定期发送VRRP 通告报文,通知备份组内的其他设备自己工作正常;Backup 路由器则启动定时器等待通告报文的到来。

2. 在抢占方式下,当Backup 路由器收到VRRP 通告报文后,会将自己的优先级与通告报 文中的优先级进行比较。如果大于通告报文中的优先级,则成为Master 路由器;否则将保持Backup状态

3. 在非抢占方式下,只要Master 路由器没有出现故障,备份组中的路由器始终保持Master 或Backup 状态,Backup 路由器即使随后被配置了更高的优先级也不会成为Master 路由器

4. 如果Backup 路由器的定时器超时后仍未收到Master 路由器发送来的VRRP 通告报文,则认为Master 路由器已经无法正常工作,此时Backup 路由器会认为自己是Master 路由器,并对外发送VRRP 通告报文。备份组内的路由器根据优先级选举出Master 路由器,承担报文的转发功能

原理图



最后再来看一下原理图,因为keepalived是一个基于VRRP协议来实现的服务高可用方案,所以当主调度服务器133宕机之后,134会自动接替133所担任的职责,继续工作。但这个过程不怎么影响其他机器的运行。虚拟IP在这里起到了很大的作用。

刚开始搭建这一套环境的时候,很不明白,明明4个IP就够用了,咋还多出来一个虚拟IP在这儿干啥呢。现在有了些许的了解。希望你也能有所收获。

感谢您的阅读~

【原理】VRRP详解的更多相关文章

  1. MapReduce工作原理图文详解 (炼数成金)

    MapReduce工作原理图文详解 1.Map-Reduce 工作机制剖析图: 1.首先,第一步,我们先编写好我们的map-reduce程序,然后在一个client 节点里面进行提交.(一般来说可以在 ...

  2. MapReduce 1工作原理图文详解

    MapReduce工作原理图文详解 一 MapReduce程序执行流程 程序执行流程图如下: 流程分析:1.在客户端启动一个作业.2.向JobTracker请求一个Job ID.3.将运行作业所需要的 ...

  3. HashMap实现原理分析(详解)

    1. HashMap的数据结构 http://blog.csdn.net/gaopu12345/article/details/50831631   ??看一下 数据结构中有数组和链表来实现对数据的存 ...

  4. RDD原理与详解

    RDD详解 原文连接 http://xiguada.org/spark_rdd/ RDD(Resilient Distributed Datasets弹性分布式数据集),是spark中最重要的概念,可 ...

  5. [GO语言的并发之道] Goroutine调度原理&Channel详解

    并发(并行),一直以来都是一个编程语言里的核心主题之一,也是被开发者关注最多的话题:Go语言作为一个出道以来就自带 『高并发』光环的富二代编程语言,它的并发(并行)编程肯定是值得开发者去探究的,而Go ...

  6. 架构-虚拟路由器冗余协议【原理篇】VRRP详解

    转自:http://zhaoyuqiang.blog.51cto.com/6328846/1166840/ 为什么要使用VRRP技术 我们知道,为了实现不同子网之间的设备通信,需要配置路由.目前常用的 ...

  7. (转)虚拟路由器冗余协议【原理篇】VRRP详解

    原文:http://blog.51cto.com/zhaoyuqiang/1166840 为什么要使用VRRP技术 我们知道,为了实现不同子网之间的设备通信,需要配置路由.目前常用的指定路由方法有两种 ...

  8. iOS---NSAutoreleasePool自动释放原理及详解

    前言:当您向一个对象发送一个autorelease消息时,Cocoa就会将该对象的一个引用放入到最新的自动释放池.它仍然是个正当的对象,因此自动释放池 定义的作用域内的其它对象可以向它发送消息.当程序 ...

  9. MapReduce工作原理图文详解

    目录:1.MapReduce作业运行流程2.Map.Reduce任务中Shuffle和排序的过程 1.MapReduce作业运行流程 流程示意图: 流程分析: 1.在客户端启动一个作业. 2.向Job ...

随机推荐

  1. [HNOI2003]消防局的设立 树形dp // 贪心

    https://www.luogu.org/problemnew/show/P2279 一开始就想到了贪心的方法,不过一直觉得不能证明. 贪心的考虑是在深度从深到浅遍历每个结点的过程中,对于每个没有覆 ...

  2. CodeForces149D dfs实现区间dp

    http://codeforces.com/problemset/problem/149/D 题意 给一个合法的括号串,然后问这串括号有多少种涂色方案,当然啦!涂色是有限制的. 1,每个括号只有三种选 ...

  3. 图论分支-Tarjan初步-边双联通分量

    本来应该先说强连通分量,但是有一定的分配,所以这个在下一篇博客将会见到. 这个本想连点连通分量一起讲,但是量有点大,所以我就分两步讲. 我们先看定义 再来看看图解 很容易就能发现,只要将割边断掉,然后 ...

  4. java类的加载和执行顺序

    以前面试总会碰到涉及到类的执行过程的笔试题.下面记录我自己的测试结果: public class ClassA { public static ClassA classa = new ClassA() ...

  5. Hbase 1.3.0 Rsgroup

    HBase RSGroup Git环境window环境下,警用crlf自动转换git config --global core.autocrlf false protobuf环境yum install ...

  6. java io系列11之 FilterOutputStream

    FilterOutputStream 介绍 FilterOutputStream 的作用是用来“封装其它的输出流,并为它们提供额外的功能”.它主要包括BufferedOutputStream, Dat ...

  7. Java 微信公众号导出所有粉丝(openId)

    由于公众号换了公司主体,需要做迁移,玩家的openId数据需要做处理. (我是按我要的json格式,将粉丝导成了1万条数据的一个json文件) 文件格式: { "info":[ { ...

  8. Hadoop记录-hadoop2.x常用端口及定义方法

    Hadoop集群的各部分一般都会使用到多个端口,有些是daemon之间进行交互之用,有些是用于RPC访问以及HTTP访问.而随着Hadoop周边组件的增多,完全记不住哪个端口对应哪个应用,特收集记录如 ...

  9. mysql 用户及权限管理 小结

    MySQL 默认有个root用户,但是这个用户权限太大,一般只在管理数据库时候才用.如果在项目中要连接 MySQL 数据库,则建议新建一个权限较小的用户来连接. 在 MySQL 命令行模式下输入如下命 ...

  10. Elasticsearch集群节点配置详解

    注意:如果是在局域网中运行elasticsearch集群也是很简单的,只要cluster.name设置一致,并且机器在同一网段下,启动的es会自动发现对方,组成集群. 2.elasticsearch- ...