背景

Apache Doris是目前新兴的OLAP数据库,前身是百度开源的PALO项目,从命名就可看出,目的是要颠覆OLAP。
官方如此介绍:

Apache Doris是一个现代化的MPP分析型数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。Apache Doris的分布式架构非常简洁,易于运维,并且可以支持10PB以上的超大数据集。

官方地址:https://doris.apache.org/master/zh-CN/

编译

使用 Docker 开发镜像编译

1.拉取开发镜像

docker pull apache/incubator-doris:build-env-1.3

针对不同的 Doris 版本,需要下载对应的镜像版本,我要编译0.14版本,故这里我使用apachedoris/doris-dev:build-env-1.2

docker pull apache/incubator-doris:build-env-1.3

2.源码下载

需要clone GitHub上的incubator-doris项目

切换branch-0.14分支

git checkout origin/branch-0.14

3.运行镜像

docker run -it -v /your/local/.m2:/root/.m2 -v /your/local/incubator-doris-DORIS-x.x.x-release/:/root/incubator-doris-DORIS-x.x.x-release/ apachedoris/doris-dev:build-env

配置本地m2目录、Doris源码目录挂载

示例:

docker run -d -it -v /root/.m2:/root/.m2 -v /root/incubator-doris:/root/incubator-doris/ --privileged=true apache/incubator-doris:build-env-1.3

切换jdk8

alternatives --set java java-1.8.0-openjdk.x86_64
alternatives --set javac java-1.8.0-openjdk.x86_64
export JAVA_HOME=/usr/lib/jvm/java-1.8.0

4.编译

nohup sh build.sh 2>&1 &

编译Flink连接扩展包

docker run -it -v /root/.m2:/root/.m2 -v /root/incubator-doris:/root/incubator-doris --privileged=true apachedoris/doris-dev:build-env-1.2

集群安装

节点规划

hostnameDoris
node01FE Master
node02BE/ FE Observer
node03BE/ FE Follower
node04BE

网络端口

实例名称端口名称默认端口通讯方向说明
BEbe_port9060FE --> BEBE 上 thrift server 的端口,用于接收来自 FE 的请求
BEwebserver_port8049BE <--> BEBE 上的 http server 的端口
BEheartbeat_service_port9050FE --> BEBE 上心跳服务端口(thrift),用于接收来自 FE 的心跳
BEbrpc_port*8060FE<-->BE, BE <--> BEBE 上的 brpc 端口,用于 BE 之间通讯
BEbe_rpc_port9070
FEhttp_port *8050FE <--> FE,用户FE 上的 http server 端口
FErpc_port9020BE --> FE, FE <--> FEFE 上的 thrift server 端口,每个fe的配置需要保持一致
FEquery_port9030用户FE 上的 mysql server 端口
FEedit_log_port9011FE <--> FEFE 上的 bdbje 之间通信用的端口
Brokerbroker_ipc_port8000FE --> Broker, BE --> BrokerBroker 上的 thrift server,用于接收请求

FE部署

1.拷贝目录

将fe目录拷贝至fe节点指定目录

重命名目录为doris-fe

2.修改FE配置

conf/fe.conf

修改java运行参数

生产环境建议把java最大堆内存调整至8G以上

JAVA_OPTS="-Xmx8192m 

meta_dir

meta_dir为元数据目录,此处我修改为自定义目录

meta_dir = /data/doris-meta

修改被占用的端口

此处我的9010端口被占用,故改为9011

http_port = 8050
rpc_port = 9020
query_port = 9030
edit_log_port = 9011

priority_networks

由于机器有多块网卡,需要指定ip

priority_networks = 10.19.249.0/24

各EF节点需要手动创建目录:

mkdir /data/doris-meta

3.分发安装包

分发包到各EF节点

scp doris-fe/ node04:$PWD

4.各节点启动EF

若要配置高可用,这里先不要启动。

sh bin/start_fe.sh --daemon

通过jps指令可以查看FE进程

jps
22306 PaloFe
22390 Jps

5.检查EF是否启动成功

curl http://be_host:be_http_port/api/health

返回{"online_backend_num":0,"total_backend_num":0,"status":"OK"}说明成功

FE高可用配置

0.先启动一台FE

先启动的FE作为leader节点

此处我选择06节点。

1.mysql客户端连接FE节点

mysql -h node01 -P 9030 -uroot

2.查看FE节点情况

SHOW PROC '/frontends'\G

3.增加FE节点

FE 分为 Leader,Follower 和 Observer 三种角色。

默认一个集群,只能有一个 Leader,可以有多个 Follower 和 Observer。

其中 Leader 和 Follower 组成一个 Paxos 选择组,如果 Leader 宕机,则剩下的 Follower 会自动选出新的 Leader,保证写入高可用。

