高可用虚拟IP(HaVip)技术详解:原理、设计与应用

1、背景

高可用虚拟IP(HaVip)是一种可以独立创建和释放的私网IP资源,具备与虚拟机、容器实例主私网IP地址一样的网络接入能力,可以与高可用软件,例如Keepalived配合使用,搭建高可用主备服务,提高业务的可用性。

在功能上,HaVip在支持创建、更新、删除、查询之外,还支持绑定和解绑实例、绑定和解绑EIP。

1.1 定义与核心功能

HAVIP(High-Availability Virtual IP)是一种由云平台(如腾讯云、阿里云)分配的内网IP地址,其核心功能是‌确保在主备服务器故障切换过程中,对外服务的虚拟IP地址保持不变‌,从而避免业务中断。它并非独立品牌产品,而是云计算基础设施中的技术组件,英文全称为"High-Availability Virtual IP",中文直译为"高可用虚拟IP"。‌

1.2 工作原理

HAVIP通过以下机制实现高可用性:

  1. ‌主备选举‌:与Keepalived等第三方HA软件配合,基于VRRP协议比较服务器优先级(priority值),选举出主服务器(Master)。主服务器负责处理流量,并周期性发送心跳报文至备服务器(Backup)。‌

  2. ‌故障切换‌:当备服务器在指定时间(由advert_int参数控制)内未收到心跳报文时,自动接管HAVIP,更新IP映射关系,确保流量无缝切换至新主服务器。‌

  3. ‌ARP报文支持‌:主服务器通过发送ARP报文更新网络设备中的MAC地址表,实现IP绑定,但需注意云环境通常仅支持单播通信。‌

2、方案设计

2.1 基本功能设计

创建HaVip并绑定实例

创建HaVip时,用户可以填写一个空闲的vpc内的IP地址,系统会使用这个IP(没有指定则自动分配)在vpc内创建一个havip port,用来占用这个IP,其device_owner为"compute:havip"。

HaVip绑定实例时,会为HaVip绑定的实例添加一条DB记录,初始状态为backup。并为实例网卡添加如下的allowed_address_pairs:

bash 复制代码
# ip_address为HaVip地址,mac_address为实例网卡mac# type初始默认为"snat",当Havip绑定EIP后会更新为"fip"{"ip_address": "11.239.0.227", "mac_address": "fa:16:3e:4d:82:73", "type": "snat"}

这是由于:在使用过程中HaVip这个IP会配置在master实例的网卡上,网卡使用这个IP进行收发包,为了保证流量联通性,需要在底层放行这种流量。

apache 复制代码
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc mq state UP group default qlen 1000    link/ether fa:16:3e:4d:82:73 brd ff:ff:ff:ff:ff:ff    inet 11.239.0.225/24 brd 11.239.0.255 scope global eth0       valid_lft forever preferred_lft forever    inet 11.239.0.227/32 scope global eth0          # HaVip       valid_lft forever preferred_lft forever    inet6 fe80::f816:3eff:fe4d:8273/64 scope link        valid_lft forever preferred_lft forever

主备切换

HaVip集群中的实例部署服务之初,会进行选主。之后如果主节点出现异常,会重新进行选主。选主成功的标志是主节点(master)会发送免费ARP包(gratuitous arp),来向其他节点通告自己的信息。

