一、Apache Doris简介
1、Doris概述
Apache Doris是由百度大数据研发部门开发的,之前叫做百度Palo,在2018年贡献给了Apache社区之后,更名为Doris。在百度内部,有超过200个产品线在使用,部署机器超过1000台,单一业务最大可达上百TB。
Apache Doris是一个现代化的MPP(Massively Parallel Processing,即大规模并行处理)分析型数据库产品。仅需亚秒级响应实践即可获得查询结果,有效地支持实时数据分析。Apache Doris的分布式架构非常简洁,易于运维,并且可以支持10PB以上的超大数据集。
Apache Doris可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。
2、Doris架构
Doris 的架构很简洁,只设FE(Frontend)、BE(Backend)两种角色、两个进程,不依赖于外部组件,方便部署和运维,FE、BE都可线性扩展。
- FE(Frontend):存储、维护集群元数据;负责接收、解析查询请求,规划查询计划,调度查询执行,返回查询结果。主要有三个角色:
- (1)Leader 和Follower:主要是用来达到元数据的高可用,保证单节点宕机的情况下,元数据能够实时地在线恢复,而不影响整个服务。
- (2)Observer:用来扩展查询节点,同时起到元数据备份的作用。如果在发现集群压力非常大的情况下,需要去扩展整个查询的能力,那么可以加observer 的节点。observer 不参与任何的写入,只参与读取。
- BE(Backend):负责物理数据的存储和计算;依据FE 生成的物理计划,分布式地执行查询。
- 数据的可靠性由 BE 保证,BE 会对整个数据存储多副本或者是三副本。副本数可根据需求动态调整。
- MySQL Client
- Doris 借助 MySQL 协议,用户使用任意 MySQL 的 ODBC/JDBC 以及 MySQL 的客户端,都可以直接访问Doris。
- Broker
- Broker 为一个独立的无状态进程。封装了文件系统接口,提供 Doris 读取远端存储系统中文件的能力,包括HDFS,S3,BOS 等。
二、Apache Doris部署
1、软硬件要求
1.1:服务规格

1.2:机器节点
我这里规划为:三台机器上部署FE跟BE,注意:一台机器上可以部署多个BE但是只能部署一个FE
主机名称 | 主机IP | 部署服务 | 部署版本 | 部署方式 |
doris-fe_be01 | 192.168.66.151 | FE(LEADER) BE Broker | 1.0.0 | 二进制包 |
doris-fe_be02 | 192.168.66.152 | FE(FOLLOWER) BE Broker | 1.0.0 | 二进制包 |
doris-fe_be03 | 192.168.66.153 | FE(OBSERVER) BE Broker | 1.0.0 | 二进制包 |
官方建议:
- 通常我们建议 10 ~ 100 台左右的机器,来充分发挥 Doris 的性能(其中 3 台部署 FE(HA),剩余的部署 BE)
- 当然,Doris的性能与节点数量及配置正相关。在最少4台机器(一台 FE,三台 BE,其中一台 BE 混部一个 Observer FE 提供元数据备份),以及较低配置的情况下,依然可以平稳的运行 Doris。
- 如果 FE 和 BE 混部,需注意资源竞争问题,并保证元数据目录和数据目录分属不同磁
文章来源(Source):https://www.dqzboy.com 盘。 - Broker 部署
- Broker 是用于访问外部数据源(如 hdfs)的进程。通常,在每台机器上部署一个 broker 实例即可
注意事项(1)
- FE 的磁盘空间主要用于存储元数据,包括日志和 image。通常从几百 MB 到几个 GB 不等。
- BE 的磁盘空间主要用于存放用户数据,总磁盘空间按用户总数据量 * 3(3副本)计算,然后再预留额外 40% 的空间用作后台 compaction 以及一些中间数据的存放。
- 一台机器上可以部署多
文章来源(Source):https://www.dqzboy.com 个 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。
2、安装前准备
- 所有节点都需要安装JDK
rpm -ivh jdk-8u281-linux-x64.rpm
- 下载二进
文章来源(Source):https://www.dqzboy.com 制安装包
- 解压安装包
#在节点1上进行解压安装,然后拷贝给另外的节点即可
[root@doris-fe_be01 soft]# tar -zxvf apache-doris-1.0.0-incubating-bin.tar.gz -C /usr/local/
[root@doris-fe_be01 soft]# cd /usr/local/
[root@doris-fe_be01 local]# mv apache-doris-1.0.0-incubating-bin apache-doris
- MySQL客户端
#卸载掉默认的MariaDB
rpm -e --nodeps mariadb mariadb-libs mariadb-server
#安装MySQL YUM源
rpm -ivh https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm
#导入公钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
#安装MySQL客户端
yum install mysql-community-client
3、部署FE服务
3.1:修改配置
注意:
fe.conf
中 JAVA_OPTS 默认 java 最大堆内存为 4GB,建议生产环境调整至 8G 以上- 生产环境强烈建议
meta_dir
单独指定目录不要放在 Doris安装目录下,最好是单独的磁盘(最后是SSD磁盘) - 如果机器有多个 ip, 比如内网外网 , 虚拟机 docker等 , 需要进行 ip绑定,才能正确识别。
#创建元数据和日志存储目录,FE节点都需要创建
mkdir -p /data/fe/{doris-meta,log}
#修改配置
[root@doris-fe_be01 ~]# vim /usr/local/apache-doris/fe/conf/fe.conf

