假设有两台主机运行 SMTP 和 IMAP 服务,如何才能最好地使它们冗余,以便当另一台主机发生故障时,一台可以轻松接管?
请记住,没有其他服务器可以托管网络文件系统,并且您必须假设其中任何一个都可能出现故障。
Rsync 注定会丢失邮件,除非它能被 fanotify 或 inotify 之类的程序触发。即便如此,我也不想考虑该设置的磁盘 I/O。
答案1
你正在寻找的是 DRBD,用于保持文件系统同步http://www.drbd.org/. 这从 2.6.33 版开始包含在 Linux 内核中
答案2
在实施此操作时请三思。让一个客户端(或更糟的两个客户端)同时访问不同主机上的同一个 IMAP 邮箱可能会破坏一切。因此,您可能会破坏生产中的所有内容,而您只是想确保在紧急情况下获得故障转移。
彻底测试所有可能性和选项。为了方便起见,我会将第二个用作半冷备用。所有 SMTP 和 IMAP 都将位于一台服务器上,而另一台服务器上则使用分布式文件系统 (DRBD)。如果发生紧急情况,您可以关闭第一台服务器,切换另一台服务器的 IP,然后重新启动另一台服务器。在这种情况下,对邮箱存储的访问更易于管理,没有并发,因此也不会出现不一致。
另一方面,您可能希望在对邮箱进行切片时实现负载平衡。一半在一台服务器上交付,另一半在另一台服务器上交付。在复制存储时,您可以(在紧急情况下)切换到干净的机器并在那里运行所有邮箱。
总结:问题在于对存储的并发访问。解决该问题,您就可以实现故障转移/高可用性/负载平衡。