Doris集群机器规划以下是Doris集群的服务器规划配置信息,目前采用3节点混部模式。FE3个实例,BE3个实例,构成最低配集群。
服务器名服务器IP角色Doris-node0110.19.162.103FE、BEDoris-node0210.19.162.104FE、BEDoris-node0310.19.162.106FE、BE
Doris简介
官网:首页 - Apache Doris
核心组件简介
- Frontend(FE)
Java语言开发,存储和维护集群的元数据,负责接收和解析用户的查询请求,规划查询计化,调度查询结果 。
- Backend(BE)
C++语言开发,Doris 系统的计算和存储节点,根据FE生成的物理执行计划,然后进行查询(分布式,多节点并行执行查询,统一汇总),同时BE还会将数据存储为多副本。
- Broker
Broker 为一个独立的无状态进程。封装了文件系统接口,提供 Doris 读取远端存储系统中文件的能力,包括HDFS,S3,BOS等。
Doris端口列表
Doris镜像版本与编译环境对应关系
Doris编译
这里doris镜像使用的是0.15.0,doris的版本为apache-doris-0.15.0-incubating-src.tar.gz
# 1.拉取镜像 在10.19.162.103宿主机上执行
docker pull apache/doris:build-env-for-0.15.0
# 2. 将容器中的 maven 下载的包保存到宿主机本地指定的文件中,避免重复下载,同时会将编译的 Doris 文件保存到宿主机本地指定的文件,方便部署
docker run -it -v /root/dorisenv/.m2:/root/.m2 -v /root/dorisenv/incubator-doris-DORIS-0.13-release/:/root/incubator-doris-DORIS-0.13-release/ apache/doris:build-env-for-0.15.0
# /root/dorisenv/.m2和/root/dorisenv/incubator-doris-DORIS-0.13-release/是宿主机挂载的目录,如下图所示
说明:以下步骤3、4、5均在docker实例内部执行
# 3. 在镜像中下载doris安装包,下载路径可以点击如下图位置查看
wget https://mirrors.tuna.tsinghua.edu.cn/apache/doris/0.15.0-incubating/apache-d
上述源码大小15M,下载完毕,执行第4步
# 4.解压
tar -zxvf apache-doris-0.15.0-incubating-src.tar.gz
#5.切换JDK8(由于本demo是JDK8环境,需切换到 JDK8,如果你用JDK11 16也可以切换到对应版本)
$ 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
# 6. 进入src目录,然后编译
sh build.sh
构建过程部分截图1:
构建过程部分截图2:
构建20分钟后:
编译后生成的文件在如下目录:
其中be是后端,fe是前端,udf是用户自定义函数目录。
如果出现如下错误:
Plugin net.sourceforge.czt.dev:cup-maven-plugin:1.6-cdh or one of its dependencies could not be resolved: Could not find artifact net.sourceforge.czt.dev:cup-maven-plugin:jar:1.6-cdh in spring-plugins (https://repo.spring.io/plugins-release/)
修改 fe/pom.xml,调整前的pom.xml如下:
<repositories>
<repository>
<id>central</id>
<name>central maven repo https</name>
<url>https://repo.maven.apache.org/maven</url>
</repository>
<!-- for java-cup -->
<repository>
<id>cloudera-thirdparty</id>
<url>https://repository.cloudera.com/content/repositories/third-party/</url>
</repository>
<!-- for bdb je -->
<repository>
<id>oracleReleases</id>
<url>http://download.oracle.com/maven</url>
</repository>
</repositories>
<pluginRepositories>
<!-- for cup-maven-plugin -->
<pluginRepository>
<id>spring-plugins</id>
<url>https://repository.cloudera.com/artifactory/ext-release-local</url>
</pluginRepository>
<pluginRepository>
<id>cloudera-public</id>
<url>https://repository.cloudera.com/artifactory/public/</url>
</pluginRepository>
</pluginRepositories>
调整后的pom.xml如下:
<repositories>
<repository>
<id>central</id>
<name>central maven repo https</name>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
<!-- for java-cup -->
<repository>
<id>cloudera-public</id>
<url>https://repository.cloudera.com/artifactory/public/</url>
</repository>
<!-- for bdb je -->
<repository>
<id>oracleReleases</id>
<url>https://download.oracle.com/maven</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-plugins</id>
<url>https://repository.cloudera.com/artifactory/ext-release-local</url>
</pluginRepository>
<!-- for cup-maven-plugin -->
<pluginRepository>
<id>cloudera-public</id>
<url>https://repository.cloudera.com/artifactory/public/</url>
</pluginRepository>
</pluginRepositories>
继续构建,在编译环境的当前机器执行命令:
cd /root/apache-doris-0.15.0-incubating-src
sh build.sh
FE安装
# 6 数据导出
#查看所有容器,包括运行与停止的容器
docker ps -a
#启动容器
docker start laughing_haslett
#进入容器
docker attach laughing_haslett
#将编译好的文件拷出
docker cp laughing_haslett:/root/apache-doris-0.15.0-incubating-src/output/ /root/dorisenv
#为了保持环境一致,这里将容器的jdk导出,并配置环境变量
docker cp laughing_haslett:/usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el7_9.x86_64/ /usr/lib/jvm/
#scp到其他机器
scp -r /usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el7_9.x86_64/ [email protected]:/usr/lib/jvm/
# 配置环境变量
vi /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el7_9.x86_64
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
配置FE
- 拷贝FE部署文件到指定结点
将源码编译生成的output下的fe文件夹拷贝到FE的结点/root/apache-doris-0.15路径下
cp -r fe /root/apache-doris-0.15
- 配置环境变量
vi /etc/profile
# 放在JAVA_HOME上方
#Doris hoem
export DORIS_HOME=/root/apache-doris-0.15
export PATH=$PATH:$DORIS_HOME/bin
#重新加载环境变量
source /etc/profile
配置fe.conf
修改ip绑定:
将安装目录分发到另外两台结点
scp -r /root/apache-doris-0.15 [email protected]:/root/apache-doris-0.15
分发完之后配置环境变量并修改priority_networks
启动FE,10.19.162.103作为leader角色启动
sh /root/apache-doris-0.15/fe/bin/start_fe.sh --daemon
#启动失败则配置JAVA_HOME使用 source /etc/profie
日志默认存放在fe/log/目录下
启动完成后,可以通过 http://10.19.162.103:8030/Configuration 访问:
使用datagrip修改密码
- 删除操作系统自带的mysql库文件
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
连接到doris(密码为空):
设置密码:
SET PASSWORD FOR 'root' = PASSWORD('root')
BE安装
配置BE
- 拷贝BE部署文件到指定结点
将源码编译生成的output下的fe文件夹拷贝到FE的节点/root/apache-doris-0.15路径下
cp -r be /root/apache-doris-0.15
- 创建目录 storage_root_path
mkdir -p /root/apache-doris-0.15/be/storage1
mkdir -p /root/apache-doris-0.15/be/storage2
执行后目录信息如下:
- 修改conf/be.conf,添加ip并设置存储空间
#设置ip
priority_networks = 10.19.162.110/24
#以下的10,表示最大的存储空间为10Gb
storage_root_path = /root/apache-doris-0.15/be/storage1,10;/root/apache-doris-0.15/be/storage2
- 添加BE节点port为BE上的heartbeat_service_port端口,默认为9050
ALTER SYSTEM ADD BACKEND "10.19.162.111:9050";
ALTER SYSTEM ADD BACKEND "10.19.162.110:9050";
- 修改可打开文件数
vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
这种方法需要重启机器才能生效(所有BE节点都需要进行配置),否则启动不成功。
- 配置BE的IP地址
- 将分发给其他节点 10.19.162.104、10.19.162.106,并修改be.conf的priority_networks
scp -r /root/apache-doris-0.15/be/ [email protected]:/root/apache-doris-0.15/
• 分别登陆103、104、106机器上启动BE(注意,此步的be.conf中 storage_root_path = /root/apache-doris-0.15/be/storage1,10;/root/apache-doris-0.15/be/storage2一定要配好,否则会启动出错,并且storage1和storage2要删除重新建立)
# 可以多启动一次,如果启动报pid冲突,说明启动成功,否则表示启动失败,可以重启机器再次启动试试,如果还是不行,可以查看日志,查看具体原因
sh /root/apache-doris-0.15/be/bin/start_be.sh --daemon
日志默认存放在 be/log/ 目录下
[root@lab-hosta-vm02 log]# pwd
/root/apache-doris-0.15/be/log
[root@lab-hosta-vm02 log]# ls -l
总用量 4808
lrwxrwxrwx 1 root root 27 10月 15 14:40 be.INFO -> be.INFO.log.20221015-144010
-rw-r--r-- 1 root root 4860906 10月 16 23:32 be.INFO.log.20221015-144010
-rw-r--r-- 1 root root 165 10月 16 23:26 be.out
lrwxrwxrwx 1 root root 30 10月 16 09:03 be.WARNING -> be.WARNING.log.20221016-090328
-rw-r--r-- 1 root root 52587 10月 16 23:23 be.WARNING.log.20221016-090328
[root@lab-hosta-vm02 log]# tail -f be.INFO.log.20221015-144010
• 3台服务器BE启动完毕,再利用Mysql-client或其他客户端工具登录103FE,通过SQL命令添加backends节点
mysql -uroot -h 10.19.162.103 -P 9030 -p
#密码为root
#或者通过客户端登录
#其中host为Broker所在节点ip,port为Broker配置文件(apache_hdfs_broker.conf)中的broker_ipc_port
ALTER SYSTEM ADD BACKEND "10.19.162.103:9050";
ALTER SYSTEM ADD BACKEND "10.19.162.104:9050";
ALTER SYSTEM ADD BACKEND "10.19.162.106:9050";
添加完之后再查询
SHOW PROC '/backends'
如果Alive字段为true,说明BE状态正常,已加入集群。
Broker节点部署
BROKER以插件的形式,独立于Doris的部署,建议每个PE和BE节点都部署一个Broker,Broker是用于访问外部数据源的进程,默认是HDFS,上传编译好的hdfs_broker
# 进入容器laughing_haslett
docker start laughing_haslett
docker attach laughing_haslett
cd apache-doris-0.15.0-incubating-src
cd fs_brokers/
cd apache_hdfs_broker/
sh build.sh
编译好之后有一个output目录,这里存放了编译好的文件
#将编译好的文件导出 pwd可以查看当前所在目录
docker cp laughing_haslett:/root/apache-doris-0.15.0-incubating-src/fs_brokers/apache_hdfs_broker/output/apache_hdfs_broker/ /root/dorisenv/output/
# 将apache_hdfs_broker放入/root/apache-doris-0.15中,并分发给其他机器
cp -r apache_hdfs_broker/ /root/apache-doris-0.15/
scp -r /root/apache-doris-0.15/apache_hdfs_broker/ [email protected]:/root/apache-doris-0.15/
#分别启动Broker
sh /root/apache-doris-0.15/apache_hdfs_broker/bin/start_broker.sh --daemon
jps查看如下:
- 通过SQL命令添加Broker节点
mysql -uroot -h 10.19.162.103 -P 9030 -p
#密码为root
#或者通过客户端dbeaver之前步骤提到的FE实例
#其中host为Broker所在节点ip,port为Broker配置文件(apache_hdfs_broker.conf)中的broker_ipc_port
alter system add broker broker_030406 "10.19.162.103:8000","10.19.162.104:8000","10.19.162.106:8000";
#查看broker状态
show proc '/brokers';
注:在生产环境中,所有实例都应使用守护进程启动,以保证进程退出后,会被自动拉起,如 Supervisor (opens new window)。如需使用守护进程启动,在 0.9.0 及之前版本中,需要修改各个 start_xx.sh 脚本,去掉最后的 & 符号。从 0.10.0 版本开始,直接调用 sh start_xx.sh 启动即可。
FE的扩容与缩容
命令介绍
- • 添加Follower或Oberser
首先连接到已启动的FE,并执行
#oberser只能用来读,follower用来做高可用,leader宕掉follower能重新选举一个leader顶上
alter system add follower "ip:port";
或
alter system add observer "ip:port";
- 删除FE节点
alter system drop follower[observer] "ip:port"
操作
- 启动104 106的FE服务(之前已启动10.19.162.103机器FE作为leader角色)特别说明:--helper 参数仅在 follower 和 observer 第一次启动时才需要。
# 登录104、106机器分别启动FE,需要指定103为leader
sh /root/apache-doris-0.15/fe/bin/start_fe.sh --helper 10.19.162.103:9010 --daemon
至此3个节点都启动了FE实例,此外还需 使用 mysql-client 连接到已启动的103机器的FE,执行添加集群的SQL操作。由于我们期望部署3个FE,需要在SQL窗口执行以下两条命令:
#添加FE
ALTER SYSTEM ADD FOLLOWER "10.19.162.104:9010";
ALTER SYSTEM ADD FOLLOWER "10.19.162.106:9010";
再次查看FE实例
show proc '/frontends';
BE的扩容与缩容
BE节点的扩容和缩容过程,不影响当前系统运行以及正在执行的任务,并且不会影响当前系统的性能。数据均衡会自动进行。根据集群现有数据量的大小,集群会在几个小时到1天不等的时间内,恢复到负载均衡的状态。
- • 使用mysql-client或客户端工具(dbeaver)连接到已启动的FE
- • 通过执行以下SQL命令来增加BE节点
alter system add backend "ip:node"
#例 alter system add backend "10.19.162.103:9050"
- • 删除BE节点
# 删除节点有两种方式:drop和decommission
alter system dropp backend “ndoe01:9050”; #硬删除
或者
alter system decommission backend "ndoe01:9050"; #软删除 推荐使用这个
查看所有BE
show proc '/backends'
本案例的BE扩容,已经在上述步骤完成,BE是3节点集群,具体参见上述安装BE步骤:“通过SQL命令添加Broker节点”。
Broker的扩容与缩容
Broker实例的数量没有硬性要求。通常每台物理机部署一个即可,Broker的添加和删除可以通过一下命令完成
alter system add broker broker_030406 "10.19.162.104:8000"
alter system add broker broker_030406 "10.19.162.106:8000"
alter system drop all broker broker_030406
Broker的扩容已经在上述步骤完成,具体操作参见上述安装Broker步骤:“通过SQL命令添加Broker节点”。
常用指令
sh /root/apache-doris-0.15/fe/bin/start_fe.sh --daemon
sh /root/apache-doris-0.15/be/bin/start_be.sh --daemon
mysql -uroot -h 10.19.162.111 -P 9030 -p
show proc '/frontends';
show proc '/backends';
alter system add backend "10.19.162.111:9050";
alter system dropp backend "10.19.162.111:9050";
alter system decommission backend "10.19.162.110:9050";
SHOW PROC '/backends'\G
版权归原作者 潮浪之巅 所有, 如有侵权,请联系我们删除。