Traefik 的 Nomad 高可用性

Posted

技术标签:

【中文标题】Traefik 的 Nomad 高可用性【英文标题】:Nomad High Availability with Traefik 【发布时间】:2021-08-23 11:54:56 【问题描述】:

我决定试一试 Nomad,我正在为我公司的副业项目建立一个小型环境。

虽然 Nomad/Consul 上的文档很好且详细,但它们并没有达到向世界公开小型 Web 服务的简单任务。

按照this官方教程使用Traefik作为负载均衡器,我怎样才能让那些暴露的服务可以访问?

本教程有一个脚注说明可以通过端口 8080 从集群外部访问服务。

但是在我有 3 个服务器和 3 个客户端的集群中,我应该将我的 DNS 指向哪里? 具有指向 3 个客户端的故障转移的 DNS 是否足够? 我还需要客户端的负载均衡器吗?

【问题讨论】:

【参考方案1】:

您可以通过多种方式处理跨服务器分发请求。根据您的部署环境,有些可能比其他更可取。

Fabio 负载平衡器文档有一个关于 deployment configurations 的部分,我将用作参考。

直接使用 DNS 故障转移

在此模型中,您可以将 DNS 配置为指向所有三台服务器的 IP。客户端将收到所有三个 IP 以响应 DNS 查询,并随机连接到可用实例之一。

如果 IP 不正常,客户端应该重试对其他 IP 之一的请求,但如果服务器长时间不可用并且客户端可能会遇到较慢的响应时间偶尔会将请求路由到那个不可用的 IP。

您可以通过将 DNS 服务器配置为对后端实例执行健康检查(假设它支持)来缓解此问题。 AWS Route 53 提供此功能(请参阅Configuring DNS failover)。如果您的 DNS 服务器不支持健康检查,但提供了更新记录的 API,您可以使用 Consul Terraform Sync 在 Consul 中随着 Fabio 实例的健康状况发生变化而自动添加/删除服务器 IP。

负载均衡器背后的 Fabio

正如您所提到的,另一种选择是将 Fabio 置于负载平衡器之后。如果您在云中部署,这可能是云提供商的 LB。 LB 可以让您更好地控制到 Fabio 的流量路由、提供 TLS/SSL 终止和其他功能。

如果您在本地,您可以使用任何可用的负载均衡器(如 F5、A10、nginx、Apache Traffic Server 等)在其前面。您需要确保 LB 以高度可用的方式部署。下一节将介绍一些有关执行此操作的建议。

直接使用 IP 故障转移

无论您是直接在 Internet 上运行 Fabio,还是在负载均衡器后面运行,您都需要确保客户端连接的 IP 具有高可用性。

如果您在本地部署,实现此目的的一种方法是为每个 Fabio 服务器分配一个公共环回 IP(例如 192.0.2.10),然后使用像 Virtual Router Redundancy Protocol 这样的 L2 冗余协议( VRRP)或 L3 路由协议(如 BGP),以确保网络将请求路由到可用实例。

L2 故障转移

Keepalived 是一个用于 Linux 的 VRRP 守护进程。网上可以找到很多安装配置教程。

使用 BGP 的 L3 故障转移

GoCast 是一个基于GoBGP 的 BGP 守护进程,它根据健康检查的状态有条件地将 IP 通告给上游网络。该工具的作者发表了一篇名为 BGP based Anycast as a Service 的博客文章,其中介绍了在 Nomad 上部署 GoCast,并将其配置为使用 Consul 获取健康信息。

使用静态 IP 的 L3 故障转移

如果您在本地部署,比上述两种解决方案更简单的配置可能是配置您的路由器,以根据后端实例的运行状况检查安装/删除静态路由。 Cisco 路由器通过其 IP SLA 功能支持这一点。本教程将介绍基本设置配置http://www.firewall.cx/cisco-technical-knowledgebase/cisco-routers/813-cisco-router-ipsla-basic.html

如您所见,有多种方法可以为 Fabio 或上游 LB 配置 HA。在不了解您的环境的情况下很难提供好的建议。希望这些建议之一对您有用。

【讨论】:

嘿@blake,您的回答比我预期的要详细得多。感谢那!对于我一直在阅读的内容,人们对 DNS 故障转移有不同的看法,特别是关于缓存和不尊重 TTL 的 ISP。带有故障转移运行状况检查的 AWS Route 53 能否缓解此问题? 如果缓存/ISP 不遵守 TTL,我认为这不会有帮助。如果您将 Route 53 配置为提供 TTL 为 60 秒的记录,并且 DNS 缓存决定为它提供更长时间的服务——即使由于健康检查失败而删除了记录——那么客户端将不可避免地尝试访问该 IP。如果您担心这种情况,将 DNS 指向负载均衡器可能是您的最佳选择。

以上是关于Traefik 的 Nomad 高可用性的主要内容,如果未能解决你的问题,请参考以下文章

Linux企业运维——Hadoop大数据平台(下)hdfs高可用Yarn高可用hbase高可用

Linux企业运维——Hadoop大数据平台(下)hdfs高可用Yarn高可用hbase高可用

Linux企业运维——Hadoop大数据平台(下)hdfs高可用Yarn高可用hbase高可用

Linux里面啥是高可用?

SpringCloud实现高可用

MongoDB高可用集群配置的方案