测试网络中 SafeKit mirror 集群的虚拟 IP 地址
本指南介绍如何检查 SafeKit mirror 集群(mirror 模块)的虚拟 IP 地址 (VIP) 是否在您的网络中正常工作:虚拟 IP (VIP) 由主服务器持有,并在故障转移后重新路由到新的主服务器。
1. 主要原则
先决条件: mirror 集群的两个节点必须位于同一层 2 IP 子网中:局域网或远程站点之间扩展的 VLAN。
- 虚拟 IP (VIP) 仅在主服务器上处于活动状态(PRIM 或 ALONE 状态):当模块在节点上作为主服务器启动时,它被设置为该地址网络卡上的物理 IP 地址的别名(
where="one_side_alias"配置)。 - 因此,主服务器的 MAC 地址是 ARP 表(路由器、网关、同一子网中的客户端)中与虚拟 IP (VIP) 关联的 MAC 地址。所有发往虚拟 IP (VIP) 的流量都会发送到主服务器。
- 在故障转移期间(主服务器停止或故障),虚拟 IP (VIP) 将从前主服务器中移除,并设置为新主服务器上的别名。然后,两种机制允许网络将虚拟 IP (VIP) 与新主服务器的 MAC 地址相关联:
- 当虚拟 IP (VIP) 作为别名添加到网卡时,操作系统发送的网络消息;
- 当在
<vip>部分中配置了arpreroute="on"属性时,SafeKit 发送的 GARP(免费 ARP)。
因此,您需要测试以下内容:
- 虚拟 IP (VIP) 由主服务器持有,客户端可访问;
- 当主服务器发生变化时,与虚拟 IP (VIP) 关联的 MAC 地址会重新路由到网络中的新主服务器(路由器、网关、虚拟化)。
2. 先决条件:虚拟 IP (VIP) 配置
在 mirror 模块的
userconfig.xml中,在<vip>部分配置虚拟 IP (VIP)。arpreroutearpreroute="on"属性使新的主服务器在故障转移后发送 GARP:<vip> <interface_list> <interface arpreroute="on"> <real_interface> <virtual_addr addr="<VIP>" where="one_side_alias"/> </real_interface> </interface> </interface_list> </vip>在两个节点上应用配置。
启动模块:一个节点必须是 PRIM(Ready),另一个节点必须是 SECOND(Ready)。
3. 测试 1 – 主服务器持有的虚拟 IP (VIP)
步骤
- 在主服务器上,运行
ipconfig(Windows) 或ip addr show(Linux)。 →预期结果: 虚拟 IP (VIP) 将作为别名显示在物理 IP 地址的网络适配器上。 - 在辅助服务器上运行相同的命令。 →预期结果: 虚拟 IP (VIP) 不会显示。
- 从集群外部的客户端工作站,
ping物理 IP 地址和虚拟 IP (VIP)。 →预期结果: 所有三个ping命令均有响应(除非它们被防火墙过滤)。 - 通过虚拟 IP(VIP)使用 SafeKit 马赛克检查访问权限:从外部客户端的浏览器连接到
http://<VIP>:9010/safekit/mosaic.html(如果 SafeKit Web 服务器和控制台已切换到 HTTPS,则使用端口 9453),然后输入 mirror 模块名称并运行测试。 →预期结果: 马赛克的所有单元格都以单一颜色显示主服务器的名称:所有连接到虚拟 IP (VIP) 的 TCP 连接都由主服务器提供服务。

