在Linux中搭建FoundationDB数据库集群

FoundationDB是著名的非关系型数据库,用C/C++编写,由苹果公司研发并开源。FoundationDB拥有优秀的性能,而且对于数据库集群和数据复制的支持非常出色,因此很适合我们的邮件服务器集群。

今天,我将介绍如何在Linux系统中部署FoundationDB数据库集群。本文也是“搭建高可用的邮件服务器集群”系列文章的第二篇。

  1. 邮件服务器集群的架构与基本设置
  2. FoundationDB数据库集群的部署(本文)
  3. ElasticSearch全文索引数据库集群的部署
  4. Redis缓存数据库集群的部署
  5. Stalwart Mail Server的集群部署与配置
  6. 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, 转载请注明原文链接。谢谢!

Leave a Comment