一、下载
Index of /doris
下载 - Apache Doris
查看cpu支持avx2指令集cat /proc/cpuinfo
cat /proc/cpuinfo |grep avx2
支持则下载
二、环境准备
1、集群规划
10.9.70.172 | 10.9.70.166 | 10.9.70.168 | 10.9.70.87 | |
---|---|---|---|---|
JSYF3 | JSYF1 | JSYF2 | JSYF4 | |
Doris | Backend | Backend/Frontend OBSERVER | Backend/Frontend FOLLOWER | Frontend FOLLOWER |
Broker | Broker | Broker | Broker | Broker |
2、目录规划
部署目录 | 日志目录 | 元数据目录 | 数据存储目录 | |
---|---|---|---|---|
FE | /opt/module/apache-doris-fe-1.2.3-bin-x86_64/ | /opt/module/apache-doris-fe-1.2.3-bin-x86_64/log/ | /opt/module/doris-meta/ | |
BE | /opt/module/apache-doris-be-1.2.3-bin-x86_64/ | /opt/module/apache-doris-be-1.2.3-bin-x86_64/log/ | /opt/module/doris_storage1/,/opt/module/doris_storage1/ | |
Broker | /opt/module/doris_storage1/ | /opt/module/apache_hdfs_broker/log/ |
3、开发测试环境
模块 | CPU | 内存 | 磁盘 | 网络 | 实例数量 |
---|---|---|---|---|---|
Frontend | 8核+ | 8GB+ | SSD 或 SATA,10GB+ * | 千兆网卡 | 1 |
Backend | 8核+ | 16GB+ | SSD 或 SATA,50GB+ * | 千兆网卡 | 1-3 * |
4、生产环境
模块 | CPU | 内存 | 磁盘 | 网络 | 实例数量(最低要求) |
---|---|---|---|---|---|
Frontend | 16核+ | 64GB+ | SSD 或 RAID 卡,100GB+ * | 万兆网卡 | 1-3 * |
Backend | 16核+ | 64GB+ | SSD 或 SATA,100G+ * | 万兆网卡 | 3 * |
注1:
- FE 的磁盘空间主要用于存储元数据,包括日志和 image。通常从几百 MB 到几个 GB 不等。
- BE 的磁盘空间主要用于存放用户数据,总磁盘空间按用户总数据量 * 3(3副本)计算,然后再预留额外 40% 的空间用作后台 compaction 以及一些中间数据的存放。
- 一台机器上可以部署多个 BE 实例,但是只能部署一个 FE。如果需要 3 副本数据,那么至少需要 3 台机器各部署一个 BE 实例(而不是1台机器部署3个BE实例)。多个FE所在服务器的时钟必须保持一致(允许最多5秒的时钟偏差)
- 测试环境也可以仅适用一个 BE 进行测试。实际生产环境,BE 实例数量直接决定了整体查询延迟。
- 所有部署节点关闭 Swap。
注2:FE 节点的数量
- FE 角色分为 Follower 和 Observer,(Leader 为 Follower 组中选举出来的一种角色,以下统称 Follower)。
- FE 节点数据至少为1(1 个 Follower)。当部署 1 个 Follower 和 1 个 Observer 时,可以实现读高可用。当部署 3 个 Follower 时,可以实现读写高可用(HA)。
- Follower 的数量必须为奇数,Observer 数量随意。
- 根据以往经验,当集群可用性要求很高时(比如提供在线业务),可以部署 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 混部,需注意资源竞争问题,并保证元数据目录和数据目录分属不同磁盘。
5、网络需求
Doris 各个实例直接通过网络进行通讯。以下表格展示了所有需要的端口
实例名称 | 端口名称 | 默认端口 | 通讯方向 | 说明 |
---|---|---|---|---|
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 之间通讯 |
FE | http_port | 8030 | FE <–> FE,用户 <–> FE | FE 上的 http server 端口 |
FE | rpc_port | 9020 | BE --> FE, FE <–> FE | FE 上的 thrift server 端口,每个fe的配置需要保持一致 |
FE | query_port | 9030 | 用户 <–> FE | FE 上的 mysql server 端口 |
FE | edit_log_port | 9010 | FE <–> FE | FE 上的 bdbje 之间通信用的端口 |
Broker | broker_ipc_port | 8000 | FE --> Broker, BE --> Broker | Broker 上的 thrift server,用于接收请求 |
6、系统要求
1)设置系统最大打开文件句柄数
2)时钟同步
3)关闭交换分区(swap)
4)关闭防火墙以及selinux
# 关闭防火墙
ansible all -a "systemctl stop firewalld.service"
# 禁止防火墙开机启动
ansible all -a "systemctl disable firewalld.service"
# 查看服务是否开机启动
ansible all -a "systemctl is-enabled firewalld.service"
# 查看防火墙状态
ansible all -a "firewall-cmd --state"
#关闭selinux要执行
ansible all -a "setenforce 0"
5)配置对应域名
6)java
ansible all -a "java -version"
环境变量vim /etc/profile
#添加环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_333-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JRE_HOME/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
激活环境变量 source /etc/profile
三、安装FE、BE
1、安装部署FE
1)、将FE安装包拷贝至/opt/module/下
tar -xvf apache-doris-fe-1.2.3-bin-x86_64.tar.xz
2)、配置 FE
vim /opt/module/apache-doris-fe-1.2.3-bin-x86_64/conf/fe.conf
meta_dir = /opt/module/doris-meta
#指定IP
priority_networks=10.9.70.87/24
JAVA_HOME=/usr/java/jdk1.8.0_333-amd64
#FE的某些操作长时间占用锁,导致元数据写操作响应时间过长导致的
bdbje_lock_timeout_second=5
- 配置文件为 conf/fe.conf。其中注意:meta_dir是元数据存放位置。默认值为 ${DORIS_HOME}/doris-meta。需手动创建该目录。
注意:生产环境强烈建议单独指定目录不要放在Doris安装目录下,最好是单独的磁盘(如果有SSD最好),测试开发环境可以使用默认配置
- fe.conf 中 JAVA_OPTS 默认 java 最大堆内存为 4GB,建议生产环境调整至 8G 以上。
- 添加 priority_networks 参数
priority_networks=10.9.70.87/24
注意:
这个参数我们在安装的时候是必须要配置的,特别是当一台机器拥有多个IP地址的时候,我们要为 FE 指定唯一的IP地址。
这里假设你的节点 IP 是 10.9.70.87,那么我们可以通过掩码的方式配置为 10.9.70.0/24。
配置jdk
~~JAVA_HOME=/path/to/jdk/~~
网络地址查看ifconfig
创建元数据存储文件mkdir /opt/module/doris-meta
拷贝到166、168服务器``
3)、启动
sh /opt/module/apache-doris-fe-1.2.3-bin-x86_64/bin/start_fe.sh --daemon
4)验证
jps
5)查看 FE 运行状态
你可以通过下面的命令来检查 Doris 是否启动成功curl [http://127.0.0.1:8030/api/bootstrap](http://127.0.0.1:8030/api/bootstrap)
http://10.9.70.87:8030/login
注意:
这里我们使用 Doris 内置的默认用户 root 进行登录,密码是空
这是一个 Doris 的管理界面,只能拥有管理权限的用户才能登录,普通用户不能登录。
6)连接 FE
我们下面通过 MySQL 客户端来连接 Doris FE,下载免安装的 MySQL 客户端
解压刚才下载的 MySQL 客户端,在 bin/ 目录下可以找到 mysql 命令行工具。然后执行下面的命令连接 Doris。mysql -uroot -P9030 -h10.9.70.87
注意:
这里使用的 root 用户是 doris 内置的默认用户,也是超级管理员用户,具体的用户权限查看
权限管理
-P :这里是我们连接 Doris 的查询端口,默认端口是 9030,对应的是fe.conf里的 query_port
-h
: 这里是我们连接的 FE IP地址,如果你的客户端和 FE 安装在同一个节点可以使用127.0.0.1,这种也是 Doris
提供的如果你忘记 root 密码,可以通过这种方式不需要密码直接连接登录,进行对 root 密码进行重置
执行下面的命令查看 FE 运行状态
修改mysql密码
第一次连接,没有密码,这里我们修改root密码
SET PASSWORD FOR 'root' = PASSWORD('Stwc.2wsx');
添加其余的FE节点
ALTER SYSTEM ADD FOLLOWER "JSYF2:9010";ALTER SYSTEM ADD OBSERVER "JSYF1:9010";
删除
ALTER SYSTEM DROP FOLLOWER "JSYF2:9010"; ALTER SYSTEM DROP OBSERVER "JSYF1:9010";
show frontends\G;
然后你可以看到类似下面的结果:
show frontends;
166、168节点fe启动sh /opt/module/apache-doris-fe-1.2.3-bin-x86_64/bin/start_fe.sh --helper 10.9.70.87:9010 --daemon
再次查看show frontends;
Alive全部激活
切记
第一次启动fe一定要用–helper启动,否则启动不成功,无法加入集群,必须借助已经启动的FE节点(master或者follower)来扩容新的节点,helper
不能指向 新FE节点 自身
当新的fe第一次启动失败,或无法加入集群时。修改配置后,一定要先清空fe的meta路径下所有文件,然后再重启fe
迁移到87ansible JSYF4 -m copy -a 'src=/opt/module/apache-doris-fe-1.2.3-bin-x86_64/ dest=/opt/module/apache-doris-fe-1.2.3-bin-x86_64/ mode=755 owner=root'
2、安装BE
1)、拷贝文件到其他3台服务器
ansible JSYF1,JSYF2 -m copy -a 'src=/opt/module/apache-doris-be-1.2.3-bin-x86_64.tar.xz dest=/opt/module mode=755 owner=root'
解压文件ansible JSYF1,JSYF2,JSYF3 -a 'tar -xvf /opt/module/apache-doris-be-1.2.3-bin-x86_64.tar.xz -C /opt/module/'
2)、修改配置文件
vim /opt/module/apache-doris-be-1.2.3-bin-x86_64/conf/be.conf
#配置存储目录
storage_root_path = /opt/module/doris_storage1,10;/opt/module/doris_storage2
#配置IP地址
priority_networks = 10.9.70.166/24
#配置JAVA_HOME
JAVA_HOME=/usr/java/jdk1.8.0_333-amd64
创建存储目录ansible JSYF1,JSYF2,JSYF3 -a 'mkdir /opt/module/doris_storage1 && mkdir /opt/module/doris_storage2'
3)、登陆mysql
mysql -h10.9.70.87 -P 9030 -uroot
登录后添加be节点,port为be上的heartbeat_service_port
端口,默认9050
ALTER SYSTEM ADD BACKEND "JSYF1:9050"; ALTER SYSTEM ADD BACKEND "JSYF2:9050"; ALTER SYSTEM ADD BACKEND "JSYF3:9050";
4)、java-udf-jar-with-dependencies.jar
放到 be/lib
目录下
ansible JSYF1,JSYF2,JSYF3 -m copy -a 'src=/opt/module/java-udf-jar-with-dependencies.jar dest=/opt/module/apache-doris-be-1.2.3-bin-x86_64/lib mode=755 owner=root'
5)、启动be节点 安装到这里了
sh /opt/module/apache-doris-be-1.2.3-bin-x86_64/bin/start_be.sh --daemon
永久修改:
vim /etc/sysctl.confvm.max_map_count=2000000 sysctl -p
将vm.max_map_count=2000000
配置到/etc/sysctl.conf
中,然后执行sysctl -p
生效,重启os后也会持久
#临时 sysctl -w vm.max_map_count=2000000
6)、通过mysql客户端,检测be节点状态,alive必须为true
mysql -h10.9.70.87 -P9030 -uroot -p
SHOW PROC '/backends';
注意,此步的be.conf中 storage_root_path =
/root/apache-doris-0.15/be/storage1,10;/root/apache-doris-0.15/be/storage2一定要配好,否则会启动出错,并且storage1和storage2要删除重新建立
3、broker部署
Broker 是用于访问外部数据源(如 hdfs)的进程。通常,在每台机器上部署一个 broker 实例即可。
在apache-doris-dependencies-1.2.3-bin-x86_64
文件包中
Broker部署
可选,非必须部署,部署FS_BROKER,BROKER以插件的形式,独立与Doris的部署,建议每个PE和BE节点都部署一个Broker,Broker是用于访问外部数据源的进程,默认是HDSF。上传编译好的hdfs_broker。
4、集群启停文件
#!/bin/bash
# use-method: starrocks.sh start|stop|restart
fe_hosts=(JSYF4 JSYF1 JSYF2)
be_hosts=(JSYF1 JSYF2 JSYF3)
broker_hosts=(JSYF1 JSYF2 JSYF3 JSYF4)
case $1 in
"start"){
for i in ${fe_hosts[*]}
do
echo "=================== start $i's fe service ================"
ssh $i "/opt/module/apache-doris-fe-1.2.3-bin-x86_64/bin/start_fe.sh --daemon"
done
for i in ${be_hosts[*]}
do
echo "=================== start $i's be service ================"
ssh $i "/opt/module/apache-doris-be-1.2.3-bin-x86_64/bin/start_be.sh --daemon"
done
for i in ${broker_hosts[*]}
do
echo "=================== start $i's broker service ================"
ssh $i "/opt/module/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/apache_hdfs_broker/bin/stop_broker.sh"
done
for i in ${be_hosts[*]}
do
echo "=================== stop $i's be service ================"
ssh $i "/opt/module/apache-doris-be-1.2.3-bin-x86_64/bin/stop_be.sh"
done
for i in ${fe_hosts[*]}
do
echo "=================== stop $i's fe service ================"
ssh $i "/opt/module/apache-doris-fe-1.2.3-bin-x86_64/bin/stop_fe.sh"
done
};;
"status"){
for i in ${fe_hosts[*]}
do
echo "=================== status $i's fe service ================"
ssh $i "jps | grep StarRocksFE"
done
for i in ${be_hosts[*]}
do
echo "=================== status $i's be service ================"
ssh $i "ps -ef | grep starrocks_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!!! starrocks.sh start|stop|restart"
;;
esac
添加脚本执行权限
sudo +x doris-cluster.sh
5、连接
使用Navicat连接
密码已修改“Stwc.2wsx
”
be的web界面
http://10.9.70.172:18040/
http://10.9.70.168:18040/
http://10.9.70.166:18040/
fe的web界面
http://10.9.70.166:8030/home
http://10.9.70.168:8030/home
http://10.9.70.87:8030/home
四、负载均衡
ProxySQL 方式
ProxySQL 方式负载均衡
五、Stream load 2PC使用方式
在be.conf
中配置disable_stream_load_2pc=false
(重启生效)
并且 在 HEADER
中声明 two_phase_commit=true
。
1、修改配置文件
vim /opt/module/apache-doris-be-1.2.3-bin-x86_64/conf/be.conf
disable_stream_load_2pc=false
2、集群重启
cd /opt/module/ ./doris-cluster.sh restart
【参考】
Doris 部署 (CentOS 原生部署) 2
Doris 部署 (CentOS 原生部署) 2 | 海牛部落 高品质的 大数据技术社区
Doris官网安装部署
安装与部署 - Apache Doris
Doris集群环境搭建
Doris集群环境搭建_doris集群搭建_潮浪之巅的博客-CSDN博客
Centos设置时间同步
Centos设置时间同步 - 马永猛 - 博客园
centos7等各操作系统实现ntp时钟同步 - 码农教程