4. 测试 2 – 手动故障转移(停止主服务器)
此测试用于检查在主服务器上停止模块以触发故障转移期间,虚拟 IP (VIP) 是否跟随主服务器。
步骤
- 从 SafeKit 控制台(或使用
safekit stop -m <module>从命令行)停止主节点(节点 1)上的模块。 →预期结果: 节点 1 变为 STOP(NotReady),节点 2 变为 ALONE(Ready)。在新主节点的日志中,出现消息Virtual IP <VIP> set。 - 在新主网卡上,运行
ipconfig或ip addr show。 →预期结果: 虚拟 IP (VIP) 现在作为别名显示在此节点上,而不再显示在以前的主节点上。 - 从客户端工作站,重复三个
ping命令,并在虚拟 IP (VIP) 上再次运行马赛克。 →预期结果: 所有内容都响应,并且马赛克的所有单元格现在都以单一颜色显示新主项的名称。 - 在节点 1 上重新启动模块:它将重新同步并转为 SECOND (Ready) 状态,而节点 2 将转为 PRIM (Ready) 状态。
5. 测试 3 – 使用 arp -a 检查 MAC 重定向
在故障转移之前,记下与虚拟 IP (VIP) 关联的 MAC 地址,然后检查故障转移后该地址是否已更改。
只有当客户端工作站与集群位于同一 IP 子网时,才能进行此测试。
如果客户端和集群之间存在路由器,则客户端的 ARP 表不包含虚拟 IP (VIP),而是包含用于访问集群网络的网关地址。在这种情况下,请与网络团队一起检查路由器或网关的 ARP 表。
步骤
- 该模块在节点 1 上为 PRIM(Ready),在节点 2 上为 SECOND(Ready)。
- 在客户端工作站上,
ping物理 IP 地址和虚拟 IP (VIP),然后运行arp -a。 →预期结果: 虚拟 IP (VIP) 与主 IP 地址的物理 MAC 地址相关联。 - 在主节点(节点 1)上
stop模块。 - 再次
ping虚拟 IP (VIP),然后再次运行arp -a。 →预期结果: 虚拟 IP (VIP) 现在与新主机的物理 IP 地址关联相同的 MAC 地址。
在读取 ARP 表之前再次
ping虚拟 IP (VIP):该条目可能被标记为过时,并且仅在ping之后才刷新。
主服务器停止前后预期的 ARP 表示例:
| 地址 | 停止前 MAC | 停止后的 MAC |
|---|---|---|
| 节点 1 的物理 IP | 节点 1 MAC | 节点 1 MAC |
| 节点 2 的物理 IP | 节点 2 MAC | 节点 2 MAC |
| 虚拟 IP(VIP) | 节点 1 MAC | 节点 2 MAC |
6. 测试 4 – 使用 Wireshark (Windows) 或 tcpdump (Linux) 进行端到端检查
您可以通过在客户端和两个节点上捕获数据包来跟踪到虚拟 IP (VIP) 的 TCP 连接:在 Windows 机器上使用 Wireshark,在 Linux 机器上使用 tcpdump。
您必须查看数据包的 MAC(以太网)标头:目标 IP 地址仍然是虚拟 IP (VIP),而目标 MAC 地址显示哪个节点接收流量。
您应该注意:
| 何时 | 在哪里捕获数据包 | 已观察到的 MAC 地址 |
|---|---|---|
| 故障转移前 | 客户 | 客户端 MAC →节点 1(主) 的 MAC |
| 故障转移前 | 节点 1 | 发送到虚拟 IP (VIP) 的数据包已收到;节点 2 未收到任何数据包 |
| 故障转移期间 | 网络 | MAC 重新路由节点 2 发送的虚拟 IP (VIP) 消息:操作系统设置为别名时发送的消息,以及 SafeKit 发送的 GARP (arpreroute="on") |
| 故障转移后 | 客户 | 客户端 MAC →节点 2 的 MAC(新主节点) |
如果客户端工作站与集群位于不同的子网中,则在节点上看到的“客户端 MAC”是连接这两个子网的网关(路由器)的 MAC 地址,而不是客户端工作站的 MAC 地址。
7. 从哪个工作站进行测试
此行为取决于客户端和集群之间的网络路径。从与您的架构相关的每种客户端类型运行测试 1 和测试 2:
| 客户所在地 | 测试内容 |
|---|---|
| 客户端与集群位于同一子网中 | 更新客户端的 ARP 表(可进行 3 次测试) |
| 客户端位于不同的子网(路由器、网关、虚拟机管理程序虚拟网络) | 更新路由器或网关中的客户端 ARP 表。 |
| 客户端虚拟机位于一个虚拟机管理程序上,该虚拟机管理程序还托管着 mirror 集群的一个虚拟机。 | 管理程序的虚拟交换机的行为,它还处理内部交换和路由。 |
8. 预期成果总结
| 测试 | 操作 | 预期结果 |
|---|---|---|
| 1 | PRIM / SECOND,ipconfig,ping 和马赛克 | 虚拟 IP(VIP)仅作为主机的别名;3 个 ping 命令响应(除非被防火墙过滤);马赛克仅显示主服务器 |
| 2 | 停止主电源 | 虚拟 IP (VIP) 作为新主机的别名;Virtual IP <VIP> set 消息;马赛克仅显示新主机 |
| 3 | 在主服务器停止前后使用 arp -a | 虚拟 IP (VIP) 从节点 1 的 MAC 地址移动到节点 2 的 MAC 地址 |
| 4 | 故障转移前后的 Wireshark 或 tcpdump 捕获 | 客户端将数据发送到新主机的 MAC 地址。 |
9. 故障排除
- 故障转移后,虚拟 IP (VIP) 不再响应: 路径上的设备(路由器、网关、虚拟交换机)不考虑 MAC 重路由消息,该设备会继续将流量发送到前一个主机的 MAC 地址。请与您的网络团队一起检查 MAC 重路由消息的处理。
- 发送 GARP:
<vip>部分的arpreroute="on"属性(带arpinterval和arpelapse)会在故障转移后定期在虚拟 IP (VIP) 上发送 GARP。请参阅《用户指南》第 13.6.4 节“<vip>语法”。 - 诊断虚拟 IP (VIP) ↔ MAC 解析: 请参阅用户指南第 7.24 节“虚拟 IP (VIP) ↔ MAC 解析故障排除”和第 7.16 节“故障转移后虚拟 IP 的问题”。
更多信息:
- 虚拟 IP 地址在高可用性集群中是如何工作的?
- 有关使用虚拟 IP 地址进行负载平衡的信息,请参阅在 SafeKit farm 集群中测试负载平衡虚拟 IP 地址。