说明 :本教程基于Doris 0.15.0+Flink 1.14并兼顾Doris 1.0
第1章 Doris概述
1.1 Doris是什么
Doris是一个现代化的MPP架构的分析型数据库产品,由百度大数据部门研发,之前叫Palo,Palo 这个词来自OLAP 的反转,寓意这是一个 OLAP 系统。2018年Palo被贡献到Apache社区后,因为重名问题更名为Doris。
Doris在百度内部支持超过200个产品线,集群规模上千台,数据规模超10PB,经受了长期的生产验证。

1.2 Doris的核心特性

1.3 Doris架构
Doris借鉴了Google Mesa数据模型,改造Apache Impala(MPP Query Engine),基于Apache ORCFile (存储格式,编码和压缩)自研存储引擎。
Doris之所以要借鉴整合这三项技术,主要基于如下原因:
Mesa可以满足我们许多存储需求的需求,但是Mesa本身不提供SQL查询引擎。
Impala是一个非常好的MPP SQL查询引擎,但是缺少完美的分布式存储引擎。
自研列列式存储:存储层对存储数据的管理通过storage_root_path路径进行配置,路径可以是多个。存储目录下一层按照分桶进行组织,分桶目录下存放具体的tablet,按照tablet_id命名子目录。
因此选择了这三种技术的组合。

Doris 的架构很简洁,主要只设 FE(Frontend)、BE(Backend)两种角色、两类进程,不依赖于外部组件,方便部署和运维。FE、BE都可以线性扩展。
FE
Leader 和 Follower:主要是用来保证元数据的高可用,保证单节点宕机的情况下, 元数据能够实时地在线恢复,而不影响整个服务。Leader是基于paxos协议选举出来的(负责读写)。
observer只是用来扩展查询节点,就是说如果在发现集群压力非常大的情况下,需要去扩展整个查询的能力,那么可以加observer的节点。observer不参与任何的写入,只参与读取(读)。
Doris 系统的元数据管理(存储、维护集群元数据)
负责接收、解析查询请求,规划查询计划,调度查询执行,返回查询结果
节点调度,在导入流程中主要负责导入 plan 生成和导入任务的调度工作
Java语言开发,主要负责三方面工作:
FE又分为三种角色:
BE
C++语言开发,Doris 系统的计算和存储节点,执行SQL计划等。在导入流程中主要负责数据的 ETL 和存储。
MySQL Client
Doris 借助 MySQL 协议,用户使用任意 MySQL 的 ODBC/JDBC以及MySQL 的客户端,都可以直接访问 Doris。
Broker
Broker 为一个独立的无状态进程。封装了文件系统接口,提供 Doris 读取远端存储系统中文件的能力,包括HDFS,S3,BOS等
1.4 横向对比
| OLAP | 优点 | 缺点 | 外部依赖 | SQL支持 | 运维成本 | 适用场景 | 存储引擎 |
|---|---|---|---|---|---|---|---|
| ClickHouse | 高效列列式存储单节点性能强劲向量化查询保留明细数据 | 运维成本较高在线扩展能力稍显不足 | 中 | 非标准 | 高 | 全面 | 纯列式OLAP |
| Druid | 实时摄取列式存储位图索引高并发 | 使用门槛高运维复杂仅支持聚合查询 | 中 | 非标准 | 很高 | 局限 | MOLAP |
| TiDB | HTAP同时支持明细和聚合查询高度兼容MySQL | OLAP能力不足 | 低 | 兼容MySQL协议 | 低 | 全面 | HTAP |
| Kylin | 预聚合之后多维分析性能强悍支持超大规模数据支持标准SQL易用性好 | 1.x、2.x、3.x依赖Hadoop仅支持聚合查询 | 高 | SQL标准 | 中 | 局限 | MOLAP |
| Doris | 主键更新高效Rollup高并发和高吞吐可选支持聚合和明细查询没有外部依赖 | 生态成熟度不足 | 低 | 兼容MySQL协议 | 低 | 全面 | ROLAP |
1.5 适用场景
Apache Doris 可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等(基于明细数据)。
1.6 谁在使用Doris

