部署Apache Doris

官方文档:https://doris.apache.org/zh-CN/installing/compilation.html

一、编译

使用 Docker 开发镜像编译(推荐)

1.拉取镜像
#下载 Docker 最新主干版本代码,会随主干版本不断更新。
$ docker pull apache/incubator-doris:build-env-ldb-toolchain-latest

#下载对应的镜像版本
$ docker pull apache/incubator-doris:build-env-for-0.15.0
2.检查镜像下载完成
$ docker images
REPOSITORY               TAG                    IMAGE ID       CREATED        SIZE
apache/incubator-doris   build-env-for-0.15.0   e568f7b2e1d8   3 months ago   3.54GB
3.运行镜像
$ mkdir -p /data/apps/apache-doris
$ docker run -it -v /data/apps/apache-doris/.m2:/root/.m2 -v /data/apps/apache-doris/incubator-doris-DORIS-0.15.0-release/:/root/incubator-doris-DORIS-0.15.0-release/ apache/incubator-doris:build-env-for-0.15.0

注:将镜像中 maven 的 .m2 目录挂载到宿主机目录,以防止每次启动镜像编译时,重复下载 maven 的依赖库。

4.下载源码

启动镜像后,你应该已经处于容器内。可以通过以下命令下载 Doris 源码(已挂载本地源码目录则不用)

[root@0fd6fc1093fd ~]# cd incubator-doris-DORIS-0.15.0-release/
[root@0fd6fc1093fd incubator-doris-DORIS-0.15.0-release]# wget https://dist.apache.org/repos/dist/dev/incubator/doris/xxx.tar.gz
or
[root@0fd6fc1093fd incubator-doris-DORIS-0.15.0-release]# git clone https://github.com/apache/incubator-doris.git
5.编译 Doris
$ cd /root/incubator-doris-DORIS-0.15.0-release/apache-doris-0.15.0-incubating-src/

$ sh build.sh

#如果你是第一次使用 build-env-for-0.15.0 或之后的版本,第一次编译的时候要使用如下命令:
$ sh build.sh --clean --be --fe --ui

编译完成后,产出文件在 output/ 目录中。

注意:

build-env-for-0.15.0 版本镜像升级了 thrift(0.9 -> 0.13),需要通过 --clean 命令强制使用新版本的 thrift 生成代码文件,否则会出现不兼容的代码。

二、软硬件需求

Doris 作为一款开源的 MPP 架构 OLAP 数据库,能够运行在绝大多数主流的商用服务器上。为了能够充分运用 MPP 架构的并发优势,以及 Doris 的高可用特性,我们建议 Doris 的部署遵循以下需求:

硬件需求

  • 开发测试环境
模块 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:

1.FE 的磁盘空间主要用于存储元数据,包括日志和 image。通常从几百 MB 到几个 GB 不等。

2.BE 的磁盘空间主要用于存放用户数据,总磁盘空间按用户总数据量 * 3(3副本)计算,然后再预留额外 40% 的空间用作后台 compaction 以及一些中间数据的存放。

3.一台机器上可以部署多个 BE 实例,但是只能部署一个 FE。如果需要 3 副本数据,那么至少需要 3 台机器各部署一个 BE 实例(而不是1台机器部署3个BE实例)。多个FE所在服务器的时钟必须保持一致(允许最多5秒的时钟偏差)

4.测试环境也可以仅适用一个 BE 进行测试。实际生产环境,BE 实例数量直接决定了整体查询延迟。

5.所有部署节点关闭 Swap。
注2:FE 节点的数量

1.FE 角色分为 Follower 和 Observer,(Leader 为 Follower 组中选举出来的一种角色,以下统称 Follower,具体含义见 元数据设计文档)。

2.FE 节点数据至少为1(1 个 Follower)。当部署 1 个 Follower 和 1 个 Observer 时,可以实现读高可用。当部署 3 个 Follower 时,可以实现读写高可用(HA)。

3.Follower 的数量必须为奇数,Observer 数量随意。

4.根据以往经验,当集群可用性要求很高时(比如提供在线业务),可以部署 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 混部,需注意资源竞争问题,并保证元数据目录和数据目录分属不同磁盘。

软件需求

1.版本要求
软件 版本
Java Java 11 及以上
GCC 4.8.2 及以上
2.设置系统最大打开文件句柄数
$ vi /etc/security/limits.conf 
* soft nofile 65536
* hard nofile 65536
3.时钟同步
#修改时区
$ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#NTP域名同步
$ ntpdate cn.pool.ntp.org

#将系统时间写入到系统硬件当中
$ hwclock -w

