我计划使用 Google 在三台服务器之间平衡 NS/DNS 来实现负载平衡。
我正在设置三台具有集群 DNS 的服务器,每台服务器之间都会复制记录。
我计划设置NS1/2.example
为指向 Google 的负载均衡器(Anycast),而不是指向NS1/2.example
每个单独的服务器。
我该如何实现这一点?我应该注意什么?
答案1
- 创建实例模板
- 创建托管实例组 (MIG)
- 创建指向 MIG 的网络负载均衡器
请注意,负载平衡 UDP 存在一个问题,即它不会以负载平衡器作为源 IP 来响应客户端,这会导致客户端拒绝这些请求。要解决这个问题,您需要创建一个规则(使用 iptables 或 nftables)来在数据包传出服务器时替换它。
答案2
您想使用一些虚拟机在 Compute Engine 中运行您的 DNS 服务(负载平衡)。
有几种选择 - 如果你想要可靠且可扩展的东西,我建议使用托管实例组或 Kubernetes。
如果是 MIG配置一个虚拟机然后创建图像用作组中虚拟机的模板。组本身是自动缩放根据您的设置。
托管实例组 (MIG) 提供自动扩缩功能,让您可以根据负载的增加或减少自动从 MIG 中添加或删除虚拟机 (VM) 实例。自动扩缩可帮助您的应用妥善处理流量增加,并在资源需求较低时降低成本。您可以定义自动扩缩策略,自动扩缩器会根据测量到的负载和您配置的选项执行自动扩缩。
第二个解决方案是 Kubernetes. 配置您的虚拟机,创建一个容器并运行它Kubernetes 引擎。
Kubernetes 提供了内置功能来平衡您想要运行的任何服务的负载。您只需将其公开为负载均衡器类型。
根据你的服务将获得的流量,它将是相应缩小(或放大)。
GKE 的集群自动扩缩器会根据您的工作负载需求自动调整给定节点池中的节点数量。您无需手动添加或移除节点,也无需过度配置节点池。您只需指定节点池的最小和最大大小,其余操作将自动完成。
您可以设置最小数量节点,以便它始终可用,而无需启动新的实例。
您可以为集群中的每个节点池指定最小和最大大小,集群自动扩缩程序会在这些边界内做出重新扩缩决策。如果启用自动扩缩时当前节点池大小低于指定的最小值或高于指定的最大值,则自动扩缩程序会等到节点池中需要新节点或可以安全地从节点池中删除节点后才会生效。
当然,你可以用“困难的方式”做每件事并有三台虚拟机运行你的 DNS 服务以及TCP/UDP 负载均衡器在他们面前。