我目前正试图find一种方法来负载平衡我们的4个邮件网关(运行邮件清理)。 我能够调出HAProxy并使用tcp模式来平衡负载。 唯一真正的问题是我的源IP始终是HAProxy服务器,所以现在我的一些邮件filter检查是无用的,因为我无法检查邮件是否来自已知的错误中继。
他们的FLOSS软件是否可以用来处理这种情况? 我知道HAProxy具有这种能力,如果我有邮件网关使用它作为默认网关,并编译一些额外的模块和configurationiptables。 我只是不想开始沿着这条路,如果我只是缺less一个更简单的解决scheme。
我们只是简单地使用Linux虚拟服务器 , Linux虚拟服务器是标准Linux内核多年的一部分。
它允许基于weigth的负载平衡,并且很容易设置,我们正在做这样的事情:
ipvsadm -A -t 192.168.0.3:25 -s wrr ipvsadm -a -t 192.168.0.3:25 -r 192.168.0.8:25 -g -w 100 ipvsadm -a -t 192.168.0.3:25 -r 192.168.0.9:25 -g -w 100
(其中192.168.0.3是你的“服务IP”或“虚拟IP” ,192.168.0.8和192.168.0.9是你的“真实服务器” )
最重要的是知道 – 操作的方式。 此设置使用“网关模式”,其中数据包的来源和目的地不会更改。 但这有一些影响。 虚拟IP必须在所有“真实服务器”上configuration。 但是这可能会导致你应该避免devise的ARP竞争条件:
也许伪装模式更容易设置。
还有另外一个提示:您可能想要使用keepalived来设置ipvsadm,监视您的邮件服务器的可用性,并可能使用VRRP为负载均衡器本身提供冗余。
我们正在使用ipvs来处理15k CPS DNS负载平衡。
(*)至less在debian中是这样调用的,但是searchipvs应该很容易
SMTP以循环方式使用DNS构build负载均衡。 这对于大多数目的来说工作得很好。 如果这对你来说还不够,你将不得不创build自己的自定义设置,这不是一件容易的事情。 所以除非你真的需要它,否则我会坚持使用和广泛使用。
我假设您的电子邮件服务器(MTA)位于同一个域(例如example.org),在这种情况下,为每个单独的MTA创build一个MXlogging,具有相同的优先级。 使用相同的优先级确保每个服务器以循环方式尝试,否则优先级最高(较低的数字)的服务器总是首先被尝试(对于未破坏的MTA,垃圾邮件发送者喜欢以最低优先级认为它可能是一个较低的规格“后备”服务器):
example.org. IN MX 10 mx1.example.org. example.org. IN MX 10 mx2.example.org. example.org. IN MX 10 mx3.example.org. example.org. IN MX 10 mx4.example.org.
当然,确保每个MX *可以解决:
example.org. IN A 192.168.2.1 mx1 IN A 192.168.2.2 mx2 IN A 192.168.2.3 mx3 IN A 192.168.2.4 mx4 IN A 192.168.2.5
如果您还想使用DNS为用户发送电子邮件“负载均衡”MTA,则可以使用这种方式configurationDNS。 让我们打电话给你的传出服务器smtp.example.org,并告诉你的用户提交电子邮件。 我将“负载均衡”放在引号中,因为这样做不会避免连接到MTA使用MXlogging处理MTA的方式。 在这种情况下,用户必须重试一次或多次才能访问正在工作的服务器。
smtp IN A 192.168.2.2 smtp IN A 192.168.2.3 smtp IN A 192.168.2.4 smtp IN A 192.168.2.5
这是一个粗略的解决scheme,因为取决于用户的系统和设置,他们可能会一直试图击中一个IP。 但至less它不是“为所有人”,你可以随时引导他们到一个有效的服务器。 另外,如果服务器永久停机,则可以将其从DNS中删除,并且一旦caching,就会阻止用户击中它。 在这种情况下,haproxy可能不是一个不好的解决scheme。