1 Doris编译
Apache Doris提供直接可以部署的版本压缩包:https://cloud.baidu.com/doc/PALO/s/Ikivhcwb5
也可以自行编译压缩包后使用(推荐)
1.1 使用 Docker 开发镜像编译(推荐)
这个是官方文档推荐的,可以非常方便顺利的编译源码,如果需要快速部署的,可以使用这种方式。这种方式的优点就是不用配置环境变量,也不用考虑各种版本问题,进入开发镜像系统后直接下载 doris 源码编译即可。
首先需要安装 Docker,Docker 在 Linux 下安装比较简单,这里不做介绍。
启动了 Docker 服务(systemctl status docker)以后,我们直接拉取镜像,开始编译 Doris。
下载Doris镜像
拉取Doris官方提供的Docker镜像,目前可用版本有:build-env、build-env-1.1、build-env-1.2
docker pull apache/doris:build-env-for-0.15.0
查看Docker镜像
docker images
注意:
针对不同的 Doris 版本,需要下载对应的镜像版本。从 Apache Doris 0.15 版本起,后续镜像版本号将与 Doris 版本号统一。
运行镜像
将容器中的maven下载的包保存到宿主机本地指定的文件中,避免重复下载,同时会将编译的Doris文件保存到宿主机本地指定的文件,方便部署
docker run -it -v /u01/.m2:/root/.m2 -v /u01/incubator-doris-DORIS-0.15-release/:/root/incubator-doris-DORIS-0.15-release/ apache/doris:build-env-for-0.15.0
开启之后, 就在容器内了
下载Doris的安装包
进入docker容器
cd /opt
wget https://mirrors.tuna.tsinghua.edu.cn/apache/doris/0.15.0-incubating/apache-doris-0.15.0-incubating-src.tar.gz
解压安装
tar -zxvf apache-doris-0.15.0-incubating-src.tar.gz
开始编译
cd apache-doris-0.15.0-incubating-src
sh build.sh
注意:编译使用的jdk版本需要与部署环境的相同,不然会报异常
编译后导出到服务器
编译后文件在output目录中
#docker cp 容器:docker路径 本地路径
docker cp mystifying_swanson:/opt/apache-doris-0.15.0-incubating-src/output /home/
2 安装部署
Doris 作为一款开源的 MPP 架构 OLAP 数据库,能够运行在绝大多数主流的商用服务器上。为了能够充分运用 MPP 架构的并发优势,以及 Doris 的高可用特性,我们建议 Doris 的部署遵循以下需求:
- Linux 操作系统版本需求
Linux系统 | 版本 |
Centos | 7.1及以上 |
Ubuntu | 16.04及以上 |
- 软件需求
软件 | 版本 |
Java | 1.8及以上 |
GCC | 7.3及以上 |
- 开发测试环境
模块 | 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,100GB+ * | 万兆网卡 | 10-100 * |
注意:
- FE 的磁盘空间主要用于存储元数据,包括日志和 image。通常从几百 MB 到几个 GB 不等。
- BE 的磁盘空间主要用于存放用户数据,总磁盘空间按用户总数据量 * 3(3副本)计算,然后再预留额外 40% 的空间用作后台 compaction 以及一些中间数据的存放。
- 一台机器上可以部署多个 BE 实例,但是只能部署一个 FE。如果需要 3 副本数据,那么至少需要 3 台机器各部署一个 BE 实例(而不是1台机器部署3个BE实例)。多个FE所在服务器的时钟必须保持一致(允许最多5秒的时钟偏差)
- 测试环境也可以仅适用一个 BE 进行测试。实际生产环境,BE 实例数量直接决定了整体查询延迟。
- 所有部署节点关闭 Swap。
注意: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 配置相同。
- 部署前请确保各个端口在应有方向上的访问权限
3 资源规划
node1 | node2 | node3 |
FE(Leader) | FE(Follower) | FE(Follower) |
BE | BE | BE |
BROKER | BROKER | BROKER |
注意:因测试环境资源有限,FE和BE节点部署在相同服务器,生产环境建议分开
4 启动FE
4.1 配置环境变量
(1)拷贝 FE 部署文件到指定节点(node1)
将源码编译生成的 output 的fe文件夹拷贝到 FE 的节点/opt/apache-doris-0.15.0(路径自行选择)路径下
cp -r fe /opt/apache-doris-0.15.0/
(2)配置环境变量
vim /etc/profile
#DORIS_HOME
export DORIS_HOME=/opt/apache-doris-0.15.0
export PATH=:$DORIS_HOME/bin:$PATH
重新加载环境变量:
source /etc/profile
4.2 创建doris-mate
配置文件为 fe/conf/fe.conf。其中注意:meta_dir:元数据存放位置。默认在 fe/doris-meta/ 下。
需手动创建该目录
mkdir -p /opt/apache-doris-0.15.0/fe/doris-meta
配置fe/conf/fe.conf配置文件
vim conf/fe.conf
meta_dir = /opt/apache-doris-0.15.0/fe/doris-meta
4.3 修改fe.conf中的JAVA_OPTS
fe.conf 中 JAVA_OPTS 默认 java 最大堆内存为 4GB,建议生产环境调整至 8G 以上
4.4 修改ip绑定(可选)
如果机器有多个ip, 比如内网外网, 虚拟机docker等, 需要进行ip绑定, 以便在配置集群时可以正确识别
修改fe服务的配置文件(ip地址根据环境实际ip进行修改)
vim /opt/apache-doris-0.15.0/fe/conf/fe.conf
priority_networks = 192.168.222.0/24
4.5 将安装目录分发到另外两台节点
scp -r /opt/apache-doris-0.15.0/ 192.168.222.144:/opt/
scp -r /opt/apache-doris-0.15.0/ 192.168.222.145:/opt/
4.6 启动FE
三台机器分别启动
sh /opt/apache-doris-0.15.0/fe/bin/start_fe.sh --daemon
日志默认存放在 fe/log/ 目录下
5 配置BE
5.1 配置be节点
拷贝BE部署文件到指定节点(node1)
将源码编译生成的 output 下的 be 文件夹拷贝到 BE 的节点/opt/apache-doris-0.15.0路径下
cp -r be /opt/apache-doris-0.15.0/
5.2 创建storage_root_path, 并配置be.conf
配置文件为 be/conf/be.conf。主要是配置 storage_root_path:数据存放目录。默认在be/storage下,需要手动创建该目录。多个路径之间使用 ; 分隔(最后一个目录后不要加 ;)
mkdir -p /opt/apache-doris-0.15.0/be/storage1 /opt/apache-doris-0.15.0/be/storage2
进入be下修改be.conf配置文件
vim conf/be.conf
storage_root_path = /opt/apache-doris-0.15.0/be/storage1,10;/opt/apache-doris-0.15.0/be/storage2
6 添加BE
6.1使用mysql连接
删除操作系统自带的mysql库文件(node1)
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.65-1.el7.x86_64
安装mysql-client
下载mysql-client的rpm上传到服务器节点/opt/mysql-client,当然也可以用yum命令安装
进入/opt/mysql-client进行安装
rpm -ivh *
连接node1服务器上的mysql实例(默认端口9030,默认没有密码)
mysql -uroot -h 192.168.222.143 -P 9030
登陆后,可以通过以下命令修改 root 密码
SET PASSWORD FOR 'root' = PASSWORD('123456');
使用Navicat客户端登录
6.2 添加be
BE 节点需要先在 FE 中添加,才可加入集群(node1)
mysql -uroot -h 192.168.222.143 -P 9030 -p
输入密码:123456
登录后添加BE节点port为be上的heartbeat_service_port端口,默认9050
ALTER SYSTEM ADD BACKEND "192.168.222.143:9050";
ALTER SYSTEM ADD BACKEND "192.168.222.144:9050";
ALTER SYSTEM ADD BACKEND "192.168.222.145:9050";
查看BE状态,alive必须为true
SHOW PROC '/backends';
查看BE运行情况。如一切正常,isAlive列应为 true,现阶段都是异常,BE还未启动。
6.3 修改可打开文件数
命令如下:
ulimit -n 65535
上述方式在重启系统后失效
或者修改配置文件: /etc/security/limits.conf, 添加
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
这种方法需要重启机器才能生效(所有BE节点都需要进行配置)
否则启动不成功, 日志报错
6.4 修改ip绑定
如果机器有多个ip, 比如内网外网, 虚拟机docker等, 需要进行ip绑定, 以便在配置集群时可以正确识别
修改fe服务的配置文件(ip地址根据环境实际ip进行修改)
vim /opt/apache-doris-0.15.0/be/conf/be.conf
priority_networks = 192.168.222.0/24
6.5 将安装目录分发到另外两台节点
scp -r /opt/apache-doris-0.15.0/be 192.168.222.144:/opt/apache-doris-0.15.0
scp -r /opt/apache-doris-0.15.0/be 192.168.222.145:/opt/apache-doris-0.15.0
6.6 启动BE
三台机器分别启动
sh /opt/apache-doris-0.15.0/be/bin/start_be.sh --daemon
日志默认存放在 fe/log/ 目录下
6.7 查看FE 和 BE
- 在mysql终端中
show proc '/frontends';
show proc '/backends';
查看 BE 运行情况。如一切正常,isAlive 列应为 true
- 通过前端界面访问FE
http://192.168.222.143:8030/login
注意:密码和mysql设置的密码一样
http://192.168.222.143:8030/system?path=//frontends
- 通过前端界面访问BE:
http://192.168.222.143:8030/backend
http://192.168.52.143:8030/system?path=//backends
6.8 添加FS_BROKER(可选)
BROKER以插件的形式,独立于Doris的部署,建议每个PE和BE节点都部署一个Broker,Broker是用于访问外部数据源的进程,默认是HDFS,上传编译好的hdfs_broker
6.8.1 配置broker节点
拷贝源码 fs_broker 的 output 目录下的相应 Broker 目录到需要部署的所有节点上。建议和 BE 或者 FE 目录保持同级。
进入之前的docker编译fs_broker
sh /opt/apache-doris-0.15.0-incubating-src/fs_brokers/apache_hdfs_broker/build.sh
拷贝output目录到本地节点
docker cp 9330fa7d63d6:/opt/apache-doris-0.15.0-incubating-src/fs_brokers/apache_hdfs_broker/output/apache_hdfs_broker /home/
6.8.2 将安装目录分发到另外两台节点
进入/opt/apache-doris-0.15.0目录
scp -r apache_hdfs_broker/ 192.168.222.143:/opt/apache-doris-0.15.0/
scp -r apache_hdfs_broker/ 192.168.222.144:/opt/apache-doris-0.15.0/
scp -r apache_hdfs_broker/ 192.168.222.144:/opt/apache-doris-0.15.0/
6.8.3 启动 Broker
三台机器分别启动
sh /opt/apache-doris-0.15.0/apache_hdfs_broker/bin/start_broker.sh --daemon
6.8.4 添加broker节点
使用mysql客户端访问pe,添加broker节点
mysql -uroot -h 192.168.222.143 -P 9030 -p
输入密码:123456
要让 Doris 的 FE 和 BE 知道 Broker 在哪些节点上,通过 sql 命令添加 Broker 节点列表
ALTER SYSTEM ADD BROKER broker_name "192.168.222.143:8000","192.168.222.144:8000","192.168.222.145:8000";
其中 host 为 Broker 所在节点 ip;port 为 Broker 配置文件中的 broker_ipc_port。
SHOW PROC "/brokers";
注:在生产环境中,所有实例都应使用守护进程启动,以保证进程退出后,会被自动拉起,如 Supervisor (opens new window)。如需使用守护进程启动,在 0.9.0 及之前版本中,需要修改各个 start_xx.sh 脚本,去掉最后的 & 符号。从 0.10.0 版本开始,直接调用 sh start_xx.sh 启动即可。
6.9 扩容缩容
Doris 可以很方便的扩容和缩容 FE、BE、Broker 实例
6.9.1 FE 扩容和缩容
可以通过将 FE 扩容至 3 个以上节点来实现 FE 的高可用。
FE 节点的扩容和缩容过程,不影响当前系统运行
增加 FE 节点
FE 分为 Leader,Follower 和 Observer 三种角色。 默认一个集群,只能有一个 Leader,可以有多个 Follower 和 Observer。其中 Leader 和 Follower 组成一个 Paxos 选择组,如果 Leader 宕机,则剩下的 Follower 会自动选出新的 Leader,保证写入高可用。Observer 同步 Leader 的数据,但是不参加选举。如果只部署一个 FE,则 FE 默认就是 Leader。
第一个启动的 FE 自动成为 Leader。在此基础上,可以添加若干 Follower 和 Observer。
添加 Follower 或 Observer。使用 mysql-client 连接到已启动的 FE,并执行:
ALTER SYSTEM ADD FOLLOWER "ip:port";
或
ALTER SYSTEM ADD OBSERVER "ip: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)节点为奇数
操作演示
使用mysql客户端访问pe,添加broker节点
mysql -uroot -h 192.168.222.143 -P 9030 -p
输入密码:123456
将node2节点添加为FOLLOWER
ALTER SYSTEM ADD FOLLOWER "192.168.222.144:9010";
将node3节点添加为OBSERVER
ALTER SYSTEM ADD OBSERVER "192.168.222.145:9010";
分别停止三台节点的fe服务(三台节点依次停止)
/opt/apache-doris-0.15.0/fe/bin/stop_fe.sh
启动node1节点
sh /opt/apache-doris-0.15.0/fe/bin/start_fe.sh --daemon
启动node2节点(指定leader节点的位置)
sh /opt/apache-doris-0.15.0/fe/bin/start_fe.sh --helper 192.168.222.143:9010 --daemon
启动node3节点(指定leader节点的位置)
sh /opt/apache-doris-0.15.0/fe/bin/start_fe.sh --helper 192.168.222.143:9010 --daemon
查看fe节点列表
SHOW PROC '/frontends';
6.9.2 BE 扩容和缩容
用户可以通过 mysql 客户端登陆 Master FE。
BE 节点的扩容和缩容过程,不影响当前系统运行以及正在执行的任务,并且不会影响当前系统的性能。数据均衡会自动进行。根据集群现有数据量的大小,集群会在几个小时到1天不等的时间内,恢复到负载均衡的状态。集群负载情况,可以参见 Tablet 负载均衡文档。
增加 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 重新进行负载均衡
6.9.3 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 是无状态的进程,可以随意启停。当然,停止后,正在其上运行的作业会失败,重试即可。