简介

VRRP 是 Virtual Router Redundancy Protocol 的简称,即 虚拟路由冗余协议 。

原文地址:https://linux-network-programming.readthedocs.io
QQ交流群:Linux网络编程,群号:183196643
欢迎关注我们的公众号:小菜学编程 (coding-fan)

VRRP 最早被设计来解决网关的高可用问题:

我们知道,计算机进行网络通讯时,需要网关来传输网络报文。 每台机器只能配置一个网关地址,这时网关的可靠性就非常重要了。 如果网关不幸故障了,那么使用该网关的所有机器都将受影响——断网了!

解决网关单点问题的思路非常直观——部署一个备用网关,在主网关故障时切换过去。

然而,由于机器只能配置一个网关地址,因此每次切换网关都需要修改该配置。 这个解决方案没能做到自动化,并不优雅。

这时, VRRP 应运而生!接下来,以一个简单的例子介绍 VRRP 是如何工作的:

事情是这样的。

这个网络部署了两台 路由 进行互备,本网络内其他机器以这两台路由为网关进行网络通讯。 两台路由的 IP 地址分别是: 192.168.1.1 以及 192.168.1.2 。 但路由并不直接通过这些地址提供转发服务,而是使用一个 虚拟地址 192.168.1.253 。 其他计算机,如 192.168.1.3 将网关地址配置为 192.168.1.253 。

通过 VRRP ,两台路由互相进行 健康检查 。 当两台路由都是健康的情况下,只有主路由对外提供虚拟地址的 ARP 响应。 这时,发往虚拟地址 192.168.1.253 的流量都由主路由处理。

当主路由故障时,备用路由将检测到。 这时,备用路由开始通过 ARP 协议对外通告:虚拟地址 192.168.1.253 对应的 MAC 地址是我, 被我接管了!

接下来,发往虚拟地址 192.168.1.253 的流量就开始由备用路由处理了。 这时,虚拟地址 192.168.1.253 看上去就像是 漂移 到备用路由上一样。 换句话讲,网关成功进行切换,而且无需修改其他机器的网关配置!

主路由恢复后,将通过类似的手段,重新拿回流量的处理权。 这部分将不再赘述。

完整流程如下:

  1. 两台路由互相进行健康检查;
  2. 主路由对外响应虚拟地址的 ARP 请求,通告其 MAC 地址;
  3. 虚拟地址网络流量被主路由处理;
  4. 备用路由发现主路由故障,开始响应虚拟地址的 ARP 请求,通告其 MAC 地址;
  5. 虚拟地址网络流量被备用路由处理;
  6. 主路由恢复,重新响应 ARP 请求,夺回流量;
  7. 备用路由发现主路由恢复,停止响应 ARP 请求,释放流量处理权;

总结起来, VRRP 主要做两件事情:

  1. 通过 ARP 响应 MAC 地址实现虚 IP 漂移;
  2. 通过健康检查决定什么时候进行虚 IP 漂移;

应用场景

本质上, VRRP 是用来实现高可用的,与网关无关。

我们可以将其应用于一些网络服务的高可用,如 Web 服务:

服务高可用方案有很多, VRRP 特别适用于以下场景:

  1. 服务对外只能呈现为单个 IP ;
  2. 同一时刻只允许一个实例对外服务;

此外, VRRP 也可用于实现负载均衡设施的高可用。 应用的高可用通过负载均衡设施解决,那么负载均衡设施如何实现高可用呢? 答案是—— VRRP !

下面是一个非常典型的例子:

局限性

由于 VRRP 依赖 ARP 实现 IP 漂移,因此相关机器必须在同个网络内, 不能跨网段 。

