Doris 存算分离架构部署方式示意图如下,共需要 3 个模块参与工作:

  • FE:负责接收用户请求,负责存储库表的元数据,目前是有状态的,未来会和 BE 类似,演化为无状态。
  • BE:无状态化的 Doris BE 节点,负责具体的计算任务。BE 上会缓存一部分 Tablet 元数据和数据以提高查询性能。
  • Meta Service:存算分离模式新增模块,程序名为 doris_cloud,可通过启动不同参数来指定为以下两种角色之一
  • Meta Service:元数据管理,提供元数据操作的服务,例如创建 Tablet,新增 Rowset,Tablet 查询以及 Rowset 元数据查询等功能。
  • Recycler:数据回收。通过定期对记录已标记删除的数据的元数据进行扫描,实现对数据的定期异步正向回收(文件实际存储在 S3 或 HDFS 上),而无须列举数据对象进行元数据对比。

apache-doris-in-compute-storage-decoupled-mode

Meta Service 是一种无状态化的服务,依赖了一个高性能分布式事务 KV(即 FoundationDB)来存储元数据,大幅简化了元数据管理流程,同时提供强大的横向的扩展能力。

deployment-of-compute-storage-decoupled-mode

Doris 存算分离架构依赖于两个外部开源项目,为确保部署顺利,请在开始前预先安装以下依赖:

  • FoundationDB (FDB)
  • OpenJDK17: 需要安装到所有部署 Meta Service 的节点上。

部署步骤

Doris 存算分离模式部署按照模块与分工"自下而上"部署:

  1. 存算分离模式机器规划,这一步骤在本文档介绍。
  2. 部署 FoundationDB 以及运行环境等基础的依赖,这一步骤不需要 Doris 的编译产出即可完成,在本文档介绍。
  3. 部署 Meta Service以及 Recycler
  4. 部署 FE 以及 BE

部署前准备 - 图3备注

注意:一套 FoundationDB + Meta Service + Recycler 基础环境可以支撑多个存算分离模式的 Doris 实例(即多套 FE + BE )。

部署规划

Doris 存算分离模式推荐的部署方式是按照模块划分,尽量避免模块间相互影响。 推荐的部署方式及规划:

  • Meta Service,Recycler 以及 FoundationDB 使用同一批机器。要求大于等于 3 台。
  • 要使存算分离模式正常运行,需要部署至少一个 Meta Service 进程以及至少一个 Recycler 进程。这两种进程均为无状态,可以按需增加部署数量,一般每种进程部署 3 个即可满足需求。
  • 为了保证 FoundationDB 的性能、可靠性以及扩展性,需要使用多副本方式部署 FoundationDB。
  • FE 单独部署,至少 1 台,可根据实际查询需求增加机器数量
  • BE 单独部署,至少 1 台,可根据实际查询需求增加机器数量
1. Host1                  Host2
2. .------------------.   .------------------.
3. |                  |   |                  |
4. |        FE        |   |        BE        |
5. |                  |   |                  |
6. '------------------'   '------------------'

8. Host3                 Host4                 Host5
9. .------------------.  .------------------.  .------------------.
10. |     Recycler     |  |     Recycler     |  |     Recycler     |
11. |   Meta Service   |  |   Meta Service   |  |   Meta Service   |
12. |   FoundationDB   |  |   FoundationDB   |  |   FoundationDB   |
13. '------------------'  '------------------'  '------------------'

如果机器数量有限,可以使用全混部方式,所有模块部署在同一批机器。要求机器数量大于 3 台。 如下是一种可行的规划。

1. Host1                  Host2                  Host3
2. .------------------.   .------------------.   .------------------.
3. |                  |   |                  |   |                  |
4. |        FE        |   |                  |   |                  |
5. |                  |   |        BE        |   |        BE        |
6. |     Recycler     |   |                  |   |                  |
7. |   Meta Servcie   |   |                  |   |                  |
8. |   FoundationDB   |   |   FoundationDB   |   |   FoundationDB   |
9. |                  |   |                  |   |                  |
10. '------------------'   '------------------'   '------------------'

安装 FoundationDB

机器要求

通常情况下,需要至少 3 台机器组成一个双副本、允许单机故障的 FoundationDB 集群。

部署前准备 - 图4提示

如果仅出于开发/测试需要,使用一台机器即可。

每台机器都需先安装 FoundationDB 服务。可通过以下地址选择一个版本下载 FoundationDB 安装包,目前通常推荐使用 7.1.38 版本。

