数据仓库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 版本源码并进行签名校验。
- 2. 下载 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 版本,需要下载对应的镜像版本
镜像版本 | commit id | doris 版本 |
apachedoris/doris-dev:build-env-1.2 | 4ef5a8c | 0.12.x, 0.13 |
apachedoris/doris-dev:build-env-1.3 | ad67dd3 | 0.14.x 或更新版本 |
注意: Doris 0.14.0 版本仍然使用apachedoris/doris-dev:build-env-1.2 编译,之后的代码将使用apachedoris/doris-dev:build-env-1.3
- 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 的依赖库。
- 4. 编译 Doris
- 在容器内进入源码目录,执行:
$ sh build.sh
- 编译完成后,产出文件在
output/
目录中。
安装与部署
该章节主要介绍了部署 Doris 所需软硬件环境、建议的部署方式、集群扩容缩容,以及集群搭建到运行过程中的常见问题。
在阅读本章节前,请先根据编译文档编译 Doris。
软硬件需求
Linux 操作系统版本需求
Linux 系统 | 版本 |
CentOS | 7.1 及以上 |
Ubuntu | 16.04 及以上 |
软件需求
软件 | 版本 |
Java | 1.8 及以上 |
开发测试环境
模块 | CPU | 内存 | 磁盘 | 网络 | 实例数量 |
Frontend | 8核+ | 8GB+ | SSD 或 SATA,10GB+ * | 千兆网卡 | 1 |
Backend | 8核+ | 16GB+ | SSD 或 SATA,50GB+ * | 千兆网卡 | 1-3 * |
生产环境
模块 | CPU | 内存 | 磁盘 | 网络 | 实例数量(最低要求) |
Frontend | 16核+ | 64GB+ | SSD 或 RAID 卡,100GB+ * | 万兆网卡 | 1-5 * |
Backend | 16核+ | 64GB+ | SSD 或 SATA,100G+ * | 万兆网卡 | 10-100 * |
注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 各个实例直接通过网络进行通讯。以下表格展示了所有需要的端口
实例名称 | 端口名称 | 默认端口 | 通讯方向 | 说明 |
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 上的 http server 端口 |
FE | rpc_port | 9020 | BE --> FE, FE <--> FE | FE 上的 thrift server 端口,每个fe的配置需要保持一致 |
FE | query_port | 9030 | 用户 | 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 配置相同。
- 部署前请确保各个端口在应有方向上的访问权限。
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
- 1. 配置文件为 conf/fe.conf。其中注意:
meta_dir
:元数据存放位置。默认在 fe/doris-meta/ 下。需手动创建该目录。 - 2. 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。