# 基于 GARP 的 HA 架构(已放弃) NES HA 架构是基于 Keepalived 的心跳链路检查 + GARP 的数据链路切换实现的主备架构。 ## Keepalived 的心跳链路检查 因为主备架构无法 100% 避免脑裂情况的出现,只能尽量的避免: 1. Keepalived 进程进行绑核和划分固定内存,避免主机卡顿导致的脑裂。 2. Keepalived 使用 bond 冗余的心跳链路。 ## GARP 的数据链路切换 **基于 GARP 实现的数据链路切换**:GARP 是一种特殊的 ARP 请求,报文中的 dstIP 和 srcIP 地址相同,且 srcMAC 为自身网卡 MAC 地址,dstMAC 为全 0/f。使用 GARP 可以让收到这个通告的交换机(或主机)的 ARP 缓存表被强制刷新(本机的 MAC 地址和直连交换机端口的映射关系),以此来实现交换机数据链路对的切换。当 NES 主机升级为 Master 时: - Upstream 发 EPC的 MAC 和 IP 地址构造的 GARP 报文,表示去 EPC 的数据报文走直连 NES Upstream 的端口(去 EPC 的报文从 Upstream 进入 NES 进行转发)。 - Downstream 和 LBP 发 eNB 的 MAC 和 IP 地址构造的 GARP 报文,表示去 eNB 的数据报文走直连 NES Downstream 或 LBP 的端口(去 eNB 的报文从 Downstream 或 LBP 进入 NES 进行转发)。 注:Upstream、Downstream、LBP 本身没有 MAC 和 IP 地址,为了实现 “串联无感知” 的效果,Upstream 使用的是 eNB 的 MAC/IP,Downstream 使用的是 EPC 的 MAC/IP,LBP 使用的是 MEC GW 的 MAC/IP。 **示例**: ``` eNB: 192.168.1.1/90:E2:BA:6F:79:DD EPC: 192.168.1.2/E4:1D:2D:17:79:70 MEC GW: 10.0.0.200/E4:1D:2D:17:7A:10 VLAN 100: eNB、NES Upstream VLAN 200: EPC、NES Downstream VLAN 300: MEC GW、NES LBP ``` 当 NES1 升为 Master 时: - Upstream 发出: ``` srcIP: 192.168.1.2 dstIP: 192.168.1.2 srcMAC: E4:1D:2D:17:79:70 dstMAC: FF:FF:FF:FF:FF:FF ``` - Downstream 发出: ``` srcIP: 192.168.1.1 dstIP: 192.168.1.1 srcMAC: 90:E2:BA:6F:79:DD dstMAC: FF:FF:FF:FF:FF:FF ``` - LBP 发出: ``` srcIP: 192.168.1.1 dstIP: 192.168.1.1 srcMAC: 90:E2:BA:6F:79:DD dstMAC: FF:FF:FF:FF:FF:FF ``` 交换机 MEC/Port 映射表关系: ``` NES1 -> NES2 切换时:Port2 -> Port5(切了 3 个端口,分别对应 Up、Down、LBP) NES1 100 79:dd Port1 Eth1/1/2 200 79:dd Port2 Eth1/1/3 300 79:dd Port2 Eth1/1/3 200 79:70 Port3 Eth1/2/1 100 79:70 Port2 Eth1/1/3 300 7A:10 Port4 Eth1/2/2 NES2 100 90:E2:BA:6F:79:DD Port1 Eth1/1/2 200 90:E2:BA:6F:79:DD Port5 Eth1/2/4 300 90:E2:BA:6F:79:DD Port5 Eth1/2/4 200 E4:1D:2D:17:79:70 Port3 Eth1/2/1 100 E4:1D:2D:17:79:70 Port5 Eth1/2/4 300 E4:1D:2D:17:7A:10 Port4 Eth1/2/2 ```