大家好!在前几篇中,我们依次部署了邮件服务器集群依赖的各个组件,包括数据库集群、全文索引服务集群、Redis集群等。今天,我们将在各节点上部署Stalwart邮件服务器,并且配置集群。
本文也是“搭建高可用的邮件服务器集群”系列文章的第四篇。按照本文的部署结束后,您将拥有一个完整可用的高可用邮件服务器集群。
- 邮件服务器集群的架构与基本设置
- FoundationDB数据库集群的部署
- ElasticSearch全文索引数据库集群的部署
- Redis缓存数据库集群的部署
- Stalwart Mail Server的集群部署与配置(本文)
- 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, 转载请注明原文链接。谢谢!