放大/缩小电子邮件存储服务器的典型方法是什么?

我试过了:

  • 我有两个电子邮件存储架构。 旧的和新的。

旧:

  • 快递 – imapds在几个(18+)1TB存储服务器上。
  • 如果其中一个出现磁盘空间不足的迹象,我们会将一些电子邮件帐户迁移到另一台服务器。
  • 服务器没有副本。 没有备份。

新:

  • dovecot2在一台配有16TB(SATA)存储和一些SSD的巨大服务器上
  • 我们将新邮件存储在固态硬盘上,并运行doveadm清除function,将超过一天的邮件移动到SATA磁盘
  • 有一台相同的服务器,它具有来自主服务器的最长-15分钟的rsync备份
  • 为了最大限度地降低每个服务器SSD的成本,上级/pipe理人员希望在每台服务器上尽可能多地存储存储空间
  • rsync正在完成,因为GlusterFS在那个高小的随机IO下复制得并不好。
  • 预计将configuration另一如此巨大的服务器
  • 在面对像旧架构那样的磁盘紧缩问题时,手动移动电子邮件帐户将会完成。

关注/疑虑:

  • 我不相信同步复制的文件系统理念适用于繁重的随机/小IO。 GlusterFS还没有为我们工作,我不知道这个用例是否有另一个文件系统。 这个想法是保持相同的配对,并使用DNS循环来发送电子邮件和IMAP / POP3访问。 如果服务器出于某种原因(计划/未计划)而出现故障,我们会将IP移到另一台服务器上。
  • 在像Lustre这样的文件系统中,我获得了单一名称空间的好处,因此我不必担心手动迁移帐户并更新MAILHOMEpath和其他元数据/数据。

问题:

  • 用传统软件(courier-imapd / dovecot)扩展/扩展的典型方法是什么?
  • 传统的存储在本地安装的文件系统上的软件是否构成一个障碍,以最小的“问题”来扩展? 是否必须重新编写(部分)这些对象来使用某种对象存储 – 比如OpenStack对象存储?

我所见过的大中型公司是冗余存储设备,如NetApp或EMC。 事实上,我刚才在跟一位EMC的电子邮件存储代表谈话,他说大量的电子邮件服务器对他们来说是非常普遍的销售。

基本上他们把所有的存储问题都从应用程序中移走。 使用SSD或电池支持的内存caching可以实现大量短暂的随机读取。 所有的存储都在一个地方,多条path到冗余服务器模块,所以没有复制延迟。

应用程序服务器使用NFS或iSCSI来访问存储,但这种方式的灵活性较差,但有时在应用程序中需要使用不适合NFS的应用程序。 这使得存储可以通过高速以太网由任意数量的服务器共享,因此您可以扩展到存储箱的最大I / O性能,然后根据需要进行扩展。

就应用程序服务器的冗余而言,最便宜的是软件集群软件包。 还有像Big-IP这样的设备可以在networking层面处理,而且与操作系统无关。 这很大程度上取决于应用程序是否可以通过NFS与其他实例并行地可靠地工作。

我对大铁的方法有点小心 – 通常很难扩展,人们倾向于采用构build故​​障转移解决scheme的方法,希望在出现中断时能够正常工作。 大多数人很久以前就停止将这种方法应用于磁盘和网卡等组件,但将其应用于服务器则更为棘手。 您可以通过LDAP分割用户来分割数据 – 但这直接解决了复制问题,但是通过运行8对负载平衡的服务器,争用可能会less得多。 当然glusterFS恕我直言在高度事务性的系统上不能正常工作。 我也不认为近线型系统(如AFS)也是一个好主意。 问题在于需要在所有镜像上同步进行很多小的更改 – 实际上最好在应用程序级别上进行以保持一致性/

尽pipeDovecot旨在与共享存储上的多服务器一起使用,但NFS / iscsitypes的方法仍然意味着SPOF或故障转移types的方法,而不是负载平衡。 我听到很多关于GFS2用于事务性工作负载的好消息 – 通过减less到更小的系统,然后在DRBD之上运行这个服务就可以实现所需的复制。 但是尝试隔离专用交换机上的对(或使用交叉以太网连接)来保持主networking的噪声。

也就是说,我很抱歉地说,虽然dovecot对于这种types的手术来说可能比信使好很多,但是我认为你的新架构是倒退的。

(我猜你正在使用maildir而不是mbox)

我同意有一套固定的用户映射到集群是一个开销 – 而不是可用资源的最有效的使用 – 也许最好的妥协可能是在GFS2 SAN之上的LVS,让SAN处理复制的东西。 对于一个更便宜的解决scheme,尽pipe这是一个猜测,并且需要一些调查/testing,可能运行带有数据库后端的FUSE文件系统,并使用数据库复制function(例如mysqlfs)

除了你正在做的后端工作之外,你可能还想调查Nginx中的imap代理。 它旨在允许您将用户连接路由到特定的后端服务器。 这可能比尝试迁移用户的数据更容易,以平衡stream量和IO负载。