在Amazon EC2实例上创建具有故障转移功能的UDP负载均衡器

时间:2018-09-12 22:36:26

标签: nginx amazon-ec2 dns amazon-route53 amazon-elb

任务:

在Amazon上为EC2实例创建具有故障转移功能的UDP负载均衡器。

问题:

根据以下说明,我遇到以下问题:

  • AWS EC2没有适用于IPv4和IPv6流量的公共DNS名称。
  • 无法将当前IPv6地址重新分配给另一个可用性区域中的新实例。

说明:

通过故障转移,我的意思是,如果该实例由于某种原因而停机,则启动一个新实例并替换它。如果它所在的可用区处于关闭状态,则在另一个可用区中旋转一个新实例并替换它。

使用弹性IP地址,我可以将现有的弹性IP地址重新分配给新实例,而不管其可用区域如何。

对于IPv6地址,如果新实例是在不同的可用区域中创建的,因为它不在同一子网中,那么我无法重新分配现有的IPv6地址。按可用区划分,我指的是亚马逊的可用区,例如us-west-2a,us-west-2b,us-west-2c等。

我知道如何解决此问题的唯一方法是使用新的IPv6地址更新我的注册商(在我的情况下为Godaddy)的主机记录。 Godaddy具有API,我相信我可以通过编程方式更新主机记录。但是,Godaddy的最小 TTL为600秒,这意味着基于传播,IPv6流量在 10分钟或更长时间内无法访问我的服务器

如果我只是进行正常的TCP通信,那么Amazon的负载均衡器系统就很棒。如果真是这样,这个问题将不存在。由于我需要负载平衡UDP流量,因此我遇到了这个问题。 AWS ELB(Amazon Elastic Load Balancer)为我提供了一个CNAME,我可以将我的所有流量都指向TCP流量。因此,我不必担心IPv4与IPv6流量分开。我可以直接将CNAME指向Amazon通过ELB提供的DNS名称。

Amazon还为EC2提供了公共DNS,但仅用于IPv4流量。这样对我的IPv4流量有效,但对我的IPv6流量无效。

我唯一想到的选择是在EC2实例上设置基于软件的负载均衡器(在我的情况下为NGINX)。然后将域指向NGINX负载均衡器的IPv4和IPv6地址。然后,当某个区域崩溃时,我在另一个区域中启动了一个新的AWS EC2实例。然后使用Godaddy的API将IPv6地址更新为新实例的IPv6地址。

请求

有人知道如何在没有AWS ELB的情况下将CNAME分配给EC2实例吗?该实例将需要能够在CNAME处接收IPv4和IPv6流量。

我想到的唯一方法是,由于我的域名注册机构的DNS更改传播问题而导致停机。

我一直在查看Amazon中的Route 53选项,它似乎具有相同的传播延迟。

我已经考虑过为域设置自己的DNS服务器。然后,如果IP地址发生变化,我可能比使用Godaddy更快地更改DNS条目。但是DNS传播问题将是任何dns更改的问题。

1 个答案:

答案 0 :(得分:4)

[考虑我的回答后进行编辑]

我没有提到的一项是Route 53支持简单的负载平衡和故障转移。由于在下面的回答中您将需要两个系统,因此只需为您的服务启动两个EC2实例,使用Route 53进行循环负载平衡并添加故障转移记录。创建一个CloudWatch警报,以便在您的一个实例发生故障时知道要手动替换它。这将为您提供UDP的“穷人”负载均衡器。

Configuring DNS Failover

[编辑结束]

首先,我将从GoDaddy DNS转到Route53。我没有编程GoDaddy DNS条目的经验,但是Route 53的API非常出色。

GoDaddy不支持区域顶点CNAME记录(example.com)。您将需要使用IPv4 A记录和IPv6 AAAA记录。这应该不是问题。我将使用AWS EIP记录,以便在启动新实例时,至少IPv4 DNS条目将不需要DNS延迟。

我不会设置自己的DNS服务器。我会先切换到Route 53。当提到传播延迟时,您指的是TTL。您可以将TTL更改为较短。路由53支持1秒钟的TTL条目,但是大多数DNS客户端将忽略短TTL值,因此您对此几乎没有控制权。短的TTL也意味着更多的DNS请求。

AWS不提供UDP负载平衡,但是有第三方产品和服务可以在AWS上运行。如果您的服务很关键或要盈利,请使用经过良好测试的解决方案。

我不会尝试重新发明轮子。但是,有时候这样做很有趣,以便更好地了解实际系统的工作方式。

步骤1:您将需要设计一种策略来检测您的实例已失败。您将需要复制负载均衡器执行的运行状况检查,然后触发操作。

步骤2:您将需要编写代码来更新Route 53(GoDaddy)DNS条目。

第3步:您将需要编写可启动EC2实例并终止旧实例的代码。

步骤4:您将需要检测新实例的新地址并更新Route 53(GoDaddy)。

上述步骤将要求始终在专用的计算机上始终具有高度可靠的Internet连接。我将EC2用于监视系统。 T2-micro可能还不错。

但是,请看一下开发和测试此新系统将花费的时间。返回并重新考虑您的策略。