搜索 SafeKit

在 SafeKit farm 集群中测试负载均衡虚拟 IP 地址

本指南介绍如何检查 SafeKit Farm(Farm 模块,在虚拟 IP 地址上进行负载均衡)在您的网络中是否正常工作:连接在节点之间的分配,以及在调度节点停止时虚拟 IP (VIP) 的重新路由。

1. 主要原则

先决条件:Farm 的所有节点必须位于同一层 2 IP 子网中:局域网或远程站点之间扩展的 VLAN。

  • 虚拟 IP (VIP) 在 Farm 的每个节点上本地配置:当 Farm 在节点上启动时,它被设置为该地址网络卡上的物理 IP 地址的别名。
  • 单个节点(调度服务器)接收虚拟 IP (VIP) 的网络流量(vmac_directed 配置,SafeKit 默认设置):其 MAC 地址是 ARP 表中与虚拟 IP (VIP) 关联的 MAC 地址(路由器、网关、同一子网中的客户端)。
  • 然后,此节点的内核过滤器通过将数据包的目的 MAC 地址重写为处理节点的 MAC 地址,将 TCP 连接分配到 Farm 的各个节点(目的 IP 地址保持为虚拟 IP (VIP))。响应直接从处理连接的节点发送到客户端。
  • 过滤器执行的分配是确定的:处理节点根据配置的负载均衡规则,根据客户端的身份进行计算:
    • 基于客户端 IP 地址(filter="on_addr"):给定客户端始终由同一节点提供服务,从而确保会话亲和性;
    • 在客户端 TCP 端口上(filter="on_port"):来自同一客户端的每个 TCP 连接都可以由不同的节点提供服务。这是用于马赛克(第 2 节)的规则,因此它显示了来自单个工作站的所有节点。
  • 如果调度服务器停止,另一个节点将接管此角色并发送 GARP(免费 ARP),以便网络将虚拟 IP (VIP) 与其自身的 MAC 地址相关联。

因此,您需要测试以下内容:

  1. 连接正确地分布在所有节点上;
  2. 当调度服务器发生变化时,网络(路由器、网关、虚拟化)会考虑 GARP。

2. 先决条件:SafeKit 马赛克

马赛克是 SafeKit 提供的测试页面。它会打开许多到虚拟 IP (VIP) 的 TCP 连接,并显示每个连接的响应节点名称。这可以一目了然地显示分布情况。

  1. 在 Farm 模块的 userconfig.xml 的 <vip> 部分中,在 SafeKit Web 服务器的端口上添加负载均衡规则。例如,SafeKit Web 服务器在端口 9010 上使用 HTTP:

    <loadbalancing_list>
      <group name="FarmProto">
        <rule port="9010" proto="tcp" filter="on_port"/>
      </group>
    </loadbalancing_list>
    

    如果 SafeKit Web 服务器和控制台已切换到 HTTPS,请将 9010 替换为 9453。

  2. 将配置应用于所有节点。

  3. 从 Farm 外部的客户端工作站上的浏览器连接到:

    http://<VIP>:9010/safekit/mosaic.html
    

    然后输入 Farm模块名称并运行测试。马赛克的每个单元格都显示响应 TCP 连接的节点名称,并且每个节点都关联一种颜色,以便清楚地显示由同一节点服务的马赛克块。

    在 HTTPS 中,使用 https://<VIP>:9453/safekit/mosaic.html,并在端口 9453 上设置负载均衡规则。

使用马赛克测试 SafeKit farm 虚拟 IP 地址

请观看“ SafeKit farm 解决方案演示”部分中的马赛克测试视频。

3. 测试 1 – 连接分布

步骤

  1. 在所有节点上启动 Farm(UP 状态)。
  2. 从客户端工作站打开马赛克。

预期结果: 马赛克显示 Farm 中所有节点的名称,每个处理节点都使用不同的颜色。

这证明上游路由器或网关通过其 MAC 地址连接到其中一个节点,并且该节点正确地分配了连接。

4. 测试 2 – 更改调度服务器

此测试用于检查在调度服务器停止时,Farm 是否仍能保持响应。

步骤

  1. 停止 Farm,即 SafeKit 中的所有节点。
  2. 启动单个节点。此节点将成为调度服务器。 → 预期结果: 马赛克仅显示此节点。
  3. 启动其他节点。 → 预期结果: 马赛克显示所有节点。
  4. 停止第一个节点,即充当调度服务器的节点。 → 预期结果: 马赛克显示剩余节点。

此测试的局限性: 步骤 4 中的正确结果并不证明 GARP 有效。当在其他节点上启动 Farm 模块时(步骤 3),虚拟 IP 地址将配置在这些节点上,这会在网络上生成消息,这些消息可能会重新路由虚拟 IP 地址/MAC 地址关联。只有测试 3 和 4 真正测试了 GARP。

