我有一个 Postfix 服务器,并且我正尝试在两个不同的连接/ISP 中使用两个不同的 IP 来发送电子邮件。
该地址89.xxx.xxx.2
是 的默认系统网关,eth0
并且188.xxx.xxx.2
是 的地址,该地址eth1
具有专用路由表和自定义ip
规则(ip rule add from 188.xxx.xxx.2 table SECONDARY
等等),可实现路由。两者都能够路由到整个互联网,ping
并且wget
能够postfix
使用这两个连接进行传出流量。
我master.cf
定义了以下内容:
out-one unix - - n - - smtp
-o smtp_bind_address=89.xxx.xxx.2
-o inet_interfaces=89.xxx.xxx.2
-o myhostname=outone.example.org
-o smtp_helo_name=outone.example.org
-o syslog_name=smtp-out-one
out-two unix - - n - - smtp
-o smtp_bind_address=188.xxx.xxx.2
-o inet_interfaces=188.xxx.xxx.2
-o myhostname=outtwo.example.org
-o smtp_helo_name=outtwo.example.org
-o syslog_name=smtp-out-two
现在main.cf
我添加了:
sender_dependent_default_transport_maps = randmap:{out-one,out-two}
smtp_connection_cache_on_demand=no
提交电子邮件时Postfix 将随机选择两种传输方式之一发送电子邮件。它非常适合负载平衡- 使用具有正确主机名和所有内容的两个地址发送电子邮件。
现在假设我删除eth1
Postfix 仍然能够通过eth0
/发送“一半”的电子邮件,89.xxx.xxx.2
但另一半将被排队:
postfix/smtp: fatal: parameter inet_interfaces: no local interface found for 188.xxx.xxx.2
如果之前选择的传输图不起作用,Postfix 是否有办法再次尝试使用不同的传输图?
如果out-two
失败,再次调用 randmap > 最终使用 发送电子邮件out-one
。似乎如果我重新启动服务器,它会执行此操作,但不会自行执行。
为什么除非重新启动,否则它总是使用相同的传输重试?这种行为可以改变吗?还有其他方法可以实现这种冗余/负载平衡吗?