VRRP虚IP漂移的更多相关文章

  1. openstack私有云布署实践【3 keepalive配置(VRRP虚IP)】

    这里只用到keepalived 或者pacemaker两种方法,可二选一来配置,官方提供的是pacemaker,但我们实际测试环境和生产环境上使的是keepalive     首先在4台control ...

  2. 虚IP解决程序连只读服务器故障漂移

    目前公司有一套核心交易数据库配置了AlWaysON,SQL 2012版本, 1主4从, 其从库(8,14, 8.15) 这2台只读的从数据库服务器, 后台程序和wms等很多程序,都是直接配置IP连接这 ...

  3. 虚拟IP和IP漂移

    学习一下虚拟IP和IP漂移的概念. 1.虚拟IP 在 TCP/IP 的架构下,所有想上网的电脑,不论是用何种方式连上网路,都必须要有一个唯一的 IP-address.事实上IP地址是主机硬件地址的一种 ...

  4. 什么是VIP?什么是IP漂移?

    IP地址和MAC地址 在 TCP/IP 的架构下,所有想上网的电脑,不论是用何种方式连上网路,都必须要有一个唯一的 IP-address.事实上IP地址是主机硬件地址的一种抽象,简单的说,MAC地址是 ...

  5. 【转】解决keepalived正常启动但是虚IP(VIP)没有生成的问题

    如题所示,keepalived安装配置好之后能够正常启动,但是虚IP并没有生成.接着检查防火墙(iptables)发现也没有相关的限制.稍微郁闷了一下之后,查看了keepalived日志文件,这次成功 ...

  6. VRRP+tunnel+IP SLA+Track实现冗余切换

    IP SLA(Internet Protocol Service-Level Agreement)互联网服务等级协议,本实验里通过发送测试报文,测试下一跳是否可达,结合Track实现冗余静态路由的切换 ...

  7. LINUX修改、增加IP的方法,一张网卡绑定多个IP/漂移IP【转】

    临时增加IP命令:ifconfig eth0:1 ip地址 netmask 子网码 broadcast 广播地址 gateway 网关  ifconfig eth0:1 10.1.104.65 net ...

  8. 虚IP切换原理

    高可用性HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性.HA系统是目前企业防止核心计算机系统因故 ...

  9. Alwayson架构下 服务器 各虚拟IP漂移监控告警的功能实现

    1.需求概括 我们知道,在SQL Server Alwayson 架构中,有多种虚拟IP,例如 WindowsCluster IP,ListenIP,角色高可用性IP(类似于侦听IP).在某些条件下, ...

随机推荐

  1. Two ways to invert a string

    package com.itheima_07; import java.util.Scanner; /* * 字符串反转 * 举例:键盘录入”abc” * 输出结果:”cba” * * 分析: * A ...

  2. sql 流程函数

    create table salary (userid int,salary decimal(9,2)); -- mysqlinsert into salary values(1,1000),(2,2 ...

  3. shell_processing

    1.文本处理_2:grep,sed,awk 2.regular_expression 3.Test   一.文本处理_2 1.grep --Linux处理正则表达式的主要程序.正则表达式是一种符号表示 ...

  4. HDFS pipeline写 -- 客户端

    上一篇说了datanode端如何处理pipeline写请求的,这里主要看DFSClient. 这里以append为例, write差不多. 创建一个pipeline用于append操作的流程: Fil ...

  5. Ehcache.xml 配置及属性说明

    1.配置样例 <?xml version="1.0" encoding="UTF-8"?> <ehcache> <diskStor ...

  6. MySQL Flashback 工具介绍

    MySQL Flashback 工具介绍 DML Flashback 独立工具,通过伪装成slave拉取binlog来进行处理 MyFlash 「大众点点评」 binlog2sql 「大众点评(上海) ...

  7. 局域网不同网段访问设置WINS域名服务系统

    大背景 公司两台路由器,网段不同 路由器:192.168.0.1 路由器:192.168.1.1 路由器2需要访问路由器1的机子,初始是ping不通的. 方案 使用IP设置里WINS设置,即可轻松实现 ...

  8. Aiseesoft Data Recovery 1.1.6 专业数据恢复软件破解版

    Aiseesoft Data Recovery是专业的数据恢复软件,它可以帮助你恢复几乎所有删除/丢失的文件,如照片,文件,电子邮件,音频,视频且支持从计算机,硬盘驱动器,闪存驱动器,存储卡,数码相机 ...

  9. robotFramework--ride 问题:Data source does not exist.

    第一次安装robotFramework,运行时提示Data source does not exist.最后发现是在Arguments这一栏误输入了. 导致的,去掉.后就可以正常运行了.

  10. 我的Java之旅——答答租车系统

    今天试着写了一个新的程序,叫做"答答租车系统",是慕课网上的一个综合练习,戳我看原题. 项目要求截图如下: 我的代码(简单粗暴版): Vehicle.java public cla ...