#添加定时任务
$ echo '11 * * * root ntpdate cn.pool.ntp.org' >>/etc/crontab
4.关闭交换分区(swap)
bash 复制代码
#将/etc/fstab 文件中包含swap的行注释掉
$ sed -i '/swap/s/^/#/' /etc/fstab
$ swapoff -a
5.Liunx文件系统

这里我们推荐使用ext4文件系统,在安装操作系统的时候,请选择ext4文件系统。

三、集群部署

节点信息

节点 IP
FE 172.21.1.19
BE 172.21.19.251
BE 172.21.21.141

3-1、FE 部署

1.拷贝 FE 部署文件到指定节点
bash 复制代码
#将源码编译生成的 output 下的 fe 文件夹拷贝到 FE 的节点指定部署路径下
$ cd /data/apps/apache-doris
$ cp -rf incubator-doris-DORIS-0.15.0-release/apache-doris-0.15.0-incubating-src/output/fe /data/apps/apache-doris/
2.配置 FE

fe.conf 中 JAVA_OPTS 默认 java 最大堆内存为 4GB,建议生产环境调整至 8G 以上。

$ cd /data/apps/apache-doris/fe/

#修改FE元数据存放位置
$ mkdir -p /data/apache-doris/fe/doris-meta
$ sed -i 's#^.*meta_dir.*$#meta_dir = /data/apache-doris/fe/doris-meta#' conf/fe.conf

#脚本中指定JAVA_HOME路径,根据实际情况配置
$ sed -i '1a\export JAVA_HOME=/usr/java/jdk1.8' /data/apps/apache-doris/fe/bin/start_fe.sh

#priority_networks 配置进程绑定IP
$ sed -i 's#^.*priority_networks.*$#priority_networks =  172.21.0.0/16#' conf/fe.conf

#修改日志默认位置,如启动失败,可以通过查看 log/fe.log 或者 log/fe.out 查看错误信息。
$ mkdir -p /data/logs/apache-doris
$ sed -i 's#LOG_DIR.*$#LOG_DIR = /data/logs/apache-doris#g' conf/fe.conf

注意:生产环境强烈建议单独指定目录不要放在Doris安装目录下,最好是单独的磁盘(如果有SSD最好),测试开发环境可以使用默认配置

3.启动FE

编写启动脚本

bash 复制代码
#添加环境变量,否则启动报错
$ sed -i '/"$JAVA_HOME" = ""/iJAVA_HOME=/data/apps/jdk-11.0.2' /data/apps/apache-doris/fe/bin/start_fe.sh

$ cat << EOF >/usr/lib/systemd/system/doris-fe.service
	[Unit]
	Description=Apache Doris Fe Service
	After=network.target

	[Service]
	Type=forking
	KillMode=control-group
	ExecStart=/data/apps/apache-doris/fe/bin/start_fe.sh --daemon
	ExecStop=/data/apps/apache-doris/fe/bin/stop_fe.sh
	ExecReload=/bin/kill -s HUP \$MAINPID
	SuccessExitStatus=0 143
	PrivateTmp=true
	LimitNOFILE=1000000
	LimitNPROC=100000
	TimeoutStopSec=10s
	Restart=on-failure
	RestartSec=30

	[Install]
	WantedBy=multi-user.target
EOF

启动FE

$ systemctl daemon-reload
$ systemctl start doris-fe.service
$ systemctl enable doris-fe.service

检测 FE 是否启动成功

FE 进程启动后,会首先加载元数据,根据 FE 角色的不同,在日志中会看到 transfer from UNKNOWN to MASTER/FOLLOWER/OBSERVER。最终会看到 thrift server started 日志,并且可以通过 mysql 客户端连接到 FE,则表示 FE 启动成功。

也可以通过如下连接查看是否启动成功:

#http://fe_host:fe_http_port/api/bootstrap

curl http://172.21.1.19:8030/api/bootstrap

如果返回:

{"status":"OK","msg":"Success"}

则表示启动成功,其余情况,则可能存在问题。

启动报错:

