当前位置:网站首页>VIP的实现原理
VIP的实现原理
2022-08-01 12:47:00 【赵化冰】
什么是VIP?
VIP即Virtual IP Address,是实现HA(高可用)系统的一种方案,高可用的目的是通过技术手段避免因为系统出现故障而导致停止对外服务,一般实现方式是部署备用服务器,在主服务器出现故障时接管业务。 VIP用于向客户端提供一个固定的“虚拟”访问地址,以避免后端服务器发生切换时对客户端的影响。
例如在下图的系统中,采用了三个服务器的集群来实现服务的高可用,后端服务器集群通过VIP 193.168.0.6对外提供服务,客户端只知道VIP,并不关注后端服务器的真实地址。
VIP被加载在Master的网卡上,所有指向VIP的请求会被发向Master,Slave服务器出于Standby状态。如果Master出现故障,集群会通过选举算法从可用的Slave节点中选出一个新的Master节点,并将VIP也迁移到新Master节点的网卡上。这样可以保证服务始终可用,并且对客户端来说访问的IP也不会变化。
注意VIP始终指向一个Master,因此VIP的方案并不能实现LB,只能实现HA。
______________________
| |
| VIP: 193.168.0.6 |
|-----| Host IP: 193.168.0.2 |
| | Role: Master |
| |______________________|
|
| ______________________
| | |
| | VIP: Unassigned |
Public ----(example.com = 193.168.0.6)--|-----| Host IP: 193.168.0.3 |
| | Role: Slave |
| |______________________|
|
| ______________________
| | |
| | VIP: Unassigned |
|-----| Host IP: 193.168.0.4 |
| Role: Slave |
|______________________|
VIP的实现原理
- Master选举: 集群创建或者Master出现故障时,集群通过选举协议得到一个Master作为对外服务的节点
- 配置VIP: HA软件将VIP配置到Master节点的网卡上
- ARP广播: 主动对外广播ARP消息,声明VIP对应的MAC地址为Master的网卡MAC地址
通过arp -a 命令查看193.168.0.6对应的MAC地址和193.168.0.2相同
arp -a|grep 193.168.0
? (193.168.0.6) at fa:16:3e:2a:7e:d4 [ether] on br-apidefault
? (193.168.0.2) at fa:16:3e:2a:7e:d4 [ether] on br-apidefault
登录到193.168.0.2主机上,使用ip addr命令可以看到网卡上绑定了VIP 193.168.0.6
ip addr
10: br-apidefault: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether fa:16:3e:2a:7e:d4 brd ff:ff:ff:ff:ff:ff
inet 193.168.0.3/16 brd 193.168.255.255 scope global br-apidefault
valid_lft forever preferred_lft forever
inet 193.168.0.6/16 brd 193.168.255.255 scope global secondary br-apidefault
valid_lft forever preferred_lft forever
采用Keepalived实现VIP
Keepalived的设计目的即是为了管理VIP,因此使用Keepalived实现VIP的配置非常简单。Keepalived采用了Virtual Router Redundancy Protocol (VRRP)协议来进行实现主备服务器之间的通信以及选举。
下面介绍如何采用Keepalived配置一个一个两节点的HA集群。
首先将用于设置VIP的脚本放到主备两个服务器的 /etc/keepalived/notify.sh 路径下
#!/bin/bash
vipAddress="192.168.121.100/24"
if [[ "x$1" == "xmaster" ]]; then
ip address add dev eth1 ${vipAddress}
else
ip address del dev eth1 ${vipAddress}
fi
Master节点的Keepalived配置文件 keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface eth0
garp_master_delay 10
smtp_alert
virtual_router_id 51
priority 100
vrrp_unicast_bind 192.168.121.51
vrrp_unicast_peer 192.168.121.52
advert_int 1
authentication {
auth_type PASS
auth_pass testpass
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
}
Backup节点的Keepalived配置文件 keepalived.conf
vrrp_instance VI_1 {
state BACKUP
interface eth0
garp_master_delay 10
smtp_alert
virtual_router_id 51
priority 50
vrrp_unicast_bind 192.168.121.52
vrrp_unicast_peer 192.168.121.51
advert_int 1
authentication {
auth_type PASS
auth_pass testpass
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
}
采用pacemaker实现VIP
Pacemaker和Keepalived的定位不同,Keepalived一般用于无状态,可以Active-Active的HA集群;而Pacemaker可以实现有状态,Active-Passive的HA集群。例如采用pacemaker可以将服务状态和数据从出现故障的服务器上迁移到备份机上,例如拷贝配置文件,加载数据库等。因此Pacemaker的内部结构和配置比Keepalived的更复杂。
Packemaker包括下列组件:
- Cluster Information Base (CIB) 集群信息库:使用XML保存了集群内部的配置和当前状态,CIB保存的内容在集群内保持同步。
- Policy Engine (PEngine or PE):策略引擎:当集群中有节点宕机导致资源当前状态和理想状态不一致时,策略引擎使用CIB中的信息计算需要执行哪些动作使集群达到应处于的理想状态。
- Cluster Resource Management daemon (CRMd):集群资源管理守护进程:集群选举一个CRMd为Master,由Master通过集群消息系统将策略引擎的指令发向本地的LRMd或者集群中的其他CRMd执行。
- Local Resource Management daemon (LRMd):本地资源管理守护进程
- Fencing daemon (STONITHd): 爆头守护进程: Shoot the other node in the head,在某些情况下,可能有必要关闭节点,以保护共享数据或完整的资源回收。为此,Pacemaker配备了stonithd设备。STONITH可以将其它节点“爆头”,通常是实现与远程电源开关。
- cluster abstraction layer下面为集群的底层消息系统。
采用Pacemaker实现VIP的原理和Keepalived基本相同,也是采用将VIP作为Secondary IP绑定到Master网卡的方式,具体设置步骤略。
参考
边栏推荐
- uniapp读取和写入文件
- Tencent Cloud Native: Service Mesh Practice of Areaki Mesh in the 2022 Winter Olympics Video Live Application
- STM32 CAN filter configuration details
- 小程序插件如何帮助开发者受益?
- Detailed explanation of table join
- iframe标签属性说明 详解[通俗易懂]
- NebulaGraph v3.2.0 性能报告
- Simulation implementation of new of Js handwritten function
- 六石编程学:问题要面对,办法要技巧,做不好的功能要想办法
- MMF的初步介绍:一个规范化的视觉-语言多模态任务框架
猜你喜欢
The CAN communication standard frame and extended frame is introduced
态路小课堂丨浅谈优质光模块需要具备的条件!
安装apex报错
芝加哥丰田技术学院 | Leveraging Natural Supervision for Language Representation Learning and Generation(利用自然监督进行语言表示学习和生成)
全链路灰度在数据库上我们是怎么做的?
10年稳定性保障经验总结,故障复盘要回答哪三大关键问题?|TakinTalks大咖分享
力扣160题,相交链表
消息中间件解析 | 如何正确理解软件应用系统中关于系统通信的那些事?
How do we do full-link grayscale on the database?
50W+小程序开发者背后的数据库降本增效实践
随机推荐
Data frame and remote frame of CAN communication
Towhee 每周模型
Grafana9.0发布,Prometheus和Loki查询生成器、全新导航、热图面板等新功能!
shell 中的 分发系统 expect脚本 (传递参数、自动同步文件、指定host和要传输的文件、(构建文件分发系统)(命令批量执行))
硬链接、软连接浅析
postgresql之page分配管理(一)
Beyond Compare 4 试用期到期
How does the SAP ABAP OData service support the Create operation trial version
leetcode:1201. 丑数 III【二分 + 数学 + 容斥原理】
SQL function SQUARE
SQL函数 SQUARE
How to successfully pass the CKA exam?
.NET性能优化-使用SourceGenerator-Logger记录日志
HMS Core音频编辑服务音源分离与空间音频渲染,助力快速进入3D音频的世界
一文带你彻底厘清 Isito 中的证书工作机制
LeetCode_动态规划_中等_313.超级丑数
formatdatetime函数 mysql(date sub函数)
什么是一致性哈希?可以应用在哪些场景?
如何将第三方服务中心注册集成到 Istio ?
六石编程学:问题要面对,办法要技巧,做不好的功能要想办法