该文档主要介绍了主要基于apache doris数据库搭建(一)的基础上进行集群搭建、升级、扩容操作讲解编写。
Doris 作为一款开源的 MPP 架构 OLAP 数据库,能够运行在绝大多数主流的商用服务器上。为了能够充分运用 MPP 架构的并发优势,以及 Doris 的高可用特性,我们建议 Doris 的部署遵循以下需求:
Linux 系统 | 版本 |
---|---|
CentOS | 7.1 及以上 |
Ubuntu | 16.04 及以上 |
软件 | 版本 |
---|---|
Java | 1.8 及以上 |
GCC | 4.8.2 及以上 |
设置系统最大打开文件句柄数,命令如下:
vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
Doris 的元数据要求时间精度要小于5000ms,所以所有集群所有机器要进行时钟同步,避免因为时钟问题引发的元数据不一致导致服务出现异常。
Linux交换分区会给Doris带来很严重的性能问题,需要在安装之前禁用交换分区
ext4和xfs文件系统均支持。
模块 | CPU | 内存 | 磁盘 | 网络 | 实例数量 |
---|---|---|---|---|---|
Frontend | 8核+ | 8GB+ | SSD 或 SATA,10GB+ * | 千兆网卡 | 1 |
Backend | 8核+ | 16GB+ | SSD 或 SATA,50GB+ * | 千兆网卡 | 1-3 * |
模块 | CPU | 内存 | 磁盘 | 网络 | 实例数量(最低要求) |
---|---|---|---|---|---|
Frontend | 16核+ | 64GB+ | SSD 或 RAID 卡,100GB+ * | 万兆网卡 | 1-3 * |
Backend | 16核+ | 64GB+ | SSD 或 SATA,100G+ * | 万兆网卡 | 3 * |
注1:
- FE 的磁盘空间主要用于存储元数据,包括日志和 image。通常从几百 MB 到几个 GB 不等。
- BE 的磁盘空间主要用于存放用户数据,总磁盘空间按用户总数据量 * 3(3副本)计算,然后再预留额外 40% 的空间用作后台
compaction 以及一些中间数据的存放。- 一台机器上可以部署多个 BE 实例,但是只能部署一个 FE。如果需要 3 副本数据,那么至少需要 3 台机器各部署一个 BE
实例(而不是1台机器部署3个BE实例)。多个FE所在服务器的时钟必须保持一致(允许最多5秒的时钟偏差)- 测试环境也可以仅适用一个 BE 进行测试。实际生产环境,BE 实例数量直接决定了整体查询延迟。
- 所有部署节点关闭 Swap。
注2:FE 节点的数量
- FE 角色分为 Follower 和 Observer,(Leader 为 Follower 组中选举出来的一种角色,以下统称
Follower)。- FE 节点数据至少为1(1 个 Follower)。当部署 1 个 Follower 和 1 个 Observer
时,可以实现读高可用。当部署 3 个 Follower 时,可以实现读写高可用(HA)。- Follower 的数量必须为奇数,Observer 数量随意。
- 根据以往经验,当集群可用性要求很高时(比如提供在线业务),可以部署 3 个 Follower 和 1-3 个Observer。如果是离线业务,建议部署 1 个 Follower 和 1-3 个 Observer。
Broker 是用于访问外部数据源(如 hdfs)的进程。通常,在每台机器上部署一个 broker 实例即可。
Doris 各个实例直接通过网络进行通讯。以下表格展示了所有需要的端口
实例名称 | 端口名称 | 默认端口 | 通讯方向 | 说明 |
---|---|---|---|---|
BE | be_port | 9060 | FE --> BE | BE 上 thrift server 的端口,用于接收来自 FE 的请求 |
BE | webserver_port | 8040 | BE <–> BE | BE 上的 http server 的端口 |
BE | heartbeat_service_port | 9050 | FE --> BE | BE 上心跳服务端口(thrift),用于接收来自 FE 的心跳 |
BE | brpc_port | 8060 | FE <–> BE, BE <–> BE | BE 上的 brpc 端口,用于 BE 之间通讯 |
FE | http_port | 8030 | FE <–> FE,用户 <–> FE | FE 上的 http server 端口 |
FE | rpc_port | 9020 | BE --> FE, FE <–> FE | FE 上的 thrift server 端口,每个fe的配置需要保持一致 |
FE | query_port | 9030 | 用户 <–> FE | FE 上的 mysql server 端口 |
FE | edit_log_port | 9010 | FE <–> FE | FE 上的 bdbje 之间通信用的端口 |
Broker | broker_ipc_port | 8000 | FE --> Broker, BE --> Broker | Broker 上的 thrift server,用于接收请求 |
注:
当部署多个 FE 实例时,要保证 FE 的 http_port 配置相同。
部署前请确保各个端口在应有方向上的访问权限。
因为有多网卡的存在,或因为安装过 docker 等环境导致的虚拟网卡的存在,同一个主机可能存在多个不同的 ip。当前 Doris 并不能自动识别可用 IP。所以当遇到部署主机上有多个 IP 时,必须通过 priority_networks 配置项来强制指定正确的 IP。
priority_networks 是 FE 和 BE 都有的一个配置,配置项需写在 fe.conf 和 be.conf 中。该配置项用于在 FE 或 BE 启动时,告诉进程应该绑定哪个IP。示例如下:
priority_networks=192.168.50.190/24
这是一种 CIDR 的表示方法。FE 或 BE 会根据这个配置项来寻找匹配的IP,作为自己的 localIP。
注意:当配置完 priority_networks 并启动 FE 或 BE 后,只是保证了 FE 或 BE 自身的 IP 进行了正确的绑定。而在使用 ADD BACKEND 或 ADD FRONTEND 语句中,也需要指定和 priority_networks 配置匹配的 IP,否则集群无法建立。举例:
BE 的配置为:priority_networks=192.168.50.190/24
但是在 ADD BACKEND 时使用的是:
ALTER SYSTEM ADD BACKEND "192.168.0.1:9050";
则 FE 和 BE 将无法正常通信。
这时,必须 DROP 掉这个添加错误的 BE,重新使用正确的 IP 执行 ADD BACKEND。
FE 同理。
BROKER 当前没有,也不需要 priority_networks 这个选项。Broker 的服务默认绑定在 0.0.0.0 上。只需在 ADD BROKER 时,执行正确可访问的 BROKER IP 即可。
表名大小写敏感性设置
doris默认为表名大小写敏感,如有表名大小写不敏感的需求需在集群初始化时进行设置。表名大小写敏感性在集群初始化完成后不可再修改。
环境规划
服务器名 | 服务器IP | 角色 |
---|---|---|
node0 | 192.168.50.190 | FE、BE、Master |
node1 | 192.168.50.189 | FE、BE |
node2 | 192.168.50.188 | FE、BE |
首先我们通scp -r 目标文件 root@ip:/data命令将文件分发到其余两台服务器,并且修改对应的ip地址,操作命令如下:
vim be.conf #进入其余两台服务器的doris/be文件下,笔者这里的ip是192.168.50.189
mkdir -p /data/data_dir/ /data/doris-meta/ #在其余分别两个台服务器执行创建
注意:另一台服务器同理,笔者这里不做演示了(另外一台ip是192.168.50.188)
修改完成,使用如下命令进行添加 BE 节点到集群:
mysql -uroot -h 192.168.50.190 -P 9030 -p
#密码为root
#或者通过客户端登录
#通过MySQL 客户端连接到 FE 之后执行下面的 SQL,将 BE 添加到集群中
ALTER SYSTEM ADD BACKEND "192.168.50.188:9050";
ALTER SYSTEM ADD BACKEND "192.168.50.189:9050";
分别到node0和node1的be文件目录下启动对应的be服务,具体命令如下图所示:
./bin/start_be.sh --daemon
注意:如果提示Please set vm.max_map_count to be 2000000 under root using ‘sysctl -w vm.max_map_count=2000000’.就按照提示执行对应的sysctl -w vm.max_map_count=2000000命令
Alive字段为true,说明BE状态正常,已加入集群。
首先进入doris的fe/conf目录下使用如下命令进行编辑fe.conf文件,修改ip:
vim fe.conf #进入其余两台服务器的doris/fe文件下,笔者这里的ip是192.168.50.189
注意:另一台服务器同理,笔者这里不做演示了(另外一台ip是192.168.50.188);原先历史ip为192.168.50.190【apache doris数据库搭建(一)】
FE 注意事项:
1. Follower FE(包括 Master)的数量必须为奇数,建议最多部署 3 个组成高可用>> (HA)模式即可。
2. 当 FE 处于高可用部署时(1个 Master,2个 Follower),我们建议通过增加 Observer FE 来扩展 FE的读服务能力。当然也可以继续增加 Follower FE,但几乎是不必要的。
3. 通常一个 FE 节点可以应对 10-20 台 BE 节点。建议总的 FE 节点数量在 10 个以下。而通常 3 个即可满足绝大部分需求。
4. helper 不能指向 FE 自身,必须指向一个或多个已存在并且正常运行中的 Master/Follower FE。
启动node0 node1的FE服务(之前已启动192.168.50.190机器FE作为leader角色)特别说明:–helper 参数仅在 follower 和 observer 第一次启动时才需要。
## ./bin/start_fe.sh --helper leader_fe_host:edit_log_port --daemon
./bin/start_fe.sh --helper 192.168.50.190 --daemon
添加完成之后通过 SHOW PROC ‘/frontends’\G; 可查看FE状态,查看Alive是否为true,为True证明添加成功
至此3个节点都启动了FE实例,此外还需 使用 mysql-client 连接到已启动的node2机器的FE,执行添加集群的SQL操作。由于我们期望部署2个FE,将node2改成OBSERVER 需要在SQL窗口执行以下三条命令:
#添加FE
ALTER SYSTEM ADD FOLLOWER "192.168.50.189:9010";
ALTER SYSTEM ADD FOLLOWER "192.168.50.189:9010";
#执行前需要删除node2的OBSERVER alter system,drop follower[observer] "ip:port"
ALTER SYSTEM ADD OBSERVER "192.168.50.190:9010";
再次查看FE实例
show proc '/frontends';
注意: 如果后续要扩充对应的FE节点通过对应的sql命令
ALTER SYSTEM ADD FOLLOWER
“ip:port”`
进行添加即可,BE节点通过sql命令 :
ALTER SYSTEM ADD BACKEND "ip:port";
至此笔者doris数据库集群搭建讲解完毕,哪里有疑问及时联系笔者 本节版本为1.2.1.4