./bin/start_fe.sh: 第 109 行:[: -gt: 期待一元表达式

解决方法:

#修改109行内容:
if [ $java_version -gt 8 ]; then
>>>>
if [[ $java_version -gt 8 ]]; then
4.FE实例端口信息
实例名称 端口名称 默认端口 通讯方向 说明
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 之间通信用的端口

注:

当部署多个 FE 实例时,要保证 FE 的 http_port 配置相同。

3-2、BE 部署

1.拷贝 BE 部署文件到所有要部署 BE 的节点
bash 复制代码
#将源码编译生成的 output 下的 be 文件夹拷贝到 BE 的节点的指定部署路径下。
$ rsync -avzP /data/apps/apache-doris/incubator-doris-DORIS-0.15.0-release/apache-doris-0.15.0-incubating-src/output/be root@<be_server>:/data/apps/apache-doris/
2.配置 BE

修改 be/conf/be.conf。主要是配置 storage_root_path:数据存放目录。默认在be/storage下,需要手动创建该目录。多个路径之间使用英文状态的分号 ; 分隔(最后一个目录后不要加 ;)。可以通过路径区别存储目录的介质,HDD或SSD。可以添加容量限制在每个路径的末尾,通过英文状态逗号,隔开。

示例1

注意:如果是SSD磁盘要在目录后面加上.SSD,HDD磁盘在目录后面加.HDD

storage_root_path=/home/disk1/doris.HDD,50;/home/disk2/doris.SSD,10;/home/disk2/doris
  • /home/disk1/doris.HDD,50,表示存储限制为50GB,HDD;
  • /home/disk2/doris.SSD,10,存储限制为10GB,SSD;
  • /home/disk2/doris,存储限制为磁盘最大容量,默认为HDD

示例2

注意:不论HDD磁盘目录还是SSD磁盘目录,都无需添加后缀,storage_root_path参数里指定medium即可

storage_root_path=/home/disk1/doris,medium:hdd,capacity:50;/home/disk2/doris,medium:ssd,capacity:50
  • /home/disk1/doris,medium:hdd,capacity:10,表示存储限制为10GB, HDD;
  • /home/disk2/doris,medium:ssd,capacity:50,表示存储限制为50GB, SSD;

登录BE服务器,修改BE数据存放目录

bash 复制代码
$ cd /data/apps/apache-doris/be

$ mkdir -p /data/apache-doris/be/doris-storage
$ sed -i 's#^.*storage_root_path.*$#storage_root_path = /data/apache-doris/be/doris-storage,medium:ssd#' conf/be.conf

#priority_networks 配置进程绑定IP
$ sed -i 's#^.*priority_networks.*$#priority_networks =  172.21.0.0/16#' conf/be.conf

#修改日志默认位置,如启动失败,可以通过查看 log/be.INFO 或者 log/be.out 查看错误信息。
$ mkdir -p /data/logs/apache-doris
$ sed -i 's#^.*sys_log_dir.*$#sys_log_dir = /data/logs/apache-doris#g' conf/be.conf

webserver_port端口配置

如果 be 部署在 hadoop 集群中,注意调整 be.conf 中的 webserver_port = 8040 ,以免造成端口冲突

3.在 FE 中添加所有 BE 节点
  • 安装mysql-client
    BE 节点需要先在 FE 中添加,才可加入集群。可以使用 mysql-client(下载MySQL 5.7)
bash 复制代码
#安装依赖
$ yum install libncurses* libtinfo*

#下载rpm包
$ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-common-5.7.37-1.el7.x86_64.rpm
$ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-libs-5.7.37-1.el7.x86_64.rpm
$ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-client-5.7.37-1.el7.x86_64.rpm

#安装
$ rpm -ivh mysql-community-*

报错:mariadb-libs is obsoleted by mysql-community-libs-5.7.37-1.el7.x86_64,解决方法如下:

#查看系统中的mariadb
$ rpm -qa | grep mariadb
mariadb-libs-5.5.68-1.amzn2.x86_64

#强制删除旧版本mariadb-libs:
rpm -e --nodeps mariadb-libs-5.5.68-1.amzn2.x86_64
  • 连接到 FE

    $ mysql -h 172.21.1.19 -P 9030 -uroot

  • host 为 FE 所在节点 ip;

  • port 为 fe/conf/fe.conf 中的 query_port;

  • 默认使用 root 账户,无passwd登录。

4.启动BE

编写启动脚本

bash 复制代码
cat << EOF >/usr/lib/systemd/system/doris-be.service
	[Unit]
	Description=Apache Doris BE Service
	After=network.target

	[Service]
	Type=forking
	KillMode=control-group
	ExecStart=/data/apps/apache-doris/be/bin/start_be.sh --daemon
	ExecStop=/data/apps/apache-doris/be/bin/stop_be.sh
	ExecReload=/bin/kill -s HUP \$MAINPID
	SuccessExitStatus=0 143
	PrivateTmp=true
	LimitNOFILE=1000000
	LimitNPROC=100000
	TimeoutStopSec=10s
	Restart=on-failure
	RestartSec=30

	[Install]
	WantedBy=multi-user.target
EOF

启动FE

$ systemctl daemon-reload
$ systemctl start doris-be.service
$ systemctl enable doris-be.service
5.BE实例端口信息
实例名称 端口名称 默认端口 通讯方向 说明
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 之间通讯

3-3、FS_Broker 部署(可选)

Broker 以插件的形式,独立于 Doris 部署。如果需要从第三方存储系统导入数据,需要部署相应的 Broker,默认提供了读取 HDFS 、百度云 BOS 及 Amazon S3 的 fs_broker。fs_broker 是无状态的,建议每一个 FE 和 BE 节点都部署一个 Broker。

1.拷贝源码 fs_broker 的 output 目录下的相应 Broker 目录到需要部署的所有节点上。建议和 BE 或者 FE 目录保持同级。
bash 复制代码
#拷贝到FE节点目录
$ cd /data/apps/apache-doris/incubator-doris-DORIS-0.15.0-release/apache-doris-0.15.0-incubating-src
$ cp -rf fs_brokers/apache_hdfs_broker/output/apache_hdfs_broker /data/apps/apache-doris/

#拷贝到BE节点目录
$ rsync -avzP fs_brokers/apache_hdfs_broker/output/apache_hdfs_broker root@<be_server>:/data/apps/apache-doris/
2.修改相应 Broker 配置

在相应 broker/conf/ 目录下对应的配置文件中,可以修改相应配置。

3.启动 Broker
#启动broker
$ /bin/sh /data/apps/apache-doris/apache_hdfs_broker/bin/start_broker.sh --daemon
#关闭broker
$ /bin/sh /data/apps/apache-doris/apache_hdfs_broker/bin/stop_broker.sh
4.添加 Broker

要让 Doris 的 FE 和 BE 知道 Broker 在哪些节点上,通过 sql 命令添加 Broker 节点列表。

使用 mysql-client 连接启动的 FE,执行以下命令:

bash 复制代码
# 添加broker
$ ALTER SYSTEM ADD BROKER doristestbroker  "172.21.1.19:8000","172.21.8.247:8000","172.21.12.227:8000";

ALTER SYSTEM ADD BROKER broker_name "host1:port1","host2:port2",...;

其中 host 为 Broker 所在节点 ip;port 为 Broker 配置文件中的 broker_ipc_port。

5.查看 Broker 状态

使用 mysql-client 连接任一已启动的 FE,执行以下命令查看 Broker 状态:

SHOW PROC "/brokers";

注:在生产环境中,所有实例都应使用守护进程启动,以保证进程退出后,会被自动拉起,如 Supervisor (opens new window)。如需使用守护进程启动,在 0.9.0 及之前版本中,需要修改各个 start_xx.sh 脚本,去掉最后的 & 符号。从 0.10.0 版本开始,直接调用 sh start_xx.sh 启动即可。也可参考 这里(opens new window)

6.启动Broker

编写启动脚本

bash 复制代码
#添加环境变量,否则启动报错
$ sed -i '/"$JAVA_HOME" = ""/iJAVA_HOME=/data/apps/jdk-11.0.2' /data/apps/apache-doris/apache_hdfs_broker/bin/start_broker.sh

$ cat << EOF >/usr/lib/systemd/system/doris-broker.service
  [Unit]
  Description=Apache Doris Broker Service
  After=network.target

  [Service]
  Type=forking
  KillMode=control-group
  ExecStart=/data/apps/apache-doris/apache_hdfs_broker/bin/start_broker.sh --daemon
  ExecStop=/data/apps/apache-doris/apache_hdfs_broker/bin/stop_broker.sh
  ExecReload=/bin/kill -s HUP \$MAINPID
  SuccessExitStatus=0 143
  PrivateTmp=true
  LimitNOFILE=1000000
  LimitNPROC=100000
  TimeoutStopSec=10s
  Restart=on-failure
  RestartSec=30

  [Install]
  WantedBy=multi-user.target
EOF

**启动Broker **

$ systemctl daemon-reload
$ systemctl restart doris-broker.service
$ systemctl enable doris-broker.service
相关推荐
木子Linux14 分钟前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算
mit6.82420 分钟前
Ubuntu 系统下性能剖析工具: perf
linux·运维·ubuntu
鹏大师运维22 分钟前
聊聊开源的虚拟化平台--PVE
linux·开源·虚拟化·虚拟机·pve·存储·nfs
watermelonoops29 分钟前
Windows安装Ubuntu,Deepin三系统启动问题(XXX has invalid signature 您需要先加载内核)
linux·运维·ubuntu·deepin
滴水之功1 小时前
VMware OpenWrt怎么桥接模式联网
linux·openwrt
ldinvicible2 小时前
How to run Flutter on an Embedded Device
linux
YRr YRr2 小时前
解决Ubuntu 20.04上编译OpenCV 3.2时遇到的stdlib.h缺失错误
linux·opencv·ubuntu
认真学习的小雅兰.2 小时前
如何在Ubuntu上利用Docker和Cpolar实现Excalidraw公网访问高效绘图——“cpolar内网穿透”
linux·ubuntu·docker
zhou周大哥3 小时前
linux 安装 ffmpeg 视频转换
linux·运维·服务器
不想起昵称9293 小时前
Linux SHELL脚本中的变量与运算
linux