Observer 同步 Leader 的数据,但是不参加选举。如果只部署一个 FE,则 FE 默认就是 Leader。

添加Follower节点:

ALTER SYSTEM ADD FOLLOWER "host:edit_log_port";
ALTER SYSTEM ADD FOLLOWER "node03:9011";

添加Observer节点:

ALTER SYSTEM ADD OBSERVER "host:edit_log_port";
ALTER SYSTEM ADD OBSERVER "node02:9011";

删除节点:

ALTER SYSTEM DROP FOLLOWER[OBSERVER] "fe_host:edit_log_port";

4.启动其他FE节点

bin/start_fe.sh --helper leader_host:edit_log_port --daemon
sh bin/start_fe.sh --helper node01:9011 --daemon

出leader节点外的其他节点若在此之前启动过,需要先停止服务,删除前面设置过的meta_dir目录下的内容,再按照此步骤设置helper启动。

只有第一次启动时需要设置helper,之后直接启动即可。

全部节点启动成功后,连接主节点EF,

SHOW PROC '/frontends';

BE部署

1.拷贝目录

将BE目录拷贝至BE节点指定目录

重命名目录为doris-be

2.修改BE配置

修改storage_root_path

这个目录用于存储doris数据

storage_root_path = /doris-data/doris-storage

该目录需要在每个BE节点手动创建

多个路径之间使用 ; 分隔(最后一个目录后不要加 ;

修改冲突的端口

若存在端口冲突,需要修改端口即可

修改priority_networks

由于我的机器存在多块网卡,不能使用自动扫描,需要手动配置

priority_networks = 10.19.249.0/24

3.在 FE 中添加所有 BE 节点

BE 节点需要先在 FE 中添加,才可加入集群。可以使用 mysql-client(下载MySQL 5.7) 连接到 FE:

./mysql-client -h host -P port -uroot
mysql -h node06 -P 9030 -uroot
  • 其中 host 为 FE 所在节点 ip;
  • port 为 fe/conf/fe.conf 中的 query_port,默认9030;
  • 默认使用 root 账户,无密码登录。

登录后,执行以下命令来添加每一个 BE:

ALTER SYSTEM ADD BACKEND "host:port";

ALTER SYSTEM ADD BACKEND "node02:9050";
ALTER SYSTEM ADD BACKEND "node03:9050";
ALTER SYSTEM ADD BACKEND "node04:9050";
  • 其中 host 为 BE 所在节点 ip;
  • port 为 be/conf/be.conf 中的 heartbeat_service_port,默认9050。

4.分发BE

 scp -r doris-be node02:$PWD
 scp -r doris-be node03:$PWD
 scp -r doris-be node04:$PWD

5.启动BE

sh bin/start_be.sh --daemon

BE高可用配置

1.连接FEleader节点

2.查看BE节点状态

SHOW PROC '/backends';

3.增加BE节点

BE 节点的扩容和缩容过程,不影响当前系统运行以及正在执行的任务,并且不会影响当前系统的性能。数据均衡会自动进行。根据集群现有数据量的大小,集群会在几个小时到1天不等的时间内,恢复到负载均衡的状态。集群负载情况,可以参见 Tablet 负载均衡文档

BE 节点的增加方式同 BE 部署 一节中的方式,通过 ALTER SYSTEM ADD BACKEND 命令增加 BE 节点。

Broker部署

0.编译hdfs-broker 步骤略

1.增加hdfs配置

ln -s /etc/hadoop/conf.cloudera.hdfs/hdfs-site.xml /export/doris-boker-hdfs/conf/hdfs-site.xml

2.分发

分发至每个节点 略

3.启动broker

sh /export/doris-boker-hdfs/bin/start_broker.sh --daemon

4.添加broker

ALTER SYSTEM ADD BROKER broker_name "node01:8000","node02:8000","node03:8000","node04:8000;

5.检查是否成功

 SHOW PROC '/backends';

创建用户

先通过mysql客户端登录EF

mysql -h FE_HOST -P9030 -uroot

修改root用户密码

SET PASSWORD FOR 'root' = PASSWORD('VpClub2021.');

创建新用户

CREATE USER 'user_name' IDENTIFIED BY 'passwd';

用户权限分配类似于MySQL,也可参考官方文档-权限管理

Q&A

BE启动:File descriptor number is less than 60000.

File descriptor number is less than 60000. Please use (ulimit -n) to set a value equal or greater than 60000

解决:

ulimit -n 60000

然后重新运行

FE重启一直刷FE type: UNKNOWN

2020-08-11 15:21:00,324 INFO 1 [Catalog.waitForReady():751] wait catalog to be ready. FE type: UNKNOWN. is ready: false

解决:

metadata_failure_recovery=true in fe.conf and restart FE again.

正常启动后再移除,重启。