目录
一、Doris架构
Doris的架构很简洁,只设FE (Frontend)前端进程、BE(Backend)后端进程两种角色、两个后台的服务进程,不依赖于外部组件,方便部署和运维,FE、BE都可在线性扩展。
1.FE(Frontend)
存储、维护集群元数据;负责接收、解析查询请求,规划查询计划,调度查询执行,返回查询结果。主要有三个角色:
Leader 和 Follower:主要是用来达到元数据的高可用,保证单节点宕机的情况下,元数据能够实时地在线恢复,而不影响整个服务。
Observer:用来扩展查询节点,同时起到元数据备份的作用。如果在发现集群压力非常大的情况下,需要去扩展整个查询的能力,那么可以加 observer 的节点。observer 不参与任何的写入,只参与读取。
2.BE(Backend)
负责物理数据的存储和计算;依据 FE 生成的物理计划,分布式地执行查询。数据的可靠性由 BE 保证,BE 会对整个数据存储多副本或者是三副本。副本数可根据需求动态调整。
3.MySQL Client
Doris 借助 MySQL 协议,用户使用任意 MySQL 的 ODBC/JDBC 以及 MySQL 的客户端,都可以直接访问 Doris。
4.Broker
一个独立的无状态进程。封装了文件系统接口,提供 Doris 读取远端存储系统中文件的能力,包括 HDFS,S3,BOS 等。
二、Doris安装
1.单机版安装
1.1安装前准备
1.1.1 linux操作版本需求
Linux系统 | 版本 |
Centos | 7.1及以上 |
Ubuntu | 16.04及以上 |
1.1.2 软件需求
软件 | 版本 |
java | 1.8及以上 |
GCC | 4.8.2及以上 |
1.1.3 测试环境硬件配置需求
模块 | CPU | 内存 | 磁盘 | 网络 | 实例数 |
Frontend | 8核+ | 8GB | SSD或 SATA. 10GB+* | 千兆网卡 | 1 |
Backend | 8核+ | 16GB | SSD或 SATA. 50GB+* | 千兆网卡 | 1-3* |
1.1.4生产环境配置需求
模块 | CPU | 内存 | 磁盘 | 网络 | 实例数量(最低要求) |
Frontend | 16核+ | 64GB+ | SSD或 SATA. 100GB+* | 万兆网卡 | 1-5* |
Backend | 16核+ | 64GB+ | SSD或 SATA. 100GB+* | 万兆网卡 | 10-100* |
1.2 操作系统环境要求
设置系统最大文件打开句柄数 ==>启动一个程序的时候,打开文件的数量就是句柄数
句柄数会影响be的启动
①启动be报:Please set the maximum number of open file descriptors to be 65536 using 'ulimit -n 65536'
打开文件:vim /etc/security/limits.con
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536②启动be报:Please set vm.max_map_count to be 2000000 under root using 'sysctl -w vm.max_map_count=200000
打开文件: vim /etc/sysctl.conf
vm.max_map_count = 2000000
1.3 注意事项
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。
6.FE 节点数据至少为 1(1 个 Follower)。当部署 1 个 Follower 和 1 个 Observer 时,可以实现读高可用。当部署 3 个 Follower 时,可以实现读写高可用(HA)。
7.Follower 的数量必须为奇数,Observer 数量随意。
8.根据以往经验,当集群可用性要求很高时(比如提供在线业务),可以部署 3 个Follower 和 1-3 个 Observer。如果是离线业务,建议部署 1 个 Follower 和 1-3 个 Observer。
9.Broker 是用于访问外部数据源(如 HDFS)的进程。通常,在每台机器上部署一个 broker 实例即可。
1.4 安装FE
1.4.1解压doris
(doris下载网址:https://doris.apache.org/download/)
tar -zxvf apache-doris-2.0.0-bin-x64.tar.gz -C /opt/module/
1.4.2 创建数据文件
mkdir /opt/module/doris/doris-meta(创建元数据文件夹)
mkdir /opt/module/doris/doris-date (创建数据文件夹)
1.4.3 配置FE
vim /opt/module/doris/fe/conf/fe.conf
启动FE查看 进程是否成功
1.4.4 配置BE
vim /opt/module/doris/be/conf/be.conf
启动be
查看(doris)http 可视化页面:http://192.168.10.102:18032/home
doris客户端:mysql -h hadoop102 -P9030 -uroot(首次进入)设置密码:set password for 'root' =password('mysql');
2.doris高可用环境配置
首先对我们的doris进行分发
配置高可用
2.1添加BE到FE
alter system add backend "hadoop102:9050";
alter system add backend "hadoop103:9050";
alter system add backend "hadoop104:9050";
查看BE状态:
show proc '/backends';
show proc '/backends'\G;
2.2添加broker
alter system add broker broker_name "hadoop102:8000";
alter system add broker broker_name "hadoop103:8000";
alter system add broker broker_name "hadoop104:8000";
2.3添加FE
ALTER SYSTEM ADD FOLLOWER "hadoop103:9010";(添加FOLLOWER )
ALTER SYSTEM ADD OBSERVER "hadoop104:9010";(添加OBSERVER )
配置完成后关闭重新启动
2.4 doris群起脚本
#!/bin/bash
# use-method: doris.sh start|stop|restart
fe_hosts=(hadoop102 hadoop103 hadoop104)
be_hosts=(hadoop102 hadoop103 hadoop104)
broker_hosts=(hadoop102 hadoop103 hadoop104)
case $1 in
"start"){
for i in ${fe_hosts[*]}
do
echo "=================== start $i's fe service ================"
ssh $i "source /etc/profile.d/my_env.sh ;cd /opt/module/doris;./fe/bin/start_fe.sh --daemon"
done
for i in ${be_hosts[*]}
do
echo "=================== start $i's be service ================"
ssh $i "source /etc/profile.d/my_env.sh ;cd /opt/module/doris;./be/bin/start_be.sh --daemon"
done
for i in ${broker_hosts[*]}
do
echo "=================== start $i's broker service ================"
ssh $i "source /etc/profile.d/my_env.sh ;cd /opt/module/doris;./extensions/apache_hdfs_broker/bin/start_broker.sh --daemon"
done
};;
"stop"){
for i in ${broker_hosts[*]}
do
echo "=================== stop $i's broker service ================"
ssh $i "/opt/module/doris/extensions/apache_hdfs_broker/bin/stop_broker.sh"
done
for i in ${be_hosts[*]}
do
echo "=================== stop $i's be service ================"
ssh $i "/opt/module/doris/be/bin/stop_be.sh"
done
for i in ${fe_hosts[*]}
do
echo "=================== stop $i's fe service ================"
ssh $i "/opt/module/doris/fe/bin/stop_fe.sh"
done
};;
"status"){
for i in ${fe_hosts[*]}
do
echo "=================== status $i's fe service ================"
ssh $i "jps | grep dorisFE"
done
for i in ${be_hosts[*]}
do
echo "=================== status $i's be service ================"
ssh $i "ps -ef | grep doris_be | grep -v 'grep'"
done
for i in ${broker_hosts[*]}
do
echo "=================== status $i's broker service ================"
ssh $i "jps | grep BrokerBootstrap | grep -v ‘JAVA_TOOL_OPTIONS’"
done
};;
"restart")
doris-cluster.sh stop
sleep 2
doris-cluster.sh start
;;
*)
echo "Parameter ERROR!!! doris.sh start|stop|restart"
;;
esac