对于 CentOS (Red Hat) 和 Ubuntu 用户,以下是下载链接:

如果需要更高速的下载,也可使用如下镜像链接:

可以使用如下命令安装 FoundationDB 程序:

1. // Ubuntu 系统 user@host
2. $ sudo dpkg -i foundationdb-clients_7.1.23-1_amd64.deb \ foundationdb-server_7.1.23-1_amd64.deb

4. // CentOS 系统
5. user@host$ sudo rpm -Uvh foundationdb-clients-7.1.23-1.el7.x86_64.rpm \ foundationdb-server-7.1.23-1.el7.x86_64.rpm

安装完毕后,在命令行输入 fdbcli 查看是否安装成功。若返回结果显示如下 available 字样,则表示安装成功:

1. user@host$ fdbcli
2. Using cluster file `/etc/foundationdb/fdb.cluster'.

4. The database is available.

6. Welcome to the fdbcli. For help, type `help'.

部署前准备 - 图5备注

安装成功后:

  • 默认将启动一个 FoundationDB 服务。
  • 默认集群信息文件 fdb.cluster将存放在/etc/foundationdb/fdb.cluster,默认集群配置文件 foundationdb.conf 将存放在/etc/foundationdb/foundationdb.conf。
  • 默认将数据和日志分别保存在/var/lib/foundationdb/data/和/var/log/foundationdb。
  • 默认将新建一个 FoundationDB 的 user 和 group,数据和日志的路径默认已具备 FoundationDB 的访问权限。

主机配置

从三台机器中选择一台作为主机。首先完成主机的配置,再配置其他机器。

更改 FoundationDB 配置

根据不同机型调整 FoundationDB 配置, 具体配置请参考 FoundationDB 系统要求。

以下是一个基于 8 核 CPU、32GB 内存和一块 500GB SSD 数据盘的机器的foundationdb.conf示例(请确保正确设置 data 和 log 的存放路径;目前,数据盘一般挂载在 mnt 上):

1. # foundationdb.conf
2. ##
3. ## Configuration file for FoundationDB server processes
4. ## Full documentation is available at
5. ## https://apple.github.io/foundationdb/configuration.html#the-configuration-file

7. [fdbmonitor]
8. user = foundationdb
9. group = foundationdb

11. [general]
12. restart-delay = 60
13. ## By default, restart-backoff = restart-delay-reset-interval = restart-delay
14. # initial-restart-delay = 0
15. # restart-backoff = 60
16. # restart-delay-reset-interval = 60
17. cluster-file = /etc/foundationdb/fdb.cluster
18. # delete-envvars =
19. # kill-on-configuration-change = true

21. ## Default parameters for individual fdbserver processes
22. [fdbserver]
23. command = /usr/sbin/fdbserver
24. public-address = auto:$ID
25. listen-address = public
26. logdir = /mnt/foundationdb/log
27. datadir = /mnt/foundationdb/data/$ID
28. # logsize = 10MiB
29. # maxlogssize = 100MiB
30. # machine-id =
31. # datacenter-id =
32. # class =
33. # memory = 8GiB
34. # storage-memory = 1GiB
35. # cache-memory = 2GiB
36. # metrics-cluster =
37. # metrics-prefix =

39. ## An individual fdbserver process with id 4500
40. ## Parameters set here override defaults from the [fdbserver] section
41. [fdbserver.4500]
42. class = stateless
43. [fdbserver.4501]
44. class = stateless

46. [fdbserver.4502]
47. class = storage

49. [fdbserver.4503]
50. class = storage

52. [fdbserver.4504]
53. class = log

55. [backup_agent]
56. command = /usr/lib/foundationdb/backup_agent/backup_agent
57. logdir = /mnt/foundationdb/log

59. [backup_agent.1]

首先,按照已配置的 datadir 和 logdir 路径在主机上创建相应的目录,并使其具有 foundationdb 的访问权限:

1. chown -R foundationdb:foundationdb /mnt/foundationdb/data/ /mnt/foundationdb/log

然后将 /etc/foundationdb/foundationdb.conf 的内容替换为上述相应配置。

配置访问权限

先设置 /etc/foundationdb 目录的访问权限:

1. chmod -R 777 /etc/foundationdb

在主机中修改 /etc/foundationdb/fdb.cluster 中的 ip 地址,默认是本机地址,修改为内网地址,如:

1. 3OrXp9ei:diDqAjYV@127.0.0.1:4500 -> 3OrXp9ei:diDqAjYV@172.21.16.37:4500

然后重启 FoundationDB 服务:

1. # for service
2. user@host$ sudo service foundationdb restart

4. # for systemd
5. user@host$ sudo systemctl restart foundationdb.service

配置新数据库

主机由于更改了 data 和 log 的存放路径,需新建 database。可在 fdbcli 中新建一个 以ssd 为存储引擎的 database。

1. user@host$ fdbcli
2. fdb> configure new single ssd
3. Database created

最后通过 fdbcli 检测是否启动正常。

1. user@host$ fdbcli
2. Using cluster file `/etc/foundationdb/fdb.cluster'.

4. The database is available.

6. Welcome to the fdbcli. For help, type `help'.

至此,主机的配置完成。

构建 FoundationDB 集群

部署前准备 - 图6提示

如果仅部署一台机器进行开发/测试,可以跳过此步骤。

对于主机以外的机器,每台机器先按照主机配置步骤,创建 data 和 log 目录。

然后,设置 /etc/foundationdb 目录的访问权限:

1. chmod -R 777 /etc/foundationdb

将主机的 /etc/foundationdb/foundationdb.conf 和/etc/foundationdb/fdb.cluster 替换为本机的 /etc/foundationdb/foundationdb.conf 和/etc/foundationdb/fdb.cluster。

随后在本机重启 FoundationDB 服务。

1. # for service
2. user@host$ sudo service foundationdb restart

4. # for systemd
5. user@host$ sudo systemctl restart foundationdb.service

待所有机器操作完毕后,所有机器都已连接在同一集群上(即同一 fdb.cluster)。此时登录主机,配置双副本模式:

1. user@host$ fdbcli
2. Using cluster file `/etc/foundationdb/fdb.cluster'.

4. The database is available.

6. Welcome to the fdbcli. For help, type `help'.
7. fdb> configure double
8. Configuration changed.

然后在主机配置 fdb.cluster 可被访问的机器和端口,用于容灾:

1. user@host$ fdbcli
2. Using cluster file `/etc/foundationdb/fdb.cluster'.

4. The database is available.

6. Welcome to the fdbcli. For help, type `help'.
7. fdb> coordinators ${主机ip}:4500 ${从机1ip}:4500 ${从机2ip}:4500(需要填写所有机器)
8. Coordinators changed

最后,通过 fdbcli 中的 status 检测模式是否配置成功:

1. [root@ip-10-100-3-91 recycler]# fdbcli
2. Using cluster file `/etc/foundationdb/fdb.cluster'.

4. The database is available.

6. Welcome to the fdbcli. For help, type `help'.
7. fdb> status

9. Using cluster file `/etc/foundationdb/fdb.cluster'.

11. Configuration:
12. Redundancy mode        - double
13. Storage engine         - ssd-2
14. Coordinators           - 3
15. Usable Regions         - 1

17. Cluster:
18. FoundationDB processes - 15
19. Zones                  - 3
20. Machines               - 3
21. Memory availability    - 6.1 GB per process on machine with least available
22. Fault Tolerance        - 1 machines
23. Server time            - 11/11/22 04:47:30

25. Data:
26. Replication health     - Healthy
27. Moving data            - 0.000 GB
28. Sum of key-value sizes - 0 MB
29. Disk space used        - 944 MB

31. Operating space:
32. Storage server         - 473.9 GB free on most full server
33. Log server             - 473.9 GB free on most full server

35. Workload:
36. Read rate              - 19 Hz
37. Write rate             - 0 Hz
38. Transactions started   - 5 Hz
39. Transactions committed - 0 Hz
40. Conflict rate          - 0 Hz

42. Backup and DR:
43. Running backups        - 0
44. Running DRs            - 0

安装 OpenJDK 17

OpenJDK 17 需安装到所有的节点上,可通过以下链接获取安装:OpenJDK 17

然后,将下载好的 OpenJDK 安装包直接解压到安装路径即可:

1. tar xf openjdk-17.0.1_linux-x64_bin.tar.gz  -C /opt/

3. # 启动 meta-service 或者 recycler 之前
4. export JAVA_HOME=/opt/jdk-17.0.1

注意事项

部署 FoundationDB 的机器同时也可部署 Meta Service 和 Recycler,此为推荐部署方式,可节省机器资源。