数据仓库Palo Doris版是基于Apache Doris(百度自研的分析型数据库引擎)构建的企业级MPP云数据仓库,Palo Doris版全面兼容MySQL协议,提供快捷查询UI,易于使用;支持高并发低延时查询,支持PB级以上的超大数据集,可有效地支持在线实时数据分析。
废话不多说,直接开更!!!
获取安装包
Doris 的安装包即编译后产生的二进制文件。主要包括 FE、BE、BROKER 以及其他扩展程序。
用户可以直接使用预编译好的安装包,或者自行从源码编译获取。
获取预编译安装包
预编译安装包是由百度 Doris 开发团队提供的基于 Doris 三位版本的预编译版本。该版本已在 centos7 上验证运行通过,用户可以下载对应版本后,直接解压运行。
下载地址请前往 预编译版本 下载。
从源码编译
用户也可以自行从源码编译获取安装包。
因为 Doris 源码编译依赖大量第三方组件库,而在不同系统环境下编译这些第三方组件库可能会产生诸多问题。因此这里我们仅介绍通过 Docker 编译镜像
进行 Doris 源码编译的方式。如需自行编译第三方组件库,请前往 本地编译 文档参考。
说明:Docker 编译镜像仅仅是 Doris 源码编译环境,并不是 Doris 的运行环境。镜像中已经内置了编译所需的所有工具和已编译好的第三方依赖库。基于镜像编译产出的安装包可以部署运行于物理机、虚机、Docker等各种环境中。
1. 下载 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。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 的依赖库。在容器内进入源码目录,执行:
$ sh build.sh
编译完成后,产出文件在
output/
目录中。
2. 下载 Docker 编译环境镜像
3. 运行镜像
4. 编译 Doris
安装与部署
该章节主要介绍了部署 Doris 所需软硬件环境、建议的部署方式、集群扩容缩容,以及集群搭建到运行过程中的常见问题。
在阅读本章节前,请先根据编译文档编译 Doris。
软硬件需求
Linux 操作系统版本需求
软件需求
开发测试环境
生产环境
注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
启动FE
sh bin/start_fe.sh --daemon
FE进程启动进入后台执行。日志默认存放在 fe/log/ 目录下。如启动失败,可以通过查看 fe/log/fe.log 或者 fe/log/fe.out 查看错误信息。
如需部署多 FE,请参见之后的 "FE 扩容和缩容" 章节。
1. 配置文件为 conf/fe.conf。其中注意:meta_dir
:元数据存放位置。默认在 fe/doris-meta/ 下。需手动创建该目录。
2. fe.conf 中 JAVA_OPTS 默认 java 大堆内存为 4GB,建议生产环境调整至 8G 以上。
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 节点的扩容和缩容过程,不影响当前系统运行。
1. 增加 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 扩容注意事项:
1. Follower FE(包括 Leader)的数量必须为奇数,建议多部署 3 个组成高可用(HA)模式即可。
2. 当 FE 处于高可用部署时(1个 Leader,2个 Follower),我们建议通过增加 Observer FE 来扩展 FE 的读服务能力。当然也可以继续增加 Follower FE,但几乎是不必要的。
3. 通常一个 FE 节点可以应对 10-20 台 BE 节点。建议总的 FE 节点数量在 10 个以下。而通常 3 个即可满足绝大部分需求。
4. helper 不能指向 FE 自身,必须指向一个或多个已存在并且正常运行中的 Master/Follower FE。
2. 删除 FE 节点
使用以下命令删除对应的 FE 节点:
ALTER SYSTEM DROP FOLLOWER[OBSERVER] "fe_host:edit_log_port";
FE 缩容注意事项:
1. 删除 Follower FE 时,确保终剩余的 Follower(包括 Leader)节点为奇数。
2. 不可删除当前 Leader FE 节点。如需删除 Leader,请先将 Leader 节点服务杀掉,等自动选出新的 Leader 后,在通过命令删除这个节点。
BE 扩容和缩容
用户可以通过 mysql-client 登陆 Leader FE。通过:
SHOW PROC '/backends';
来查看当前 BE 的节点情况。
BE 节点的扩容和缩容过程,不影响当前系统运行以及正在执行的任务,并且不会影响当前系统的性能。数据均衡会自动进行。根据集群现有数据量的大小,集群会在几个小时到1天不等的时间内,恢复到负载均衡的状态。
3. 增加 BE 节点
BE 节点的增加方式同 BE 部署 一节中的方式,通过 ALTER SYSTEM ADD BACKEND
命令增加 BE 节点。
BE 扩容注意事项:
BE 扩容后,Doris 会自动根据负载情况,进行数据均衡,期间不影响使用。
4. 删除 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 命令说明:
1. 该命令用于安全删除 BE 节点。命令下发后,Doris 会尝试将该 BE 上的数据向其他 BE 节点迁移,当所有数据都迁移完成后,Doris 会自动删除该节点。
2. 该命令是一个异步操作。执行后,可以通过
SHOW PROC '/backends';
看到该 BE 节点的 isDecommission 状态为 true。表示该节点正在进行下线。3. 该命令不一定执行成功。比如剩余 BE 存储空间不足以容纳下线 BE 上的数据,或者剩余机器数量不满足小副本数时,该命令都无法完成,并且 BE 会一直处于 isDecommission 为 true 的状态。
4. DECOMMISSION 的进度,可以通过
SHOW PROC '/backends';
中的 TabletNum 查看,如果正在进行,TabletNum 将不断减少。5. 该操作可以通过:
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 版本为例。
1. 下载二进制包并解压
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
2. 升级 BE
这里我们假设 BE 的安装路径为 /path/to/be/
。BE 节点分别为 hostA、hostB、hostC。
通过以上步骤将所有 BE 节点升级完成后。可以进一步先观察集群运行情况,再继续升级 FE 节点。
1. 首先我们进入到 hostA 的 /path/to/be/
目录下,通过 sh bin/stop_be.sh
停止 BE 进程。
2. 将 /path/to/be/lib/
目录中的 palo_be
和 meta_tool
文件替换为新版本中的 PALO-0.15.1-rc03-binary/be/lib/
目录下的同名文件。
3. 通过 sh bin/start_be.sh --daemon
启动 BE 进程。
4. 此时,我们已经完成 hostA 上 BE 节点的更新。此时我们可以先观察集群运行是否正常。如果一切正常,则可以重复步骤 1-3 来升级其余的 2 个BE节点。(Palo 保证新版本的向前兼容性,所以新版本原则上是可以和旧版本同时运行的。)
3. 升级 FE
1. FE 节点的升级顺序为:Observer -> 非 Master FE 节点 -> Master FE 节点
FE 的节点类型和是否是 Master,可以通过 show frontends
语句结果中的 Role
和 IsMaster
列获取。
如果只部署了一个 FE 节点,强烈建议先按照 Doris 官方升级文档 中的 测试 FE 元数据兼容性 一节进行元数据兼容性验证。
通过以上步骤将所有 FE 节点升级完成后。则 Palo 的主进程(FE、BE)都已升级完成。
2. 进入 FE 的安装路径 /path/to/fe/
,通过 sh bin/stop_fe.sh
停止 FE 进程。
3. 将 /path/to/fe/lib/
目录整体替换为新版本中的 PALO-0.15.1-rc03-binary/fe/lib/
目录。
4. 通过 sh bin/start_fe.sh --daemon
启动 FE 进程。
5. 此时,我们已经完这个 FE 节点的更新。此时我们可以通过 MySQL client 连接这个 FE 节点进行一些查询或导入操作,来观察集群是否正常。如果一切正常,则可以重复步骤 1-3 来升级其余的 FE 节点。
4. 升级 Broker
如果用户部署了 Broker 进程,则可以按照以下步骤进行升级。
Broker 为无状态进程,全部升级即可。
通过以上步骤将所有 Broker 节点升级完成即可。
1. 进入 Broker 的安装路径 /path/to/broker/
,通过 sh bin/stop_broker.sh
停止 Broker 进程。
2. 将 /path/to/broker/lib/
目录整体替换为新版本中的 PALO-0.15.1-rc03-binary/apache_hdfs_broker/lib/
目录。
3. 通过 sh bin/start_broker.sh --daemon
启动 Broker 进程。
4. 此时,我们已经完这个 Broker 节点的更新。重复步骤 1-3 来升级其余的 Broker 节点。
5. 测试升级结果
通过 MySQL client 连接任意 FE 节点进行业务操作,观察业务运行情况即可。
关于版本回滚
因为数据库是一个有状态的服务,所以在大多数情况下,Palo/Doris 无法支持版本回滚(版本降级)。在某些情况下,可以支持 3 位或 4 位版本的回滚,但不会支持 2 为版本的回滚。
所以建议通过先升级部分节点并观察业务运行情况的方式(灰度升级)来降低升级风险。
如有回滚需求,请事先联系 Palo/Doris 开发人员进行确认。
非法的回滚操作可能导致数据丢失和损坏。
来源 https://www.modb.pro/db/148478