FoundationDB是著名的非关系型数据库,用C/C++编写,由苹果公司研发并开源。FoundationDB拥有优秀的性能,而且对于数据库集群和数据复制的支持非常出色,因此很适合我们的邮件服务器集群。
今天,我将介绍如何在Linux系统中部署FoundationDB数据库集群。本文也是“搭建高可用的邮件服务器集群”系列文章的第二篇。
- 邮件服务器集群的架构与基本设置
- FoundationDB数据库集群的部署(本文)
- ElasticSearch全文索引数据库集群的部署
- Redis缓存数据库集群的部署
- Stalwart Mail Server的集群部署与配置
- HAProxy均衡负载节点的部署
本文作者为香菇肥牛,原文链接为 https://qing.su/article/foundationdb-cluster-setup-in-linux.html, 转载请注明原文链接。谢谢!
1. FoundationDB数据库的安装
在开始之前,我们默认您已经按照前一篇文章的描述 (https://qing.su/article/high-availability-mail-server-cluster-stalwart-mail.html),设置好了防火墙,仅允许节点机之间的互相通信。
本文将使用3台节点机搭建FoundationDB数据库集群,每台服务器的地址为 mxa.qing.su (77.77.77.77), mxb.qing.su (88.88.88.88), mxc.qing.su (99.99.99.99).
首先安装FoundationDB. 您可以去Github查看他们的最新版本.
以7.3.63版本为例,下载deb包安装服务器和客户端。
1 2 3 | wget https://github.com/apple/foundationdb/releases/download/7.3.63/foundationdb-server_7.3.63-1_amd64.deb wget https://github.com/apple/foundationdb/releases/download/7.3.63/foundationdb-clients_7.3.63-1_amd64.deb dpkg -i foundationdb-server*.deb foundationdb-clients*.deb |
此时,我们检查一下是否安装成功。
1 | lsof -i:4500 |
看到类似下面的回显,说明FoundationDB实例运行正常。
1 2 3 | COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME backup_ag 872878 foundationdb 14u IPv4 10473824 0t0 TCP localhost:57788->localhost:4500 (ESTABLISHED) fdbserver 872879 foundationdb 17u IPv4 10472314 0t0 TCP localhost:4500 (LISTEN) |
这样就安装好了FoundationDB.
2. 在单节点中配置FoundationDB
安装完毕,等待一分钟初始化后,进入FoundationDB命令行终端
1 | fdbcli |
在命令行终端中,输入status, 或者 status details, 可以查看当前数据库的状态。
1 | status |
我们需要关注的有下面几条
1 2 3 4 5 6 7 8 | Redundancy mode - single Storage engine - memory Coordinators - 1 FoundationDB processes - 1 Memory availability - 6.5 GB per process on machine with least available Fault Tolerance - 0 machines Replication health - Healthy Storage server - 1.0 GB free on most full server |
可以看到,由于还没有配置集群,我们的FoundationDB还处于单节点状态,没有容错和冗余。另外,默认安装的FoundationDB用内存来储存,我们需要将其设置为SSD储存。在fdbcli终端中,执行
1 2 | configure perpetual_storage_wiggle=1 storage_migration_type=gradual configure ssd |
这样就设置为了SSD储存。
FoundationDB的默认安装仅使用一个CPU线程。如果您的服务器上拥有超过一个CPU线程,您可以并行运行多个FoundationDB进程,提高数据库的性能。请确保每个FDB进程至少拥有4 GB以上的内存分配。
编辑FoundationDB配置文件 /etc/foundationdb/foundationdb.conf
默认的进程运行于4500端口。
1 | [fdbserver.4500] |
您可以自行添加多个FoundationDB进程,比如:
1 | [fdbserver.4501] |
然后重启FoundationDB服务
1 | service foundationdb restart |
您需要依次在三台节点服务器上依次安装好FoundationDB. 全部安装完毕后,我们来部署FoundationDB集群。
3. 配置FoundationDB集群
在部署FDB集群之前,请确保您已经按照上述步骤在三台节点服务器中都安装好了FoundationDB, 并且按照上篇文章的步骤配置好了防火墙。
首先,默认安装的FoundationDB仅仅监听本地端口,而不允许外网访问。我们需要开放外网的访问。在每台服务器上执行下面的命令
1 | python3 /usr/lib/foundationdb/make_public.py -a 77.77.77.77 |
将77.77.77.77替换成您每台服务器的公网IP. 这样,FoundationDB就会监听这个IP的相应端口。
然后,选择其中的一台服务器(比如服务器A, 77.77.77.77),暂时关闭另外两台服务器(B, C)上的FDB服务,仅保留第一台服务器 (A)。在另外两台服务器上执行
1 | service foundationdb stop |
FoundationDB使用 fdb.cluster 文件来判断集群。所有集群内的节点需要使用相同的 fdb.cluster 文件。在服务器B, C没有运行FDB的情况下,我们用服务器A的 fdb.cluster 文件来替换B, C上的相应文件。在B, C上执行:
1 2 3 | cd /etc/foundationdb mv fdb.cluster fdb.cluster_backup scp -P YOUR_SSH_PORT root@77.77.77.77:/etc/foundationdb/fdb.cluster . |
此时,我们启动B服务器上的FDB服务,但保持C节点FDB服务关闭。
1 | service foundationdb start |
然后进入fdbcli终端,查看当前状态。
1 | fdb> status |
一开始的时候,终端会提示error, 请等待几十秒钟。如果一直error, 则请重启A服务器上的FDB服务,然后再查看状态。等到状态变成如下,
1 2 | The database is available. Replication health - Healthy |
此时,我们再在服务器C上启动FDB服务。等待几十秒钟,查看状态。等到状态再次变成
1 2 | The database is available. Replication health - Healthy |
说明三台服务器互联成功了。
互联成功之后,我们还需要配置服务器的存储及冗余设定。
对于本教程的环境而言,我们使用三台服务器组建了FoundationDB集群。因此,在数据协同和调度方面,最优的配置是使用3个协调进程(coordinators),这样我们可以失去一个协调进程而不影响集群的运行。
在其中任意一台节点服务器上,接入命令行终端 fdbcli, 执行:
1 | coordinators auto |
服务器会帮助我们自动地设置为3 coordinators模式,每台服务器均至少有一个FDB线程成为coordinator.
此时查看状态,
1 | status details |
就可以看到,服务器设置好了3个coordinator进程。
而在数据备份方面,我们应该使用双复制 (double replication), 这样即便失去一台服务器,也不会导致数据的丢失。
在fdbcli中执行:
1 | configure double ssd |
这样就设置好了双复制。
到这里,我们就完整地设置好了三台服务器组建的FoundationDB集群。如果需要,您还可以额外配置TLS.
我们来核对一下。在任意一台服务器的fdbcli中执行:
1 | status details |
对于三节点的集群,您应该看到下面的条目。
1 2 3 4 5 6 7 | Using cluster file `/etc/foundationdb/fdb.cluster'. Redundancy mode - double Storage engine - ssd-2 Coordinators - 3 Machines - 3 Fault Tolerance - 1 machines Replication health - Healthy |
如果您看到的数目和上面不一致,则很有可能之前某步出现了错误,请仔细检查重试。
至此,我们成功搭建了由三台服务器组建的FoundationDB数据库集群。这是本系列教程中最为繁琐也是最为重要的一步。在下一篇文章中,我将详述ElasticSearch全文索引数据库集群的搭建。
如果您有任何疑问,欢迎在这里留言,我将尽力解答。
本文作者为香菇肥牛,原文链接为 https://qing.su/article/foundationdb-cluster-setup-in-linux.html, 转载请注明原文链接。谢谢!