使用 Zarafa+Postfix 实时备份收到的邮件

使用 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 命令,它基本上返回 in j.doe[email protected]但仅适用于现有用户。换句话说,它从电子邮件地址中检索 Zarafa 用户名。

我能想到的一件事是将所有邮件发送到第二个传输器,然后将其发送到另一台服务器。此服务器可以是一个简单的快递邮件目录服务器,并且可以将 fetchmail 配置为使用 SMTP 重新发送到从备份中恢复的服务器。

但是,这并不是 100% 优雅的,我甚至不知道该怎么做......

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

编辑:我现在配置了第二个邮件服务器,以便它将相关域的所有传入邮件转储到一个带有X-Original-To:Delivered-To:标题的邮箱中,这样我就可以使用 fetchmail 检索它们并将它们发送到这些地址(我听说 fetchmail 有一个选项)。现在让主服务器上的 Postfix 发送到两个传输...

答案1

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

  • MTA 级备份不会考虑邮件的更改(标记、已读/未读、移动到文件夹、已发送项目),也不会包括其他群件项目(例如日历)。我认为这不是一个选项。
  • MySQL 级复制可实现近乎实时的复制。在远程位置设置从服务器,在紧急情况下只需将其提升为主服务器即可。此外,在mysqldump从服务器上使用对生产环境的影响要小得多。还请检查附件是否保持同步(通常在文件系统上),并且需要定期检查从服务器的完整性。
  • MySQL 级 InnoDB 热备份。您可以使用 Percona 的工具包以不太频繁的方式创建 Zarafa 数据库的热备份,并rsync非常频繁地(在刷新日志后)备份二进制日志文件。可以重播较旧的一致快照上的日志以获得时间点恢复。
  • 使用Zarafa 的存档器。它还提供与邮件投递相结合的存档功能,dagent虽然它被称为“存档器”,但它能做的不仅仅是存档邮件。
  • 使用Zarafa 的 MSR并使其在后台运行。它将使您的商店在 Zarafa 级别保持同步。

如果您不确定如何在 MySQL 级别进行设置,我建议您先尝试一下,以便熟悉它。我也建议您阅读“高性能 MySQL”(O'Reilly)。

相关内容