第2章 快速开始
对于想快速熟悉 Doris的同学,可以参考官方的快速开始文档非常便捷的搭建一个学习环境,详见如下链接:
https://doris.apache.org/zh-CN/get-starting/get-starting.html#%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87
注意:想学习生产环境如何部署的,请参考《第3章 编译部署》
第3章 编译部署
3.1 两种编译方式
Doris官方未提供预编译的安装包,因此需要自己编译。
由于Doris的FE和BE分别采用Java和C++语言开发,直接编译需要充分的编译环境准备,相对比较复杂,为了简化编译,官方直接给出了编译环境的Docker开发镜像。
| 编译方式 | 说明 |
|---|---|
| 直接编译 | 需要自己准备编译环境,比较复杂,不推荐 |
| Docker开发镜像编译 | Docker开发镜像已经内置了完整的编译环境,下载源代码既可编译,推荐使用 |
注意:Doris 1.0开始提供预编译的安装包了
3.2 Docker开发镜像编译
1、部署Docker环境
找一台机器(推荐Linux环境),部署Docker环境,这里不再赘述。
2、下载源代码
https://doris.apache.org/zh-CN/downloads/downloads.html#doris-%E4%B8%BB%E4%BB%A3%E7%A0%81
wget http://archive.apache.org/dist/incubator/doris/0.15.0-incubating/apache-doris-0.15.0-incubating-src.tar.gz
下载后解压缩:
tar -zxvf apache-doris-0.15.0-incubating-src.tar.gz
3、下载Docker开发镜像
镜像版本如下,我们选择【apache/incubator-doris:build-env-for-0.15.0】:
| 镜像版本 | doris 版本 |
|---|---|
| apache/incubator-doris:build-env | 0.8.x, 0.9.x |
| apache/incubator-doris:build-env-1.1 | 0.10.x, 0.11.x |
| apache/incubator-doris:build-env-1.2 | 0.12.x - 0.14.0 |
| apache/incubator-doris:build-env-1.3.1 | 0.14.x |
| apache/incubator-doris:build-env-for-0.15.0 | 0.15.0 |
| apache/incubator-doris:build-env-latest | |
| apache/incubator-doris:build-env-ldb-toolchain-latest |
docker pull apache/incubator-doris:build-env-for-0.15.0注意:从Doris 0.15.0开始,开发镜像的版本和 Doris的版本统一了
镜像下载完成后,通过如下命令查看镜像是否下载完成:
docker images|grep doris

4、配置maven私服
为了加速jar包下载,建议配置阿里云的maven私服:
vi home/hadoop/opensource/apache-doris-0.15.0-incubating-src/fe/pom.xml
在标签下添加:
<repository><id>aliyun</id><url>http://maven.aliyun.com/nexus/content/groups/public/</url></repository>
5、挂载本地目录运行镜像
在正式运行镜像之前,建议挂载本地 Doris 源码目录,这样镜像中编译产出的二进制文件会存储在宿主机中,不会因为镜像退出而消失。
同时,建议同时将镜像中 maven 的 .m2 目录挂载到宿主机目录,以防止每次启动镜像编译时,重复下载 maven的依赖库。
命令格式如下,注意替换为自己的实际目录:
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/ \apache/incubator-doris:build-env-ldb-toolchain-latest
我的具体命令如下:
docker run -it \-v home/hadoop/.m2:/root/.m2 \-v home/hadoop/opensource/apache-doris-0.15.0-incubating-src/:/root/apache-doris-0.15.0-incubating-src/ \apache/incubator-doris:build-env-for-0.15.0
6、切换JDK版本
在容器里执行,开发镜像中默认是JDK 11,所以需要先切换到JDK 8:
alternatives --set java java-1.8.0-openjdk.x86_64alternatives --set javac java-1.8.0-openjdk.x86_64export JAVA_HOME=/usr/lib/jvm/java-1.8.0
7、正式编译
cd /root/apache-doris-0.15.0-incubating-srcsh build.sh
特别注意:如果你是第一次使用 build-env-for-0.15.0
或之后的版本,第一次编译的时候要使用如下命令:
sh build.sh --clean --be --fe --ui
这是因为 build-env-for-0.15.0
版本镜像升级了 thrift(0.9 -> 0.13),需要通过 --clean 命令强制使用新版本的 thrift 生成代码文件,否则会出现不兼容的代码。
编译完成后,产出文件在 output/
目录中。

