Stalwart邮件服务器集群的部署与配置

大家好!在前几篇中,我们依次部署了邮件服务器集群依赖的各个组件,包括数据库集群、全文索引服务集群、Redis集群等。今天,我们将在各节点上部署Stalwart邮件服务器,并且配置集群。

本文也是“搭建高可用的邮件服务器集群”系列文章的第四篇。按照本文的部署结束后,您将拥有一个完整可用的高可用邮件服务器集群。

  1. 邮件服务器集群的架构与基本设置
  2. FoundationDB数据库集群的部署
  3. ElasticSearch全文索引数据库集群的部署
  4. Redis缓存数据库集群的部署
  5. Stalwart Mail Server的集群部署与配置(本文)
  6. HAProxy均衡负载节点的部署

本文作者为香菇肥牛,原文链接为 https://qing.su/article/stalwart-mail-server-cluster-setup.html, 转载请注明原文链接。谢谢!


1. 安装Stalwart邮件服务器

在开始之前,请确保您已经按照本系列前4篇文章的描述,设置好了防火墙、节点信息等,并且配置好了FoundationDB, ElasticSearch, Redis集群。

如果您的设置和我的教程不同(比如你用了 MySQL Galera 集群而不是 FoundationDB 集群),那么后续的配置也会有所差异,请按照您自己的部署方案来自行更改。

和单节点部署的stalwart邮件服务器不同,由于是集群部署,我们需要安装FoundationDB版本的Stalwart Mail Server.

1
2
curl --proto '=https' --tlsv1.2 -sSf https://get.stalw.art/install.sh -o install.sh
sh install.sh --fdb

安装完毕后,请在Stalwart后台设置好每台节点的管理员密码和主机名。以我的集群为例,每台节点的主机名分别是 mxa.qing.su, mxb.qing.su, mxc.qing.su.  如果您找不到相应位置,可以参考之前的单节点部署教程的图示 https://qing.su/article/stalwart-mail-single-server-nginx.html.


2. 配置Stalwart存储后端

在单节点的部署方案中,默认使用RocksDB作为存储后端,负责邮件和各类数据的存储。在集群部署方案中,我们需要将之前搭建的FoundationDB集群, ElasticSearch集群,Redis集群,以及S3存储作为我们的数据后端。

找到Settings – Storage – Stores.

首先,添加FoundationDB,如下图。

接着,添加ElasticSearch集群,如下图。如果您按照我之前的教程安装了ElasticSearch集群,则记得将URL协议设置为http://, 然后输入当时设置的ElasticSearch用户名和密码。

然后,添加Redis集群,如下图。如果您按照我之前的教程安装了Redis集群,则需要输入当时设置的Redis集群验证密码。

最后,添加Blob存储。您可以选择任何S3存储,比如Backblaze B2或者Cloudflare R2,或者使用MinIO自行搭建S3存储。我这里用的是Backblaze B2,需要填入bucket信息和API接口信息。如果您使用的是Cloudflare R2, 请用auto作为区域,并且在保存后去 config.toml 文件中删掉 security-token 这个字段,否则会报错。

全部添加完毕后,找到Settings – Storage – Settings, 将存储后端设置为刚刚添加的这几个后端,如下图。

最后,重启Stalwart服务器。

1
service stalwart-mail restart

3. 配置集群化

配置好上述的各存储后端后,我们就可以在Stalwart中配置集群化了。

找到Settings – Server – Cluster, 以IP 77.77.77.77的第一台节点机为例,在bind address/advertise address中填入当前节点的地址,在seed node中填入全部节点的地址。请注意,所有的节点服务器需要使用相同的交互端口(比如我这里的1179)以及Encryption Key.

在每台节点服务器上做好类似的配置。然后,依次重启stalwart服务器。

1
service stalwart-mail restart

然后,我们登录每台节点的后台。如果看到 A new peer was discovered 的提示(如果有3台节点,就会看到两条提示),说明集群化已经配置成功了。

集群化部署完毕后,所有的配置均仅需在单一节点上进行,配置保存后会自动同步至其他的节点。


4. 配置TLS证书

到这里,所有关于集群化的设置都已经配置完毕了。在开始邮件收发之前,我们还需要配置TLS证书。

在之前的单节点搭建教程中,我们使用certbot 在Nginx中部署证书,然后让Stalwart去调用这个外部证书。在集群化部署的情况下,我们没有在每个节点服务器上部署Nginx, 因此可以直接在Stalwart服务器中部署证书。

Stalwart邮件服务器自带了ACME证书管理功能,支持HTTP验证与DNS验证。由于我们有三台节点服务器,因此使用DNS验证是较为方便的选择。

打开任意一台节点的Stalwart后台,找到Settings – Server – TLS – ACME Providers, 添加一个证书管理器。比如,我用的是Let’s Encrypt证书,并且使用Cloudflare的DNS验证,如下图所示。

请注意,在Subject names中,我填入了*.qing.su, 这样对于三台节点 mxa.qing.su, mxb.qing.su, mxc.qing.su都会生效。

保存并且重新载入配置文件,几分钟之后证书就会生效了。

您可以继续进行其他设定,比如添加域名、邮箱、设置SMTP relay等等。如之前所述,这些设定只需要在一台节点上设置即可,会自动同步至其他的节点。


至此,我们的邮件服务器集群就已经配置完毕了。作为三节点的邮件服务器集群,它做到了高可用和失效备援。在一台服务器宕机后,用户可以无感知地继续进行邮件收发,且不会有数据的丢失。

在本系列的下一篇,也是最后一篇文章中,我将介绍如何部署一个前端的HAProxy负载均衡节点。HAProxy的部署并不是必须的,也不会影响这个邮件服务器集群的高可用性。

如果您有任何疑问,欢迎在这里留言,我将尽力解答。

本文作者为香菇肥牛,原文链接为 https://qing.su/article/stalwart-mail-server-cluster-setup.html, 转载请注明原文链接。谢谢!

Leave a Comment