我们有两个邮件服务器(“dubone”和“dubdeuce”),一个工作,一个工作,另一个空闲。 我们希望有一个设置,如果dubone忙或者down,dubdeuce可以像dubone那样接受/拒绝/过滤电子邮件。
然后,一旦dubone再次可用,dubdeuce会将所有已存储的电子邮件推送到dubone上,这样电子邮件就在一个地方。
我们使用MySQL支持的Exim4和Dovecot,并且可以使用RoundCube访问。 两台机器都运行Ubuntu Linux。
我怎样才能在两台机器之间同步数据库,这样dubdeuce始终是最新的(它需要正确地完成工作),然后我将如何指示dubdeuce将所有累积的消息推送到dubone?
这里有三个组件:数据库复制,邮件冗余和用户访问。
数据库复制非常简单, MySQL文档很好地涵盖了这一点。
邮件复制通常与确保MXlogging设置正确一样简单。 如果dubdeuce不是主要的MX,那么一旦主要的MX再次可用,它就会将邮件转发到主要的MX。
然而,你并没有明确地说明,但是你包含的是roundcube意味着你希望第二个系统能够完全运行,就像MUA一样 – 你希望用户能够阅读邮件。 如果情况并非如此,那么你很高兴roundcube在dubone回来之前处于离线状态,然后上述组件将为你完成这项工作。
再说一次:如果你想要的只是一个简单的系统,将存储和转发电子邮件,直到主要回来,所有你需要的是数据库复制的MySQL和使用辅助MX。 这个系统应该在任何时候都是活的,而不是只在需要的时候才会生成。
如果你想要一个完全冗余的系统,其中roundcube总是可用的,那么你想要的是两个系统之间的共享邮件池。 将dubduececonfiguration为主MX并没有真正的方法,并且使用户能够从中读取邮件,并将其明智地转发给dubone。
所以,你需要一个共享的邮件池。 这可能是作为文件服务器的第三个系统,它将邮件服务器提供给两个主要主机,但由于locking问题,长期以来build议不要使用NFS作为邮件池。
在主动/备份模式下,可以在两个节点之间使用DRBD完成 – 当一个节点发生故障时,使用心跳将另一个节点切换到活动状态。 当第一个节点恢复在线状态时,你需要一个心跳过程来切换一切。 你仍然需要弄清楚如何复制你的数据库 – 你现在可能需要一个多主设置。
最后,你可以用DRBD做同样的事情,但是在它上面使用一个集群感知的文件系统,并且两个节点总是处于活动状态。不过这有点复杂。 你也可以在节点之间DRBD整个邮件系统。 还有很多方法可以扩展 – 更高级的解决scheme涉及SAN和VM堆栈,如Citrix Xenserver或VMware。
为了我的钱,我会坚持主动/被动DRBD邮件池,多主mysql或DRBD主动/被动支持的mysql,并使用心跳来移动启用活动服务故障转移。 另一种方法是使用Xen或KVM或任何您喜欢的方式将整个邮件服务器放入虚拟机中,将虚拟机备份到DRBD系统,并在发生故障时使心跳故障切换DRBD并启动第二个节点上的虚拟机。 在这个例子中,你实际上只有一个“邮件服务器”,它只是在你的节点之间浮动。 不利之处在于,您必须等待故障切换启动,这可能需要一段时间。
另外,无论您采取哪种方式,请确保您的垃圾邮件/病毒/恶意软件/ etc扫描在两个系统上的configuration完全相同。