哪个更好?为什么?
有 2 个入站邮件过滤器,它们位于具有相同硬件规格的集群中,可以处理相同的负载。这是一个新配置,我想知道哪种方式更适合处理 2 个服务器的等价负载平衡,我可以将它们设置为使用相同的主机名 (ehlo) 和相同的证书,它们目前使用包含所有 3 个名称的证书,通用名称为 mx。
在任何一种情况下,如果其中一台服务器发生故障,服务器都会重试两个 IP 地址。
场景 1
example.com. IN MX 10 mx.example.com.
mx.example.com. IN A 10.0.0.10
mx.example.com. IN A 172.31.0.10
场景 2
example.com. IN MX 10 mx1.example.com.
example.com. IN MX 10 mx2.example.com.
mx1.example.com. IN A 10.0.0.10
mx2.example.com. IN A 172.31.0.10
*假设所有其他变量都是最佳实践(FCrDNS、SPF 等)
谷歌似乎同时做到了这两点。
;;Answer
gmail.com. 300 IN TXT "v=spf1 redirect=_spf.google.com"
gmail.com. 86400 IN SOA ns1.google.com. dns-admin.google.com. (2015031901 21600 3600 1209600 300)
gmail.com. 345600 IN NS ns1.google.com.
gmail.com. 345600 IN NS ns2.google.com.
gmail.com. 345600 IN NS ns3.google.com.
gmail.com. 345600 IN NS ns4.google.com.
gmail.com. 3600 IN MX 10 alt1.gmail-smtp-in.l.google.com.
gmail.com. 3600 IN MX 20 alt2.gmail-smtp-in.l.google.com.
gmail.com. 3600 IN MX 30 alt3.gmail-smtp-in.l.google.com.
gmail.com. 3600 IN MX 40 alt4.gmail-smtp-in.l.google.com.
gmail.com. 3600 IN MX 5 gmail-smtp-in.l.google.com.
gmail.com. 300 IN AAAA 2607:f8b0:4006:80c:0:0:0:1015
gmail.com. 300 IN A 173.194.123.85
gmail.com. 300 IN A 173.194.123.86
gmail-smtp-in.l.google.com. 300 IN AAAA 2607:f8b0:400c:c00:0:0:0:1a
gmail-smtp-in.l.google.com. 300 IN A 74.125.134.26
gmail-smtp-in.l.google.com. 300 IN A 74.125.134.27
答案1
平衡负载的最佳解决方案是使用实际负载均衡器. 否则,您就只能听从任何给定的 MTA 对 RFC 实施的糟糕程度的摆布。
在理想情况下,您提到的任何一种解决方案都可以,但在现实世界中,您最多可能会看到 60/40 的负载分配。这是因为,尽管电子邮件和 DNS RFC 可能有很多关于主机选择随机化的看似可怕的“应该”和“必须”的规定,但事实是程序员很懒,服务器无法因懒惰的主机选择而拒绝连接。
您将会看到以下两种情况:
- 无论第一条记录是什么,流量都会命中。
- 对可用记录进行排序后,流量将命中第一条记录。
我能够达到的最佳平衡是将最高的 IP 分配给最低的 MX。对于您来说,这意味着:
example.com. IN MX 10 mx1.example.com.
example.com. IN MX 10 mx2.example.com.
mx1.example.com. IN A 172.31.0.10
mx2.example.com. IN A 10.0.0.10
这应该有助于平衡一切,因为 PWM [Poorly Written MTA] #1 将优先选择最低的 MX 记录名称,而 PWM #2 将优先选择最低的 MX IP。
但是,就像我说的,你永远不会看到真正的平衡。
资料来源:我管理过一个 10 节点 MX 集群,为超过 10,000 个域提供服务。[IP 最小的那个集群仍然占据了总流量的 30%,我们最终让它成为了一台更强大的机器:I
]
答案2
这两种方式的效果完全相同。在这两种情况下,您都配置了 DNS 负载平衡设置,从而可以利用列出的两个服务器来响应 SMTP 请求。即使查看查询数量,在这两种情况下,您都会有两个 DNS 查询(一个用于 MX 记录,一个用于 A 记录),因此性能应该没有差异。
为了简单起见,我会坚持第一种情况,因为我只需要跟踪一个 MX 记录(少一个 DNS 记录……没什么大不了的,但至少少了一个活动部件)。
谷歌如何利用这一点是利用 DNS 负载平衡的灵活性以及加权 MX 记录的回退功能,这是您不需要利用的唯一部分(至少根据您的场景)。
因此,如果您注意到,权重为 5 的主 MX 记录是具有多个 A 记录的记录。因此,当一切正常时,他们会将流量拆分到这些地址。但如果这些地址没有响应,它就会降低 MX 优先级,尝试下一个记录,如此反复。
我见过的大多数小型设置(与 gmail、yahoo 等相比规模较小)都没有进行负载平衡(至少没有使用 DNS 负载平衡),而是使用加权 MX 来筛选首选 SMTP 处理程序列表。实际上,这取决于提供您所需灵活性的设置。