本文来源于百度开发者中心https://developer.baidu.com/a...
数据仓库Palo Doris版是基于Apache Doris(百度自研的分析型数据库引擎)构建的企业级MPP云数据仓库,Palo Doris版全面兼容MySQL协议,提供快捷查询UI,易于使用;支持高并发低延时查询,支持PB级以上的超大数据集,可有效地支持在线实时数据分析。
废话不多说,直接开更!!!
获取安装包
Doris 的安装包即编译后产生的二进制文件。主要包括 FE、BE、BROKER 以及其他扩展程序。
用户可以直接使用预编译好的安装包,或者自行从源码编译获取。
获取预编译安装包
预编译安装包是由百度 Doris 开发团队提供的基于 Doris 三位版本的预编译版本。该版本已在 centos7 上验证运行通过,用户可以下载对应版本后,直接解压运行。
下载地址请前往 预编译版本 下载。
从源码编译
用户也可以自行从源码编译获取安装包。
因为 Doris 源码编译依赖大量第三方组件库,而在不同系统环境下编译这些第三方组件库可能会产生诸多问题。因此这里我们仅介绍通过 Docker 编译镜像 进行 Doris 源码编译的方式。如需自行编译第三方组件库,请前往 本地编译 文档参考。
说明:Docker 编译镜像仅仅是 Doris 源码编译环境,并不是 Doris 的运行环境。镜像中已经内置了编译所需的所有工具和已编译好的第三方依赖库。基于镜像编译产出的安装包可以部署运行于物理机、虚机、Docker等各种环境中。
- 下载 Doris 源码
- 从 Baidu Doris 仓库 下载三位迭代版本(推荐)
百度 Doris 提供了基于 Apache Release 版本的 3 为快速迭代版本。这些版本已经在百度内部业务上大规模上线使用,相较于 Apache Release 版本,Bug 修复速度更快,稳定性相对更高。并且该版本与 Apache Release 版本完全兼容,推荐使用。 - 从 Apache Github 下载 Apache Release 版本
这里是 Apache Doris Github 仓库,可以直接下载 tag 源码包,会通过 git clone 下载代码仓库。 - 从 Apache SVN 下载 Apache Release 版本
这里是 Apache 官方 SVN 仓库,可以下载 Release 版本源码并进行签名校验。
- 下载 Docker 编译环境镜像
- 请先确保已安装 Docker。CentOS 用户通过以下命令快速安装 Docker:
yum -y install docker-io
service docker start
下载 Docker 编译镜像:
docker pull apachedoris/doris-dev:build-env-1.2
docker pull apachedoris/doris-dev:build-env-1.3
注: 针对不同的 Doris 版本,需要下载对应的镜像版本
注意: Doris 0.14.0 版本仍然使用apachedoris/doris-dev:build-env-1.2 编译,之后的代码将使用apachedoris/doris-dev:build-env-1.3
- 运行镜像
- 运行一下命令挂载源码路径并进入容器。
docker run -it -v /local/path/to/.m2:/root/.m2/ -v /local/path/to/doris-src/:/root/doris apachedoris/doris-dev:build-env-1.2
这里我们假设本地 Doris 源码路径为 /local/path/to/doris-src/,并将容器内的 /root/doris 路径挂载到宿主机的源码路径。同时这里将镜像中 maven 的 .m2 目录 /root/.m2/ 挂载到宿主机对应的 .m2 目录 /local/path/to/.m2,以防止每次启动镜像编译时,重复下载 maven 的依赖库。
- 编译 Doris
- 在容器内进入源码目录,执行:
$ sh build.sh
编译完成后,产出文件在 output/ 目录中。
安装与部署
该章节主要介绍了部署 Doris 所需软硬件环境、建议的部署方式、集群扩容缩容,以及集群搭建到运行过程中的常见问题。
在阅读本章节前,请先根据编译文档编译 Doris。
软硬件需求
注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。
- 通常我们建议 10 ~ 100 台左右的机器,来充分发挥 Doris 的性能(其中 3 台部署 FE(HA),剩余的部署 BE)
- 当然,Doris的性能与节点数量及配置正相关。在最少4台机器(一台 FE,三台 BE,其中一台 BE 混部一个 Observer FE 提供元数据备份),以及较低配置的情况下,依然可以平稳的运行 Doris。
- 如果 FE 和 BE 混部,需注意资源竞争问题,并保证元数据目录和数据目录分属不同磁盘。
Broker 部署
Broker 是用于访问外部数据源(如 hdfs、对象存储)的进程。通常,在每台机器上部署一个 broker 实例即可。
网络需求
Doris 各个实例直接通过网络进行通讯。以下表格展示了所有需要的端口
注:
- 当部署多个 FE 实例时,要保证 FE 的 http_port 配置相同。
- 部署前请确保各个端口在应有方向上的访问权限。
IP 绑定
因为有多网卡的存在,或因为安装过 docker 等环境导致的虚拟网卡的存在,同一个主机可能存在多个不同的 ip。当前 Doris 并不能自动识别可用 IP。所以当遇到部署主机上有多个 IP 时,必须通过 priority_networks 配置项来强制指定正确的 IP。
priority_networks 是 FE 和 BE 都有的一个配置,配置项需写在 fe.conf 和 be.conf 中。该配置项用于在 FE 或 BE 启动时,告诉进程应该绑定哪个IP。示例如下:
priority_networks=10.1.3.0/24
这是一种 CIDR 的表示方法。FE 或 BE 会根据这个配置项来寻找匹配的IP,作为自己的 localIP。
注意:当配置完 priority_networks 并启动 FE 或 BE 后,只是保证了 FE 或 BE 自身的 IP 进行了正确的绑定。而在使用 ADD BACKEND 或 ADD FRONTEND 语句中,也需要指定和 priority_networks 配置匹配的 IP,否则集群无法建立。举例:
BE 的配置为:priority_networks=10.1.3.0/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 BE 节点运行时要求系统文件句柄数大于 65535。可以通过 ulimit -n 命令查看。
如需修改,可打开 /etc/security/limits.conf、
在 #End of file 之前加⼊如下两行:
- soft nofile 65535
- hard nofile 65535
集群部署
FE 部署 - 拷贝 FE 部署文件到指定节点
将源码编译生成的 output 下的 fe 文件夹拷贝到 FE 的节点指定部署路径下。 - 配置 FE
- 配置文件为 conf/fe.conf。其中注意:meta_dir:元数据存放位置。默认在 fe/doris-meta/ 下。需手动创建该目录。
- fe.conf 中 JAVA_OPTS 默认 java 最大堆内存为 4GB,建议生产环境调整至 8G 以上。
- 启动FE
sh bin/start_fe.sh —daemon
FE进程启动进入后台执行。日志默认存放在 fe/log/ 目录下。如启动失败,可以通过查看 fe/log/fe.log 或者 fe/log/fe.out 查看错误信息。
- 如需部署多 FE,请参见之后的 “FE 扩容和缩容” 章节。
BE 部署 - 拷贝 BE 部署文件到所有要部署 BE 的节点
将源码编译生成的 output 下的 be 文件夹拷贝到 BE 的节点的指定部署路径下。 - 修改所有 BE 的配置
修改 be/conf/be.conf。主要是配置 storage_root_path:数据存放目录。默认在be/storage下,需要手动创建该目录。多个路径之间使用 ; 分隔(最后一个目录后不要加 ;)。 - 启动 BE
sh bin/start_be.sh —daemon
BE 进程将启动并进入后台执行。日志默认存放在 be/log/ 目录下。如启动失败,可以通过查看 be/log/be.log 或者 be/log/be.out 查看错误信息。
这时,BE 启动后并未加入集群,而是出于等待 FE 心跳的状态,需继续执行之后的步骤。
- 在 FE 中添加所有 BE 节点
BE 节点需要先在 FE 中添加,才可加入集群。可以使用 mysql-client 连接到 FE:
./mysql-client -h host -P port -uroot
其中 host 为 FE 所在节点 ip;port 为 fe/conf/fe.conf 中的 query_port;默认使用 root 账户,无密码登录。
登录后,执行以下命令来添加每一个 BE:
ALTER SYSTEM ADD BACKEND “host:port”;
其中 host 为 BE 所在节点 ip;port 为 be/conf/be.conf 中的 heartbeat_service_port。
- 查看BE状态
使用 mysql-client 连接到 FE,并执行 SHOW PROC ‘/backends’; 查看 BE 运行情况。如一切正常,isAlive 列应为 true。
Broker 部署(可选)
Broker 是独立的进程,独立于 Doris 部署。如果需要从第三方存储系统导入数据,需要部署相应的 Broker,Broker 是无状态的,建议每一个节点都部署一个 Broker。
- 拷贝源码 fs_broker 的 output 目录下的相应 Broker 目录到需要部署的所有节点上。建议和 BE 或者 FE 目录保持同级。
- 修改相应 Broker 配置
在相应 broker/conf/ 目录下对应的配置文件中,可以修改相应配置。
- 启动 Broker
sh bin/start_broker.sh —daemon 启动 Broker。 - 添加 Broker
要让 Doris 的 FE 和 BE 知道 Broker 在哪些节点上,通过 sql 命令添加 Broker 节点列表。
使用 mysql-client 连接启动的 FE,执行以下命令:
ALTER SYSTEM ADD BROKER broker_name “host1:port1”,”host2:port2”,…;
其中 host 为 Broker 所在节点 ip;port 为 Broker 配置文件中的 broker_ipc_port。broker_name 为自定义名称。
- 查看 Broker 状态
使用 mysql-client 连接任一已启动的 FE,执行以下命令查看 Broker 状态:SHOW PROC “/brokers”;
注:在生产环境中,所有实例都应使用守护进程启动,以保证进程退出后,会被自动拉起,如 Supervisord。
扩容缩容
Doris 可以很方便的扩容和缩容 FE、BE、Broker 实例。
FE 扩容和缩容
可以通过将 FE 扩容至 3 个以上节点来实现 FE 的高可用。
用户可以通过 mysql 客户端登陆 Master FE。通过:
SHOW PROC ‘/frontends’;
来查看当前 FE 的节点情况。
FE 节点的扩容和缩容过程,不影响当前系统运行。
- 增加 FE 节点
FE 分为 Follower 和 Observer 两种角色。其中多个 Follower 行程可选组组,自动选择出一个作为 Leader。一个集群,只能有一个 Leader,其余为 Follower 和 Observer。如果 Leader 宕机,则剩下的 Follower 会自动选出新的 Leader,保证写入高可用。Observer 同步 Leader 的数据,但是不参加选举。如果只部署一个 FE,则 FE 默认就是 Leader。
第一个启动的 FE 自动成为 Leader。在此基础上,可以添加若干 Follower 和 Observer。
添加 Follower 或 Observer。使用 mysql-client 连接到已启动的 FE,并执行:
ALTER SYSTEM ADD FOLLOWER “host:port”;
或
ALTER SYSTEM ADD OBSERVER “host:port”;
其中 host 为 Follower 或 Observer 所在节点 ip,port 为其配置文件 fe.conf 中的 edit_log_port。
配置及启动 Follower 或 Observer。Follower 和 Observer 的配置同 Leader 的配置。第一次启动时,需执行以下命令:
./bin/start_fe.sh —helper host:port —daemon
其中 host 为 Leader 所在节点 ip, port 为 Leader 的配置文件 fe.conf 中的 edit_log_port。—helper 参数仅在 follower 和 observer 第一次启动时才需要。
查看 Follower 或 Observer 运行状态。使用 mysql-client 连接到任一已启动的 FE,并执行:SHOW PROC ‘/frontends’; 可以查看当前已加入集群的 FE 及其对应角色。
FE 扩容注意事项:
- Follower FE(包括 Leader)的数量必须为奇数,建议最多部署 3 个组成高可用(HA)模式即可。
- 当 FE 处于高可用部署时(1个 Leader,2个 Follower),我们建议通过增加 Observer FE 来扩展 FE 的读服务能力。当然也可以继续增加 Follower FE,但几乎是不必要的。
- 通常一个 FE 节点可以应对 10-20 台 BE 节点。建议总的 FE 节点数量在 10 个以下。而通常 3 个即可满足绝大部分需求。
- helper 不能指向 FE 自身,必须指向一个或多个已存在并且正常运行中的 Master/Follower FE。
- 删除 FE 节点
使用以下命令删除对应的 FE 节点:
ALTER SYSTEM DROP FOLLOWER[OBSERVER] “fe_host:edit_log_port”;
FE 缩容注意事项:
- 删除 Follower FE 时,确保最终剩余的 Follower(包括 Leader)节点为奇数。
- 不可删除当前 Leader FE 节点。如需删除 Leader,请先将 Leader 节点服务杀掉,等自动选出新的 Leader 后,在通过命令删除这个节点。
BE 扩容和缩容
用户可以通过 mysql-client 登陆 Leader FE。通过:
SHOW PROC ‘/backends’;
来查看当前 BE 的节点情况。
BE 节点的扩容和缩容过程,不影响当前系统运行以及正在执行的任务,并且不会影响当前系统的性能。数据均衡会自动进行。根据集群现有数据量的大小,集群会在几个小时到1天不等的时间内,恢复到负载均衡的状态。
- 增加 BE 节点
BE 节点的增加方式同 BE 部署 一节中的方式,通过 ALTER SYSTEM ADD BACKEND 命令增加 BE 节点。
BE 扩容注意事项:
BE 扩容后,Doris 会自动根据负载情况,进行数据均衡,期间不影响使用。
- 删除 BE 节点
删除 BE 节点有两种方式:DROP 和 DECOMMISSION
DROP 语句如下:
ALTER SYSTEM DROP BACKEND “be_host:be_heartbeat_service_port”;
注意:DROP BACKEND 会直接删除该 BE,并且其上的数据将不能再恢复!!!所以我们强烈不推荐使用 DROP BACKEND 这种方式删除 BE 节点。当你使用这个语句时,会有对应的防误操作提示。
DECOMMISSION 语句如下:
ALTER SYSTEM DECOMMISSION BACKEND "be_host:be_heartbeat_service_port";
DECOMMISSION 命令说明:
- 该命令用于安全删除 BE 节点。命令下发后,Doris 会尝试将该 BE 上的数据向其他 BE 节点迁移,当所有数据都迁移完成后,Doris 会自动删除该节点。
- 该命令是一个异步操作。执行后,可以通过 SHOW PROC ‘/backends’; 看到该 BE 节点的 isDecommission 状态为 true。表示该节点正在进行下线。
- 该命令不一定执行成功。比如剩余 BE 存储空间不足以容纳下线 BE 上的数据,或者剩余机器数量不满足最小副本数时,该命令都无法完成,并且 BE 会一直处于 isDecommission 为 true 的状态。
- DECOMMISSION 的进度,可以通过 SHOW PROC ‘/backends’; 中的 TabletNum 查看,如果正在进行,TabletNum 将不断减少。
- 该操作可以通过:
CANCEL DECOMMISSION BACKEND “be_host:be_heartbeat_service_port”;
命令取消。取消后,该 BE 上的数据将维持当前剩余的数据量。后续 Doris 重新进行负载均衡
Broker 扩容缩容
Broker 实例的数量没有硬性要求。通常每台物理机部署一个即可。Broker 的添加和删除可以通过以下命令完成:
ALTER SYSTEM ADD BROKER broker_name “broker_host:broker_ipc_port”;
ALTER SYSTEM DROP BROKER broker_name “broker_host:broker_ipc_port”;
ALTER SYSTEM DROP ALL BROKER broker_name;
Broker 是无状态的进程,可以随意启停。当然,停止后,正在其上运行的作业会失败,重试即可。
集群升级
Palo 的升级方式和 Apache Doris 完全一致。用户也可以参考 Apache Doris 官网文档 进行升级。
本章节说明用户下载新版本的二进制包后的升级步骤。
注1:升级是在原集群上升级,无需重做数据。
注2:通常情况下,集群升级只需升级 FE、BE、Broker 进程。
注3:升级流程须严格按照 BE -> FE -> Broker 的顺序进行升级。
升级步骤
这里我们以从 0.14.13.1 版本升级到 0.15.1-rc03 版本为例。
- 下载二进制包并解压
tar xzf PALO-0.15.1-rc03-binary.tar.gz
解压后的目录结构如下:
├── PALO-0.15.1-rc03-binary
├── apache_hdfs_broker
├── auditloader.zip
├── be
├── doris-flink-1.0-SNAPSHOT.jar
├── doris-spark-1.0.0-SNAPSHOT.jar
├── fe
└── udf
- 升级 BE
这里我们假设 BE 的安装路径为 /path/to/be/。BE 节点分别为 hostA、hostB、hostC。
通过以上步骤将所有 BE 节点升级完成后。可以进一步先观察集群运行情况,再继续升级 FE 节点。
- 首先我们进入到 hostA 的 /path/to/be/ 目录下,通过 sh bin/stop_be.sh 停止 BE 进程。
- 将 /path/to/be/lib/ 目录中的 palo_be 和 meta_tool 文件替换为新版本中的 PALO-0.15.1-rc03-binary/be/lib/ 目录下的同名文件。
- 通过 sh bin/start_be.sh —daemon 启动 BE 进程。
- 此时,我们已经完成 hostA 上 BE 节点的更新。此时我们可以先观察集群运行是否正常。如果一切正常,则可以重复步骤 1-3 来升级其余的 2 个BE节点。(Palo 保证新版本的向前兼容性,所以新版本原则上是可以和旧版本同时运行的。)
- 升级 FE
- FE 节点的升级顺序为:Observer -> 非 Master FE 节点 -> Master FE 节点
FE 的节点类型和是否是 Master,可以通过 show frontends 语句结果中的 Role 和 IsMaster 列获取。
如果只部署了一个 FE 节点,强烈建议先按照 Doris 官方升级文档 中的 测试 FE 元数据兼容性 一节进行元数据兼容性验证。
通过以上步骤将所有 FE 节点升级完成后。则 Palo 的主进程(FE、BE)都已升级完成。
- 进入 FE 的安装路径 /path/to/fe/,通过 sh bin/stop_fe.sh 停止 FE 进程。
- 将 /path/to/fe/lib/ 目录整体替换为新版本中的 PALO-0.15.1-rc03-binary/fe/lib/ 目录。
- 通过 sh bin/start_fe.sh —daemon 启动 FE 进程。
- 此时,我们已经完这个 FE 节点的更新。此时我们可以通过 MySQL client 连接这个 FE 节点进行一些查询或导入操作,来观察集群是否正常。如果一切正常,则可以重复步骤 1-3 来升级其余的 FE 节点。
- 升级 Broker
如果用户部署了 Broker 进程,则可以按照以下步骤进行升级。
Broker 为无状态进程,全部升级即可。
通过以上步骤将所有 Broker 节点升级完成即可。
- 进入 Broker 的安装路径 /path/to/broker/,通过 sh bin/stop_broker.sh 停止 Broker 进程。
- 将 /path/to/broker/lib/ 目录整体替换为新版本中的 PALO-0.15.1-rc03-binary/apache_hdfs_broker/lib/ 目录。
- 通过 sh bin/start_broker.sh —daemon 启动 Broker 进程。
- 此时,我们已经完这个 Broker 节点的更新。重复步骤 1-3 来升级其余的 Broker 节点。
- 测试升级结果
通过 MySQL client 连接任意 FE 节点进行业务操作,观察业务运行情况即可。
关于版本回滚
因为数据库是一个有状态的服务,所以在大多数情况下,Palo/Doris 无法支持版本回滚(版本降级)。在某些情况下,可以支持 3 位或 4 位版本的回滚,但不会支持 2 为版本的回滚。
所以建议通过先升级部分节点并观察业务运行情况的方式(灰度升级)来降低升级风险。
如有回滚需求,请事先联系 Palo/Doris 开发人员进行确认。
非法的回滚操作可能导致数据丢失和损坏。
来源: 数据基石
作者: 毛凯民