什么是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地址
假设你在浏览器中输入www.example.com
,以下是可能的工作流程:
-
DNS解析:
- 浏览器向DNS服务器请求解析
www.example.com
。 - DNS服务器返回VIP
192.168.1.100
。
- 浏览器向DNS服务器请求解析
-
连接建立:
- 浏览器向VIP
192.168.1.100
发送HTTP请求。 - 这个VIP指向一个负载均衡集群。
- 浏览器向VIP
-
负载均衡器选择:
- VIP
192.168.1.100
代表负载均衡集群中的一个或多个负载均衡器。 - 集群中的一个负载均衡器(例如,LB1)接收到请求。
- VIP
-
请求分配:
- LB1根据预定义的负载均衡策略,将请求分配到后端的某台服务器实例(例如,Server 1、Server 2或Server 3)。
- 假设这次请求被分配到Server 1(IP地址为192.168.1.101)。
-
响应返回:
- Server 1处理请求并返回响应给负载均衡器LB1。
- LB1将响应转发给客户端。
优点
- 高可用性:如果某个负载均衡器或服务器实例发生故障,集群中的其他负载均衡器和服务器可以继续提供服务。
- 负载均衡:流量被均匀分配到多个服务器实例,防止单点过载。
- 弹性扩展:可以根据需求动态增加或减少负载均衡器和服务器实例的数量。
- 简化管理:客户端只需知道一个VIP,无需关心后台的复杂性。