3.2:启动服务
cat > /usr/lib/systemd/system/doris-fe.service <<EOF
[Unit]
Description=Doris FE Service
Documentation=https://doris.apache.org
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_281-amd64"
User=root
Group=root
ExecStart=/usr/local/apache-doris/fe/bin/start_fe.sh --daemon
ExecStop=/usr/local/apache-doris/fe/bin/stop_fe.sh
ExecReload=/bin/kill --signal HUP
KillMode=control-group
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=default.target
EOF
systemctl daemon-reload && systemctl restart doris-fe.service && systemctl enable doris-fe.service &&systemctl status doris-fe.service
3.3:HA配置
- FE的高可用集群采用主从复制架构, 可避免FE单点故障. FE采用了类raft的bdbje协议完成选主, 日志复制和故障切换. 在FE集群中, 多实例分为两种角色: follower和observer; 前者为复制协议的可投票成员, 参与选主和提交日志, 一般数量为奇数(2n+1), 使用多数派(n+1)确认, 可容忍少数派(n)故障; 而后者属于非投票成员, 用于异步订阅复制日志, observer的状态落后于follower,
文章来源(Source):https://www.dqzboy.com 类似其他复制协议中的leaner角色. - FE集群从follower中自动选出master节点,&n
文章来源(Source):https://www.dqzboy.com bsp; 所有更改状态操作都由master节点执行, 从FE的master节点可以读到最新的状态. 更改操作可以从非master节点发起, 继而转发给master节点执行, 非master节点记录最近一次更改操作在复制日志中的LSN, 读操作可以直接在非master节点上执行, 但需要等待非master节点的状态已经同步到最近一次更改操作的LSN, 因此读写非Master节点满足顺序一致性. Observer节点能够增加FE集群的读负载能力, 时效性要求放宽的非紧要用户可以读observer节点. - FE节点之间的时钟相差不能超过5s, 使用NTP协议校准时间.
- 一台机器上只可以部署单个FE节点。所有FE节点的http_port需要相同。
#连接到FE
[root@doris-fe_be01 ~]# mysql -h 192.168.66.151 -P 9030 -uroot
#默认root无密码,通过以下命令修改 root密码 。
mysql> SET PASSWORD FOR 'root' = PASSWORD('admin123456');
mysql> ALTER SYSTEM ADD FOLLOWER "192.168.66.152:9010";
mysql> ALTER SYSTEM ADD OBSERVER "192.168.66.153:9010";
- 将节点1部署的apache-doris 目录拷贝至所有的FE节点,并登入各个FE节点修改配置,绑定为自己的IP地址
- 节点1上创建FE Follower和 Observer节点systemd启动文件,然后启动服务
cat > /usr/lib/systemd/system/doris-fe.service <<EOF
[Unit]
Description=Doris FE Service
Documentation=https://doris.apache.org
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_281-amd64"
User=root
Group=root
ExecStart=/usr/local/apache-doris/fe/bin/start_fe.sh --helper 192.168.66.151:9010 --daemon
ExecStop=/usr/local/apache-doris/fe/bin/stop_fe.sh
ExecReload=/bin/kill --signal HUP
KillMode=control-group
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=default.target
EOF
systemctl daemon-reload && systemctl restart doris-fe.service && systemctl enable doris-fe.service &&systemctl status doris-fe.service
3.4:检查集群节点
[root@doris-fe_be01 ~]# mysql -h 192.168.66.151 -P 9030 -uroot -p
mysql> SHOW PROC '/frontends'\G

4、部署BE服务
4.1:修改配置
storage_root_path
:默认在be/storage
下,需要手动创建该目录。多个路径之间使用英文状态的分号 ;分隔(最后一个目录后不要加)priority_networks
:修改绑定 ip,每台机器修改成自己的 ipPPROF_TMPDIR
:修改为指定存储的目录
#创建数据和日志存储目录,BE节点都需要创建
mkdir -p /data/be/{doris-storage1,doris-storage2,log}
[root@doris-fe_be01 ~]# vim /usr/local/apache-doris/be/conf/be.conf

将BE相关的配置和目录拷贝至其他的BE节点,然后登入到各个节点修改BE配置文件,修改绑定IP为自己的IP地址
4.2:添加BE节点
[root@doris-fe_be01 ~]# mysql -h 192.168.66.151 -P 9030 -uroot -p
ALTER SYSTEM ADD BACKEND "192.168.66.151:9050";
ALTER SYSTEM ADD BACKEND "192.168.66.152:9050";
ALTER SYSTEM ADD BACKEND "192.168.66.153:9050";
4.3:启动BE服务
cat > /usr/lib/systemd/system/doris-be.service <<EOF
[Unit]
Description=Doris BE Service
Documentation=https://doris.apache.org
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_281-amd64"
User=root
Group=root
ExecStart=/usr/local/apache-doris/be/bin/start_be.sh --daemon
ExecStop=/usr/local/apache-doris/be/bin/stop_be.sh
ExecReload=/bin/kill --signal HUP
KillMode=control-group
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=default.target
EOF
systemctl daemon-reload && systemctl restart doris-be.service && systemctl enable doris-be.service && systemctl status doris-be.service
4.4:检查BE节点
[root@doris-fe_be01 ~]# mysql -h 192.168.66.151 -P 9030 -uroot -p
#Alive为 true表示该 BE节点存活
mysql> SHOW PROC '/backends'\G

三、Apache Doris UI
- 默认使用 Http 协议进行 WebUI 访问,在浏览器输入以下格式地址访问
- http://FE_IP:FE_HTTP_PORT(默认8030)
- 默认账号:root
- 默认密码:数据库root密码

必须 注册 为本站用户, 登录 后才可以发表评论!