停止 Farm 中的任何其他节点(非调度服务器)仅测试分发的重新配置。

5. 测试 3 – 使用 arp -a 检查 GARP 重路由

此测试与测试 4 一起,真正检查了 GARP:在停止调度服务器之前,记下其 MAC 地址,然后检查虚拟 IP (VIP)/MAC 关联是否已更改。

只有当显示马赛克客户端工作站与 Farm 位于同一 IP 子网中时,才能进行此测试。

如果客户端和 Farm 之间存在路由器,则客户端的 ARP 表不包含虚拟 IP (VIP),而是包含用于访问 Farm 网络的网关地址。在这种情况下,请与网络团队一起检查路由器或网关的 ARP 表。

步骤

  1. 在所有节点上启动 Farm。
  2. 在客户端工作站上,运行 arp -a 并记下与虚拟 IP (VIP) 关联的 MAC 地址。它用于识别调度服务器。
  3. 停止具有此 MAC 地址的 Farm 节点。
  4. 检查马赛克是否仍与剩余节点一起工作。
  5. 再次运行 arp -a,读取新的虚拟 IP (VIP)/MAC 关联,并识别新的调度服务器。

6. 测试 4 – 使用 Wireshark (Windows) 或 tcpdump (Linux) 进行端到端检查

您可以通过在客户端和 Farm 节点上捕获数据包来跟踪到虚拟 IP (VIP) 的 TCP 连接:在 Windows 机器上使用 Wireshark,在 Linux 机器上使用 tcpdump。

您必须查看数据包的 MAC(以太网)标头,而不仅仅是 IP 地址:调度服务器的内核过滤器通过将数据包的目标 MAC 地址重写为处理节点的 MAC 地址来分配连接。目标 IP 地址在整个路径中保持为虚拟 IP (VIP)。

对于同一个 SYN 数据包,您应该观察以下内容:

步骤在哪里捕获数据包已观察到的 MAC 地址
1. 客户端发送到虚拟 IP (VIP)客户客户端 MAC → 调度服务器的 MAC
2. 调度服务器转发连接调度服务器调度服务器 MAC → 处理节点 MAC
3. 处理节点接收处理节点调度服务器 MAC → 节点 MAC
4. 节点直接响应客户端。处理节点节点 MAC → 客户端 MAC
5. 客户端收到响应。客户节点 MAC → 客户端 MAC

如果客户端工作站与 Farm 位于不同的子网中,则在 Farm 节点上看到的“客户端 MAC”是连接这两个子网的网关(路由器)的 MAC 地址,而不是客户端工作站的 MAC 地址。

停止调度服务器后重复捕获(测试 2,步骤 4):步骤 1 现在必须显示新调度服务器的 MAC 地址。

7. 从哪个工作站进行测试

此行为取决于客户端和 Farm 之间的网络路径。从与您的体系结构相关的每种客户端类型运行测试 1 和测试 2:

客户所在地测试内容
客户端与 Farm 位于同一子网中通过 GARP 更新客户端的 ARP 表(可进行 3 次测试)
客户端位于不同的子网(路由器、网关、虚拟机管理程序虚拟网络)由路由器或网关处理 GARP
客户端虚拟机位于也托管着 Farm 虚拟机的虚拟机管理程序上管理程序的虚拟交换机的行为,它还处理内部交换和路由。

8. 预期成果总结

测试操作预期结果
1所有节点 UP,马赛克所有节点都显示出来
2.2单个节点已启动仅此节点可见
2.3所有节点均已启动所有节点都显示出来
2.4调度服务器已停止其余节点出现,没有持续中断。
3停止前后的 arp -a与虚拟 IP (VIP) 关联的 MAC 地址会发生变化。
4停止前后的 Wireshark 或 tcpdump 捕获客户端将数据发送到新调度服务器的 MAC 地址。

9. 故障排除

SafeKit farm 解决方案演示

SafeKit 视频:网络负载均衡和虚拟 IP 管理 (5:03)

在本视频中,您将学习如何实施虚拟 IP 地址,为双节点集群提供单个入口点。SafeKit 通过自动管理虚拟 IP 来简化网络负载均衡,确保客户端流量在故障转移期间分布在各个节点上并即时重定向。尽管此演示使用 Windows 上的 Apache,但该解决方案与其他应用程序的工作方式相同。

章节

  1. 🎬 架构:为共享虚拟 IP 准备 2 个节点 (0:13)
  2. 🎬 配置:设置 farm.safe 模块和虚拟 IP 地址 (2:20)
  3. 🎬 验证:服务器崩溃时的故障转移测试和虚拟 IP 重定向 (2:30)

分步实施

更多信息:

SafeKit AI Chat SafeKit AI