使用Zarafa + Postfix实时备份传入邮件

我有一个Zarafa服务器(用Postfix作为交付代理),我想添加实时备份。 它已经:

  • 使用mysqldump备份数据库,每天晚上使用rdiff-backup备份所有文件系统。
  • 使用DRBD进行回退(机器是具有DRBD后端的Xen虚拟机)。 因此,如果主要出现故障,我可以立即启动备份主机上的虚拟机。

在文件系统/数据库损坏的情况下,我想实时备份收到的邮件,以防止在夜间备份后收到这些邮件的丢失。

Zarafa的交付工作是这样的(摘自Postfix的main.cf):

mailbox_transport = zarafa: zarafa_destination_recipient_limit = 1 virtual_alias_maps = mysql:/etc/postfix/mysql-aliases.cf 

邮箱传输(在master.cf中定义)是一个工具,接受stdin上的数据传递到Zarafa的商店(基于mysql +文件)。 Virtual_alias_maps是一个SQL命令,基本上返回j.doe中的[email protected] ,但仅限于现有用户。 换句话说,它从电子邮件地址中检索Zarafa用户名。

我能想到的一件事是将所有邮件发送到第二个传输器,将其发送到另一个服务器。 该服务器可以是一个简单的快递maildir服务器,可以将fetchmailconfiguration为使用SMTP重新发送到从备份恢复的服务器。

但是,这不是100%的优雅,我甚至不知道如何去做…

任何更好/实施的想法…?

编辑:我现在有第二个邮件服务器configuration,以便它将相关域的所有传入邮件转储到X-Original-To:Delivered-To:标题的一个邮箱,所以我可以使用fetchmail检索它们并将它们传递到这些地址(fetchmail有一个选项,我已经被告知)。 现在让Postfix上的主交付给两个传输…

有几种方法可能适合您的需求。 其中之一是DRBD,但是我build议只适用于高可用性和关键任务系统。

  • MTA级备份不会对您的邮件进行更改(标记,读取/未读,移动到文件夹,已发送邮件),并且不包含其他组件项目,例如压延。 我认为这不是一个select。
  • MySQL级别的复制几乎是实时的。 在远程位置设置一个从属设备,如果发生紧急情况,只需将其升级为主设备。 另外,在slave上使用mysqldump对你的生产环境影响较小。 还要检查你的附件是否保持同步(通常在文件系统上),你需要定期检查你的slave的完整性。
  • MySQL级别的InnoDB热备份。 您可以使用Percona的工具包来非常频繁地创buildZarafa数据库的热备份,并频繁地(在刷新日志之后) rsync二进制日志文件。 人们可以重播旧版一致性快照上的日志以获得时间点恢复。
  • 使用Zarafa的Archiver 。 它还提供了档案在交付与dagent和虽然它被称为“存档”它可以做更多,只是存档邮件。
  • 使用Zarafa的MSR,并保持它在后台运行。 它将保持您的商店在Zarafa级同步。

如果您不确定如何在MySQL级别进行设置,我build议您首先使用它,以获得舒适。 我也推荐阅读“高性能MySQL”(O'Reilly)。