3.3 环境要求
Doris 作为一款开源的 MPP 架构 OLAP 数据库,能够运行在绝大多数主流的商用服务器上。为了能够充分运用MPP 架构的并发优势,以及 Doris 的高可用特性,我们建议 Doris 的部署遵循以下需求:
3.3.1 软硬件需求
1、操作系统版本要求
| Linux 系统 | 版本 |
|---|---|
| CentOS | 7.1 及以上 |
| Ubuntu | 16.04 及以上 |
2、软件需求
| 软件 | 版本 |
|---|---|
| Java | 1.8 及以上 |
| GCC | 4.8.2 及以上 |
3、操作系统优化
操作系统优化在生产环境尤为关键,开发测试环境无需纠结。
设置系统最大打开文件句柄数
vi etc/security/limits.conf* soft nofile 65536* hard nofile 65536
时钟同步
Doris 的元数据要求时间精度要小于5000ms,所以所有集群所有机器要进行时钟同步,避免因为时钟问题引发的元数据不一致导致服务出现异常。
关闭交换分区(swap)
Linux交换分区会给Doris带来很严重的性能问题,需要在安装之前禁用交换分区。
如下命令可以确定是否关闭了swap:
free -m
Liunx文件系统
这里我们推荐使用ext4文件系统,在安装操作系统的时候,请选择ext4文件系统。
如下命令可查看文件系统类型:
df -Th
4、开发测试环境推荐配置
| 模块 | CPU | 内存 | 磁盘 | 网络 | 实例数量 |
|---|---|---|---|---|---|
| Frontend | 8核+ | 8GB+ | SSD 或 SATA,10GB+ * | 千兆网卡 | 1 |
| Backend | 8核+ | 16GB+ | SSD 或 SATA,50GB+ * | 千兆网卡 | 1-3 * |
5、生产环境推荐配置
| 模块 | CPU | 内存 | 磁盘 | 网络 | 实例数量 |
|---|---|---|---|---|---|
| Frontend | 16核+ | 64GB+ | SSD 或 RAID 卡,100GB+ * | 万兆网卡 | 1-5 * |
| Backend | 16核+ | 64GB+ | SSD 或 SATA,100G+ * | 万兆网卡 | 10-100 * |
6、特别注意
FE 的磁盘空间主要用于存储元数据,包括日志和 image。通常从几百 MB 到几个 GB 不等。
BE 的磁盘空间主要用于存放用户数据,总磁盘空间按用户总数据量 * 3(3副本)计算,然后再预留额外 40%的空间用作后台 compaction 以及一些中间数据的存放。
一台机器上可以部署多个 BE 实例,但是只能部署一个 FE。如果需要 3 副本数据,那么至少需要 3 台机器各部署一个 BE 实例(而不是1台机器部署3个BE实例)。多个FE所在服务器的时钟必须保持一致(允许最多5秒的时钟偏差)
测试环境也可以仅适用一个 BE 进行测试。实际生产环境,BE 实例数量直接决定了整体查询延迟。
所有部署节点关闭 Swap。
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。
Broker 是用于访问外部数据源(如 hdfs)的进程。通常,在每台机器上部署一个 broker 实例即可。
因为存在多IP的情况,必须明确在fe和be的配置文件中配置绑定的IP(例如:priority_networks=10.1.3.0/24)
doris默认为表名大小写敏感,如有表名大小写不敏感的需求需在集群初始化时进行设置。表名大小写敏感性在集群初始化完成后不可再修改。
2.3.2 网络需求
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,用于接收请求 |
当部署多个 FE 实例时,要保证 FE 的 http_port 配置相同。
部署前请确保各个端口在应有方向上的访问权限。
3.4 集群部署
3.4.1 部署规划
| node01 | node02 | node03 |
|---|---|---|
| fe(Leader) | fe(Follower) | fe(Observer) |
| be | be | be |
| broker | broker | broker |
3.4.2 配置并启动fe
我们先部署一个fe节点到node01:
创建安装目录
mkdir /home/hadoop/app/apache-doris-0.15.0
拷贝编译好的文件到安装目录
cp -r /home/hadoop/opensource/apache-doris-0.15.0-incubating-src/output/* /home/hadoop/app/apache-doris-0.15.0
创建元数据存储目录
mkdir /home/hadoop/app/apache-doris-0.15.0/doris-meta
注意:生产环境强烈建议单独指定目录不要放在Doris安装目录下,最好是单独的磁盘(如果有SSD最好),测试开发环境可以使用默认配置
修改配置
vi /home/hadoop/app/apache-doris-0.15.0/fe/conf/fe.conf
#指定元数据路径:meta_dir = /home/hadoop/app/apache-doris-0.15.0/doris-meta#修改绑定 ip(每台机器修改成自己的ip)priority_networks = 192.168.2.36/24
注意:JAVA_OPTS 默认 java 最大堆内存为 4GB,建议生产环境调整至 8G 以上
注意:priority_networks = 192.168.8.101/24
末尾的24为子网掩码简写:
默认子网掩码表:
| 默认子网掩码 | 子网掩码简写 |
|---|---|
| 255.0.0.0 | 8 |
| 255.255.0.0 | 16 |
| 255.255.255.0 | 24 |
在子网划分中,也可能会出现25到30位子网掩码,下面是常⻅见子网掩码表:
启动FE
/home/hadoop/app/apache-doris-0.15.0/fe/bin/start_fe.sh --daemon
3.4.3 配置be
be节点直接部署在node01-node03上。
分发be到各个节点
scp -r /home/hadoop/app/apache-doris-0.15.0/be hadoop@node02:/home/hadoop/app/apache-doris-0.15.0scp -r /home/hadoop/app/apache-doris-0.15.0/be hadoop@node03:/home/hadoop/app/apache-doris-0.15.0
所有节点创建数据目录
我们每个节点创建2个目录,已理解多目录的配置:
mkdir /home/hadoop/app/apache-doris-0.15.0/doris-storage1mkdir /home/hadoop/app/apache-doris-0.15.0/doris-storage2
所有节点修改be配置
vi /home/hadoop/app/apache-doris-0.15.0/be/conf/be.conf
主要修改如下配置:
#配置文件中指定数据存放路径:storage_root_path = /home/hadoop/app/apache-doris-0.15.0/doris-storage1;/home/hadoop/app/apache-doris-0.15.0/doris-storage2#修改绑定 ip(每台机器修改成自己的 ip)priority_networks = 192.168.2.36/24
storage_root_path默认在be/storage下,需要手动创建该目录。多个路径之间使用英文状态的分号 ; 分隔(最后一个目录后不要加 ;)。可以通过路径区别存储目录的介质,HDD或SSD。可以添加容量限制在每个路径的末尾,通过英文状态逗号 , 隔开。例如:
storage_root_path=/home/disk1/doris.HDD,50;/home/disk2/doris.SSD,10;/home/disk2/doris
说明:
/home/disk1/doris.HDD,50
,表示存储限制为50GB,HDD;/home/disk2/doris.SSD,10
,存储限制为10GB,SSD;/home/disk2/doris
,存储限制为磁盘最大容量,默认为HDD
另外还可以这么配置:
storage_root_path=/home/disk1/doris,medium:hdd,capacity:50;/home/disk2/doris,medium:ssd,capacity:50
/home/disk1/doris,medium:hdd,capacity:10
,表示存储限制为10GB, HDD;/home/disk2/doris,medium:ssd,capacity:50
,表示存储限制为50GB, SSD
3.4.4 添加be到集群
BE节点需要先在 FE 中添加,才可加入集群。可以使用 mysql-client 连接到 FE进行BE的添加。
安装MySQL Client
我们早就安装了,注意就是我们安装MySQL时安装的那个MySQL Client。
通过MySQL Client连接FE
mysql -h node01 -uroot -P 9030
默认 root 无密码,通过以下命令修改 root 密码:
SET PASSWORD FOR 'root' = PASSWORD('root%123');
添加BE
ALTER SYSTEM ADD BACKEND "node01:9050";ALTER SYSTEM ADD BACKEND "node02:9050";ALTER SYSTEM ADD BACKEND "node03:9050";
查看BE状态
-- 查看be状态SHOW PROC '/backends';-- 查看fe状态SHOW PROC '/frontends';
3.4.5 启动be
/home/hadoop/app/apache-doris-0.15.0/be/bin/start_be.sh --daemon
3.4.6 部署broker【可选】
注意:broker不是必须部署的。
Broker 以插件的形式,独立于 Doris 部署。如果需要从第三方存储系统导入数据到Doris,就需要部署相应的Broker,默认提供了读取 HDFS 、百度云 BOS 及 Amazon S3 的 fs_broker。fs_broker 是无状态的,建议每一个FE 和 BE 节点都部署一个 Broker。
编译broker
《3.2 Docker开发镜像编译》中编译时没有编译broker,这里需要单独编译。
同上,先启动Doris的Docker开发镜像容器:
docker run -it \-v /home/hadoop/.m2:/root/.m2 \-v /home/hadoop/opensource/apache-doris-0.15.0-incubating-src/:/root/apache-doris-0.15.0-incubating-src/ \apache/incubator-doris:build-env-for-0.15.0
编译:
cd /root/apache-doris-0.15.0-incubating-src/fs_brokers/apache_hdfs_brokersh build.sh
编译完之后,安装包在宿主机的/home/hadoop/opensource/apache-doris-0.15.0-incubating-src/fs_brokers/apache_hdfs_broker/output
下,拷贝output 目录下的相应 Broker 目录到需要部署的所有节点上。建议和 BE 或者 FE 目录保持同级。
scp -r /home/hadoop/opensource/apache-doris-0.15.0-incubating-src/fs_brokers/apache_hdfs_broker/output/apache_hdfs_brokerhadoop@node01:/home/hadoop/app/apache-doris-0.15.0scp -r /home/hadoop/opensource/apache-doris-0.15.0-incubating-src/fs_brokers/apache_hdfs_broker/output/apache_hdfs_brokerhadoop@node02:/home/hadoop/app/apache-doris-0.15.0scp -r /home/hadoop/opensource/apache-doris-0.15.0-incubating-src/fs_brokers/apache_hdfs_broker/output/apache_hdfs_brokerhadoop@node03:/home/hadoop/app/apache-doris-0.15.0
配置broker
有必要可以在相应 broker/conf/ 目录下对应的配置文件中,可以修改相应配置,我们这里暂时不做修改。
启动broker
再部署的broker的所有节点上启动broker:
/home/hadoop/app/apache-doris-0.15.0/apache_hdfs_broker/bin/start_broker.sh --daemon
添加broker到集群
要让 Doris 的 FE 和 BE 知道 Broker 在哪些节点上,通过 sql 命令添加 Broker 节点列表。
连接MySQL客户端:
mysql -h node01 -uroot -P 9030
添加broker:
ALTER SYSTEM ADD BROKER hdfs_broker "node01:8000","node02:8000","node03:8000";
hdfs_broker是给broker起得名字,也可以单独添加分别起名字,broker的端口号默认为8000,可以在配置文件里修改。
查看broker状态
可以直接在MySQL Client终端查看broker状态:
SHOW PROC "/brokers";
也可以通过fe的web ui查看状态。
注意:在生产环境中,所有实例都应使用守护进程启动,以保证进程退出后,会被自动拉起,如 Supervisor
3.4.7 查看fe的web ui
http://node01:8030
3.5 扩缩容
3.5.1 fe扩缩容
3.5.1.1 增加fe节点
FE 分为 Leader,Follower 和 Observer 三种角色。默认一个集群,只能有一个 Leader,可以有多个 Follower 和Observer。其中 Leader 和 Follower 组成一个 Paxos 选择组,如果 Leader 宕机,则剩下的 Follower 会自动选出新的 Leader,保证写入高可用。Observer 同步 Leader 的数据,但是不参加选举。如果只部署一个 FE,则 FE 默认就是 Leader。
第一个启动的 FE 自动成为 Leader。在此基础上,可以添加若⼲干 Follower 和 Observer。
1、添加新fe到集群
我们准备在node02上启动1个Follower,在node03上启动一个Observer。
使用 mysql-client 连接到已启动的 FE,并执行:
-- ALTER SYSTEM ADD FOLLOWER "follower_host:edit_log_port";-- ALTER SYSTEM ADD OBSERVER "observer_host:edit_log_port";ALTER SYSTEM ADD FOLLOWER "node02:9010";ALTER SYSTEM ADD OBSERVER "node03:9010";
其中 follower_host和observer_host 为 Follower 或 Observer 所在节点 ip,edit_log_port 在其配置文件 fe.conf中。
注意:添加的时候注意角色的区别
2、配置新fe
分发fe到node02和node03节点:
scp -r /home/hadoop/app/apache-doris-0.15.0/fe hadoop@node02:/home/hadoop/app/apache-doris-0.15.0scp -r /home/hadoop/app/apache-doris-0.15.0/fe hadoop@node03:/home/hadoop/app/apache-doris-0.15.0
修改配置文件
在node02和node03节点:
mkdir /home/hadoop/app/apache-doris-0.15.0/doris-meta
修改配置,主要是meta_dir
和priority_networks
:
#指定元数据路径:meta_dir = /home/hadoop/app/apache-doris-0.15.0/doris-meta#修改绑定 ip(每台机器修改成自己的ip)priority_networks = 192.168.2.36/24
3、启动新fe
第一次启动时,需执行以下命令:
-- ./bin/start_fe.sh --helper leader_fe_host:edit_log_port --daemon/home/hadoop/app/apache-doris-0.15.0/fe/bin/start_fe.sh --helper node01:9010 --daemon
注意:其中 leader_fe_host
为 Leader 所在节点 ip, edit_log_port 在 Leader 的配置文件 fe.conf 中。--helper
参数仅在 follower 和 observer 第一次启动时才需要。
4、检查状态
SHOW PROC '/frontends';
FE 扩容注意事项:
Follower FE(包括 Leader)的数量必须为奇数,建议最多部署 3 个组成高可用(HA)模式即可。
当 FE 处于高可用部署时(1个 Leader,2个 Follower),我们建议通过增加 Observer FE 来扩展 FE 的读服务能力。当然也可以继续增加 Follower FE,但几乎是不必要的。
通常一个 FE 节点可以应对 10-20 台 BE 节点。建议总的 FE 节点数量在 10 个以下。而通常 3 个即可满足绝大部分需求。
helper 不能指向 FE 自身,必须指向一个或多个已存在并且正常运行中的 Master/Follower FE。
3.5.1.2 删除fe节点
使用以下命令删除对应的 FE 节点:
ALTER SYSTEM DROP FOLLOWER[OBSERVER] "fe_host:edit_log_port";
FE 缩容注意事项:
删除 Follower FE 时,确保最终剩余的 Follower(包括 Leader)节点为奇数。
删除完记得把对应的服务停掉。
3.5.2 be扩缩容
BE 节点的扩容和缩容过程,不影响当前系统运行以及正在执行的任务,并且不会影响当前系统的性能。数据均衡会自动进行。根据集群现有数据量的大小,集群会在几个小时到1天不等的时间内,恢复到负载均衡的状态。集群负载情况,可以参见 Tablet 负载均衡文档。
3.5.2.1 增加be节点
BE 节点的增加方式同 《3.4 集群部署》 一节中的配置和BE的方式,通过 ALTER SYSTEM ADD BACKEND 命令增加BE 节点。
3.5.2.2 删除be节点
删除 BE 节点有两种方式:DROP 和 DECOMMISSION
1、DROP方式(强烈不推荐):
ALTER SYSTEM DROP BACKEND "be_host:be_heartbeat_service_port";
注意:DROP BACKEND 会直接删除该 BE,并且其上的数据将不能再恢复!!!强烈不推荐使用 DROP BACKEND 这种方式删除 BE 节点。当你使用这个语句时,会有对应的防误操作提示。
2、DECOMMISSION(推荐):
ALTER SYSTEM DECOMMISSION BACKEND "be_host:be_heartbeat_service_port";
DECOMMISSION 命令说明:
该命令用于安全删除 BE 节点。命令下发后,Doris 会尝试将该 BE 上的数据向其他 BE 节点迁移,当所有数据都迁移完成后,Doris 会自动删除该节点。
该命令是一个异步操作。执行后,可以通过
SHOW PROC '/backends';
看到该 BE 节点的isDecommission
状态为 true。表示该节点正在进行下线。该命令不一定执行成功。比如剩余 BE 存储空间不足以容纳下线 BE 上的数据,或者剩余机器数量不满足最小副本数时,该命令都无法完成,并且 BE 会一直处于 isDecommission 为 true 的状态。
DECOMMISSION 的进度,可以通过 SHOW PROC '/backends'; 中的 TabletNum 查看,如果正在进行,TabletNum 将不断减少。
该操作可以通过:
CANCEL DECOMMISSION BACKEND "be_host:be_heartbeat_service_port";
命令取消。取消后,该 BE 上的数据将维持当前剩余的数据量。后续 Doris 重新进行负载均衡
3.5.3 broker扩缩容
Broker 实例的数量没有硬性要求。通常每台物理机部署一个即可。Broker 的添加和删除可以通过以下命令完成:
ALTER SYSTEM ADD BROKER broker_name "broker_host:broker_ipc_port";ALTER SYSTEM DROP BROKER broker_name "broker_host:broker_ipc_port";ALTER SYSTEM DROP ALL BROKER broker_name;
Broker 是无状态的进程,可以随意启停。当然,停止后,正在其上运行的作业会失败,重试即可。
视频地址 https://www.bilibili.com/video/BV1oB4y1D7Fo/
课件地址:关注本公众号“学习面试”并回复 0116 即可获取课件地址。
课程咨询请





