ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Doris集群扩缩容实战:FE、BE、BROKER组件弹性伸缩原理与避坑指南

2026/8/17 20:49:59 拓冰建站 浏览量
Doris集群扩缩容实战:FE、BE、BROKER组件弹性伸缩原理与避坑指南 1. 项目概述理解Doris集群扩缩容的核心价值在数据驱动的业务场景里我们搭建的Doris集群从来都不是一成不变的。业务量可能激增也可能在某个活动后回落数据模型会随着产品迭代而调整甚至为了成本优化我们需要动态调整资源。这时候集群的扩缩容能力就成了衡量一个数据平台是否具备生产级弹性的关键指标。今天我们就来深入聊聊Doris中FEFrontend、BEBackend和BROKER这三个核心组件的扩缩容操作。这不仅仅是执行几条命令更重要的是理解其背后的设计原理、操作时序以及那些官方文档里不会明说的“坑点”。无论是你刚完成单机部署想迈向集群还是正在为“双十一”大促做容量规划掌握这套“伸缩术”都能让你在面对数据洪流时更加从容。简单来说FE负责元数据管理和查询协调BE负责数据存储与计算BROKER则负责与外部存储系统如HDFS、S3进行数据导入导出。它们的扩缩容直接关系到集群的元数据高可用、数据存储与计算能力、以及外部数据交互的吞吐量。一个配置不当的扩容可能导致负载不均甚至服务抖动而一次鲁莽的缩容则可能直接引发数据丢失。因此我将结合多次在生产环境中的实操经验为你拆解每一步操作背后的逻辑、最佳实践以及避坑指南。2. 集群架构与扩缩容设计思路拆解在动手之前我们必须先建立起对Doris集群架构的清晰认知。这能帮助你在扩缩容时做出正确的决策。2.1 FE、BE、BROKER的角色再认识很多人把Doris的架构简单理解为“一个主从结构”但这并不精确。FE节点内部有Follower和Observer两种角色。通常我们会部署奇数个如3个Follower组成一个高可用组通过类Paxos的BDB JE协议进行元数据同步其中一个被选举为Leader对外提供服务。Observer则只同步元数据不参与选举用于扩展集群的读连接能力。因此FE的扩容往往是为了增加元数据服务的读吞吐加Observer或提升高可用性将Follower从1个增至3个而FE的缩容则需极其谨慎尤其是对Follower节点。BE节点是完全对等的每个BE都存储一部分数据分片Tablet并执行查询计划中的计算任务。BE的扩容本质上是为集群增加新的存储与计算资源。Doris通过一套自动的负载均衡机制会将新写入的数据或存量数据的一部分逐步迁移到新BE上以实现集群层面的负载均衡。BROKER是一个无状态的代理服务。它的扩容非常简单就是启动新的Broker进程并注册到FE缩容也只需在FE中删除其注册信息并停止进程。它的核心价值在于当你有大量数据需要从HDFS或对象存储导入时多个Broker可以并行工作显著提升数据吞吐量。2.2 扩缩容的核心逻辑与影响范围扩缩容操作的核心逻辑是“先增后减”和“状态同步”。对于扩容无论是FE、BE还是BROKER通用步骤都是准备节点 - 启动服务 - 向集群注册。关键在于“注册”之后集群需要时间来完成状态同步。对于FE Observer它需要从Leader拉取完整的元数据快照对于BE它需要被纳入集群的调度范围并开始接收数据迁移任务对于BROKERFE需要感知到新的可用端点。对于缩容尤其是BE的缩容其核心逻辑是数据搬迁。你不能直接停止一个存有数据的BE因为那会导致数据丢失。Doris的缩容流程是先在FE上标记该BE为“下线中”decommission然后系统会自动将这个BE上的所有数据副本Tablet迁移到其他健康的BE上。只有等所有数据迁移完成后这个BE才能真正安全地移除。这是一个异步的、可能耗时很长的过程。注意FE Follower的缩容是风险最高的操作之一。因为Follower参与元数据选举直接移除可能导致选举组节点数变为偶数在特定故障场景下无法选出Leader引发集群不可用。通常生产环境不建议对Follower进行缩容如果必须操作需确保剩余Follower为奇数并在业务低峰期进行。3. FE节点的扩缩容实战详解FE节点管理着集群的“大脑”——元数据其扩缩容操作需要格外的细致。3.1 FE扩容增加Observer提升读能力假设我们已有一个由3个Followerfe1, fe2, fe3组成的集群现在需要增加一个Observerfe4来分担客户端的连接压力。第一步准备新节点在新机器上完成与现有集群相同版本的Doris安装、JDK环境配置。最关键的一步是拷贝元数据。虽然Observer启动后会从Leader同步数据但一个空的启动过程会非常慢。更优的做法是从一个现有的Follower节点拷贝元数据目录通常是doris-fe/doris-meta/到新节点的相同位置。这相当于做了一个“基线备份”能极大加快Observer的启动和同步速度。第二步修改配置文件编辑新节点fe.conf重点配置# 指定当前节点角色为 OBSERVER role OBSERVER # 设置当前节点IP和端口 priority_networks 192.168.1.100/24 # 指向现有集群中任一Follower的地址用于获取集群信息 helper_node 192.168.1.1:9010priority_networks用于在有多网卡的机器上明确指定服务IP避免绑定错误。第三步启动并注册节点启动FE服务./bin/start_fe.sh --daemon在现有集群的任一Follower节点上使用MySQL客户端连接执行扩容命令ALTER SYSTEM ADD OBSERVER fe4_host:9010;这里的fe4_host:9010是新Observer的IP和EDIT LOG端口默认为9010。第四步验证状态执行SHOW PROC /frontends;命令。观察新增的fe4节点其Alive列应为trueRole列应为OBSERVER并且IsMaster列为false。你还可以关注LastStartTime和LastHeartbeat来确认其运行状态。实操心得在启动Observer前务必确保从现有Follower拷贝的元数据目录的权限正确尤其是如果用了非root用户启动。我曾遇到过因元数据文件权限问题导致Observer启动后反复报错无法加入集群的情况排查了很久。3.2 FE缩容安全移除Follower或Observer移除Observer这是最简单的。直接在Leader FE上执行ALTER SYSTEM DROP OBSERVER fe4_host:9010;命令执行后该Observer节点将从元数据中删除。之后你即可安全地停止fe4上的FE进程。移除Follower极度危险非必要不操作。如果确需操作例如机器故障需替换建议采用“替换”而非“删除”的思路。首先参照扩容步骤准备并启动一个新的Follower节点假设为fe5并加入集群。确保其状态健康。然后再执行命令移除旧的Follower节点假设为fe1ALTER SYSTEM DROP FOLLOWER fe1_host:9010;等待命令完成后停止fe1的进程。关键检查点执行SHOW PROC /frontends;确认节点已被移除且剩余的Follower数量为奇数。同时监控集群的读写操作是否正常因为元数据组变更期间可能会有短暂抖动。4. BE节点的扩缩容实战与负载均衡BE的扩缩容直接关系到数据分布和查询性能是日常运维中最常见的操作。4.1 BE扩容平滑注入新存储与算力第一步部署与启动在新服务器上安装Doris BE配置be.conf特别是storage_root_path数据存储路径和priority_networks。配置完成后直接启动BE服务./bin/start_be.sh --daemon。第二步将BE加入集群连接到FE执行ALTER SYSTEM ADD BACKEND be_new_host:9050;9050是BE的心跳服务端口。第三步理解并监控负载均衡添加BE后集群不会立即达到均衡。Doris的负载均衡是一个后台自动执行的渐进过程。你可以通过命令查看均衡状态和进度SHOW PROC /cluster_balance/cluster_load_stat\G或者查看更详细的调度任务SHOW PROC /cluster_balance/pending_tablets;系统会根据各BE的磁盘容量、数据量分数自动调度Tablet副本从负载高的BE迁移到负载低的BE。这个过程可能会持续数小时甚至数天取决于数据量大小和迁移速度参数如tablet_sched_slot_num_per_path。第四步调整均衡参数可选如果希望加快均衡速度可以临时调整FE的动态参数需ADMIN权限SET GLOBAL tablet_sched_slot_num_per_path 8; -- 默认是4表示每个磁盘路径同时执行迁移的任务数 SET GLOBAL tablet_sched_max_scheduling_tablets 2000; -- 默认1000最大同时调度的tablet数注意事项调高这些参数会加大BE的I/O和网络压力可能影响在线查询性能。建议在业务低峰期调整并在均衡完成后调回默认值。4.2 BE缩容安全下线与数据迁移这是比扩容更需要耐心和监控的操作。我们的目标是让目标BE上的所有数据都“搬家”到其他BE。第一步执行下线命令假设我们要下线be_old_host:9050。ALTER SYSTEM DECOMMISSION BACKEND be_old_host:9050;这条命令会触发集群对该BE进行下线操作。系统会开始将其上的所有Tablet副本迁移到其他BE。第二步密切监控迁移进度下线是一个异步任务。必须持续监控直到完成。查看BE状态SHOW PROC /backends;找到目标BE其SystemDecommissioned列会显示trueTabletNum会逐渐减少至0。查看迁移任务SHOW PROC /cluster_balance/pending_tablets;这里会显示正在调度和迁移的Tablet信息。查看错误信息SHOW PROC /cluster_balance/error_tablets;如果迁移过程中出现错误如目标BE磁盘满会在这里显示。第三步确认完成并移除当SHOW PROC /backends;中目标BE的TabletNum变为0并且LastStreamLoadTime不再更新时表示数据迁移已完成。此时该BE已不再存储任何数据。 执行移除命令ALTER SYSTEM DROP BACKEND be_old_host:9050;之后即可安全关闭该服务器上的BE进程。常见问题与避坑下线卡住最常见的原因是集群没有足够的剩余空间来接收迁移的数据。在执行缩容前务必确保其他BE的磁盘使用率有足够余量建议低于70%。如果卡住需要先清理数据或扩容其他BE。副本修复与下线冲突如果该BE上某个Tablet的唯一副本损坏而下线任务又需要迁移它可能会失败。需要先通过ADMIN REPAIR TABLE命令修复副本或调整副本数量。耐心等待对于存储了数十TB数据的BE下线过程可能持续好几天。在此期间除非必要不要重启该BE或FE也不要重复执行下线命令。5. BROKER节点的扩缩容操作BROKER的扩缩容最为轻量因为它无状态。扩容在新节点安装并配置Broker主要修改apache_hdfs_broker.conf中的broker_ipc_port等。启动Broker./bin/start_broker.sh --daemon在FE上注册新BrokerALTER SYSTEM ADD BROKER broker_name new_broker_host:8000;broker_name是一个逻辑分组名所有相同名字的Broker构成一个组。缩容在FE上删除Broker注册信息ALTER SYSTEM DROP BROKER broker_name old_broker_host:8000;停止对应节点上的Broker进程即可。使用技巧在通过Broker执行HDFS数据导入时可以在LOAD语句的WITH BROKER子句中指定Broker组名。Doris会在该组内所有活跃的Broker中自动进行负载均衡。因此增加Broker节点是提升批量导入性能的有效手段。6. 扩缩容全景监控与问题排查实录仅仅执行命令是不够的没有监控的运维操作就是“盲人摸象”。下面是我在实践中总结的一套监控清单和问题排查方法。6.1 核心监控指标看板在扩缩容期间你需要重点关注以下指标建议在运维看板上集中展示组件监控项查看命令/方式健康状态说明FE节点存活与角色SHOW PROC /frontends;所有节点AlivetrueFollower数量为奇数有且仅有一个IsMastertrue元数据日志同步延迟SHOW PROC /frontends;看JournalLog数值持续增长或过大表明Observer同步延迟高连接数 QPSFE Metrics (如Doris Web UI)观察扩容FE后连接数是否得到分流BE节点存活SHOW PROC /backends;所有节点AlivetrueLastHeartbeat时间很近磁盘使用率SHOW PROC /backends;看UsedCapacity缩容前确保其他BE有足够空间80%Tablet数量分布SHOW PROC /backends;看TabletNum扩容后观察是否趋于平均缩容时看目标BE是否降为0数据均衡进度SHOW PROC /cluster_balance/pending_tablets;观察Pending任务数应为减少趋势集群查询错误率监控系统扩缩容期间错误率不应有显著上升数据导入延迟监控Broker导入任务扩容Broker后导入速度应有提升6.2 典型问题排查流程问题一新扩容的BE状态一直为Dead现象SHOW PROC /backends;显示新BE的Alive列为false。排查思路网络连通性在FE主机上使用telnet be_new_host 9050检查心跳端口是否通。同时检查telnet be_new_host 9060BE thrift端口是否通。防火墙/Security Group这是最常见的原因。确保BE节点的9050和9060端口对FE节点开放并且BE节点的8040Web服务端口也对访问者开放用于调试。BE日志登录BE节点查看log/be.INFO日志看是否有绑定IP失败、端口冲突等错误。重点检查be.conf中priority_networks配置是否正确是否绑定到了一个FE无法访问的IP上。主机名解析确保FE节点能正确解析BE的主机名。建议在/etc/hosts文件中配置IP和主机名的映射或使用稳定的内部DNS。问题二BE下线Decommission进度长时间卡住不动现象执行DECOMMISSION后目标BE的TabletNum长时间不减少。排查思路检查集群健康度首先执行SHOW PROC /statistic;查看集群副本完好率。如果有副本缺失UnhealthyTabletNum 0需要先修复。检查磁盘空间执行SHOW PROC /backends;查看其他BE的AvailCapacity。如果某个BE磁盘快满了数据就无法迁入。需要清理数据或扩容磁盘。检查调度错误执行SHOW PROC /cluster_balance/error_tablets;。这里会列出因各种原因如副本缺失、目标路径不可用等调度失败的Tablet。根据错误信息进行针对性修复例如手动触发副本修复。调整调度参数如4.1节所述可以适当调高tablet_sched_slot_num_per_path等参数但要注意监控I/O压力。检查是否有长时间运行的Schema Change或Rollup作业这些作业会锁定相关的Tablet阻止其迁移。可以通过SHOW ALTER TABLE COLUMN;和SHOW ALTER TABLE ROLLUP;查看。问题三添加FE Observer后客户端连接该Observer查询报错或数据不一致现象应用连接新加的Observer查询有时报错有时查到旧数据。排查思路检查同步状态在Leader FE上执行SHOW PROC /frontends;观察该Observer的JournalLog和JournalLag。如果Lag很大说明元数据同步严重延迟。检查网络与负载Observer与Leader/Follower之间的网络延迟或带宽不足会导致同步慢。同时检查Observer节点的CPU和内存使用率如果资源耗尽同步线程也会变慢。重启Observer如果同步延迟巨大且无法追平可以尝试停止Observer从其数据目录中删除image和journal子目录先备份然后重新启动。这会触发一次全量同步虽然启动慢但能解决一些因日志损坏导致的同步问题。客户端使用建议对于一致性要求高的读写操作客户端应直接连接Follower尤其是Leader。Observer仅适用于对数据实时性要求不高的只读查询场景。掌握这些监控和排查方法你就能在扩缩容这个充满变数的过程中做到心中有数遇事不慌。记住任何线上操作慢就是快充分的预案和监控永远比事后救火更重要。