背景
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
集群安装
节点规划
hostname | Doris |
---|---|
node01 | FE Master |
node02 | BE/ FE Observer |
node03 | BE/ FE Follower |
node04 | BE |
网络端口
实例名称 | 端口名称 | 默认端口 | 通讯方向 | 说明 |
---|---|---|---|---|
BE | be_port | 9060 | FE --> BE | BE 上 thrift server 的端口,用于接收来自 FE 的请求 |
BE | webserver_port | 8049 | 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 之间通讯 |
BE | be_rpc_port | 9070 | ||
FE | http_port * | 8050 | 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 | 9011 | FE <--> FE | FE 上的 bdbje 之间通信用的端口 |
Broker | broker_ipc_port | 8000 | FE --> Broker, BE --> Broker | Broker 上的 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.
正常启动后再移除,重启。