控制进程需要做的是:

  1. 下发流表,将gratuitous arp由ovs交给controller(控制进程)处理

    apache 复制代码
    cookie=0xd8e35d74fe67a8f8, duration=343130.645s, table=60, n_packets=0, n_bytes=0, priority=101,arp,in_port=2154,arp_spa=11.239.0.227,arp_tpa=11.239.0.227 actions=CONTROLLER:65535
  • 处理gratuitous arp包(收到的多个gratuitous arp包会被当作一个进行处理),在DB中标识此节点为HaVip集群的master,同时标识老的master为backup

  • 更新havip port的device_id为master port的ID,binding:host_id为master实例的宿主机

  • 通知FIP网关和CCN网关,修改HaVip相关的host和mac address信息,进行正确的导流

  • 从选主成功到neutron和网关的一系列数据变更,整个过程需要一定的时间,会造成访问HaVip的流量断流。经过测试,断流时间为秒级。

    HaVip绑定和解绑EIP

    如果一个HaVip集群中所有节点为backup,这个HaVip就是不可用的。只有在有且仅有一个master时,才能正常访问和使用。

    具体步骤如下:

    1. ultron调用neutron,为havip port绑定EIP

    2. neutron查询HaVip的master port,构造相关数据通知fip网关、ccn网关

    3. ultron调用neutron,更新HaVip的havip_type为"fip"

    4. neutron更新HaVip所有关联实例网卡的allowed_address_pair的type为"fip"

    同理,HaVip解绑EIP的操作为:

    1. ultron调用neutron,为havip port解除绑定EIP

    2. neutron查询HaVip的master port,通知fip网关、ccn网关清除相关记录

    3. ultron调用neutron,更新HaVip的havip_type为""

    4. neutron更新HaVip所有关联实例网卡的allowed_address_pair的type为"snat"

    2.2 流量设计

    跨vpc访问HaVip

    必须为HaVip绑定EIP,才支持跨vpc访问。

    这里包含两种情况:同集群和跨集群。流量均由fip网关转发给HaVip的master节点处理。如下图中红色箭头所示。

    同vpc访问HaVip

    需要分两个情况进行讨论,如下图中蓝色箭头所示。

    同集群

    理想的方式应为neutron生成HaVip的fdb信息,下发给同集群同vpc的节点。这样HaVip的流量直接进行fdb转发。但考虑到HaVip有可能经常进行主备切换,更新HaVip的fdb信息难以保证实时正常下发,总体实现复杂度高。而vpc内的流量默认交给ccn网关处理,可以不下发HaVip的fdb,在保证连通性的同时减少设计的复杂度。

    client出向流量经过ovs流表时,没有HaVip的fdb流表,默认交给ccn网关。ccn网关转发给HaVip的master节点处理。

    server回包时,由于ovs上有client的fdb流表,直接转发给client的host。

    跨集群

    由于没有fdb流表,client和server来回的流量均交给ccn网关转发。

    3、使用限制

    1. 一个HaVip下面最多添加5个实例

    2. 一个实例最多绑定5个HaVip

    3. HaVip 仅支持绑定同一个私有网络的实例,不支持绑定跨私有网络的实例。

    4. HaVip下首先添加的实例为master,后续添加的实例自动为backup

    5. 心跳检测需要在云服务器中的应用来实现,不是靠 HaVip 实现,HaVip 仅作为一个被 ARP 宣告的浮动内网 IP(体验与传统物理机保持一致)。

    6. 用户需要在HaVip添加实例之后部署keepalived等第三方HA服务或手动进行主备切换,来保证控制面识别出master和backup实例

    7. 删除HaVip之前需要解绑所有关联的实例

    4、配置流程

    keepalived 配置举例

    以keepalived为例,配置文件为/etc/keepalived/keepalived.conf,它的关键内容如下:

    1. virtual_ipaddress 为HaVip的地址

    2. state 为设置的状态,通常都设置为BACKUP,这样会由vrrp选举产生MASTER

    3. priority 为选主使用的优先级,若无特殊的需求,可以将所有实例的优先级设为相同的值

    5、应用场景

    1. ‌负载均衡高可用‌:在自建负载均衡集群中,HAVIP作为虚拟IP,确保负载均衡器主备切换时服务IP稳定。‌‌

    2. ‌数据库主备集群‌:如MySQL主备架构,通过HAVIP实现故障切换后数据库连接IP不变。‌

    3. ‌关键业务服务‌:例如Nginx Web服务器或SAP HANA系统,保障业务连续性。‌

    6、总结

    HaVip是一种与Keepalived配合的私网IP资源,它基于VRRP实现主备选举与秒级故障切换,通过免费ARP更新网络转发表。它支持绑定EIP实现跨VPC访问,同VPC流量经网关转发。作为高可用架构的核心组件,HaVip保障负载均衡、数据库等核心业务连续性,提升云上服务可靠性。

    END

    360智汇云AI产品推荐:

    大模型开发TLM:https://zyun.360.cn/product/tlm

    AI标注平台TLP:https://zyun.360.cn/product/tlp

    AI评测平台TEP:https://console.zyun.360.cn/tep

    MCP市场MCPMKT:https://console.zyun.360.cn/mcpmkt

    智能体对话AIMI:https://zyun.360.cn/product/aimi

    智能体记忆AMS:https://console.zyun.360.cn/ams/

    更多技术干货,

    请关注"360智汇云开发者"👇

    360智汇云是以"汇聚数据价值,助力智能未来"为目标的企业应用开放服务平台,融合360丰富的产品、技术力量,为客户提供平台服务。目前,智汇云提供数据库、中间件、存储、大数据、人工智能、计算、网络、视联物联与通信等多种产品服务以及一站式解决方案。

    官网:https://zyun.360.cn(复制在浏览器中打开)

    更多好用又便宜的云产品,欢迎试用体验~

    如果您想使用我们的计算、网络类产品(目前官网暂时不可见),欢迎联系我们客服为您开通。

    添加工作人员企业微信👇,get更快审核通道+试用包哦~

相关推荐
慧天城寻1 小时前
H3C巡检命令与避坑技巧
运维·网络·运维开发
油丶酸萝卜别吃1 小时前
从网络角度来看,用户从输入网址到网页显示,期间发生了什么?
网络
飞Link1 小时前
深度解析 TS2Vec:时序表示学习中的层次化建模(Hierarchical Contrastive Learning)
开发语言·python·学习·数据挖掘
爱炸薯条的小朋友1 小时前
C#依赖注入和仿写Prism注入
开发语言·c#
M158227690551 小时前
SG-TCP-Profibus (M) ModbusTCP 转 Profibus DP 网关:工业双协议无缝互联的高效解决方案
网络·网络协议·tcp/ip
代码探秘者2 小时前
【Java集合】ArrayList :底层原理、数组互转与扩容计算
java·开发语言·jvm·数据库·后端·python·算法
OxyTheCrack2 小时前
简述各语言GC(垃圾回收)机制
开发语言
李昊哲小课2 小时前
电商系统项目教程
开发语言·前端·javascript
王威振的csdn2 小时前
利用 iptables 实现 IP 透明转发:解决 Docker 容器 IP 无法访问的问题
网络协议·tcp/ip·docker