未记录事实核验 · 状态:维护中
记录仅说明核验时间与维护状态,不保证适用于所有环境;使用前请留意正文中的版本、适用条件与风险提示。
warning 适用范围与待维护事项
本文适合已有Doris部署、Linux运维及分布式副本管理经验的人员规划运维,不是可直接执行的生产手册。原稿未注明Doris版本;备份与恢复示例、监控指标名称和单位、存储路径格式、导入并行度及升级顺序须按目标版本核验。metadata_failure_recovery不是自动备份,不能据此建立灾备。退役、重启、清理与升级前,应验证副本健康、剩余容量、FE多数派及可恢复备份;禁止直接删除BE数据文件。文中老李情节为教学假设。
Doris集群管理与运维 - 稳定高效的系统保障
abstract 📋 本节概览
- 🎯 学习目标:掌握Doris集群的管理、监控与故障排查技能
- 📚 前置知识:12-用户定义函数UDF|用户定义函数UDF 和 05-Doris环境安装与配置|Doris环境安装与配置
- ⏱️ 预计用时:30分钟
- 💡 核心收获:能够独立维护和优化Doris集群运行状态
以下为教学假设,并非已核实的真人案例:运维工程师老李刚接手公司的Doris集群,3个FE节点,6个BE节点,支撑着每日TB级的数据查询。半夜收到告警:某个BE节点磁盘快满了,查询开始变慢。"尽量降低对用户的影响,"他分析集群状态,在确认副本健康和剩余容量后,规划数据副本迁移与存储扩容。这展示了集群运维的常见任务;是否能避免用户感知,取决于资源余量、故障范围和操作方案。
💡 集群架构与组件管理
Doris集群架构回顾
Doris集群主要由两类节点组成:
- FE (Frontend):元数据管理、查询规划、集群协调
- BE (Backend):数据存储、查询执行、数据计算
节点角色:
- FE Master:元数据写入唯一入口,负责集群管理
- FE Observer:元数据只读节点,提供查询服务
- FE Follower:参与元数据一致性协议,可选为Master
- BE:存储和计算节点,处理数据导入和查询执行
节点管理操作
-- 查看FE节点
SHOW FRONTENDS;
-- 查看BE节点
SHOW BACKENDS;
-- 查看Broker节点
SHOW BROKER;
-- 添加FE Observer节点
ALTER SYSTEM ADD OBSERVER "fe_host:port";
-- 添加FE Follower节点
ALTER SYSTEM ADD FOLLOWER "fe_host:port";
-- 添加BE节点
ALTER SYSTEM ADD BACKEND "be_host:heartbeat_port";
-- 删除FE节点
ALTER SYSTEM DROP OBSERVER "fe_host:port";
ALTER SYSTEM DROP FOLLOWER "fe_host:port";
-- 删除BE节点
ALTER SYSTEM DECOMMISSION BACKEND "be_host:heartbeat_port";
节点上下线最佳实践
BE节点上线流程:
- 部署BE节点软件并配置
- 启动BE进程
- 在FE上执行ADD BACKEND命令
- 验证节点状态为"Alive"
- 观察集群负载均衡情况
BE节点下线流程:
- 执行DECOMMISSION BACKEND命令
- 监控数据迁移进度
- 确认节点状态变为"Decommissioned"
- 停止BE进程
- 清理节点数据
warning ⚠️ 注意事项
- 下线BE节点前确保集群有足够容量承载迁移数据
- 下线过程中避免重启FE Master
- 大集群下线可能需要较长时间,耐心等待数据迁移完成
🔍 集群监控与告警
监控指标体系
| 监控层面 | 关键指标 | 监控方法 |
|---|---|---|
| 系统层 | CPU、内存、磁盘、网络 | 系统监控工具 |
| 进程层 | JVM堆内存、GC、线程数 | JMX、进程监控 |
| 服务层 | QPS、查询延迟、错误率 | Doris监控接口 |
| 业务层 | 导入量、查询量、活跃用户 | 业务日志分析 |
监控系统搭建
Prometheus + Grafana方案:
- 配置Doris导出指标:
# fe.conf
enable_metric_calculator=true
metric_calculator_interval_sec=10
- 配置Prometheus抓取:
# prometheus.yml
scrape_configs:
- job_name: 'doris_fe'
static_configs:
- targets: ['fe1:8030', 'fe2:8030', 'fe3:8030']
- job_name: 'doris_be'
static_configs:
- targets: ['be1:8040', 'be2:8040', 'be3:8040']
- Grafana仪表盘配置:
- 导入Doris官方Grafana模板
- 配置关键指标可视化
- 设置告警阈值
关键监控指标
FE关键指标:
- 元数据日志延迟
- 查询QPS和延迟
- JVM内存使用率
- 线程池使用情况
BE关键指标:
- 查询延迟分布
- 磁盘IO使用率
- 内存使用情况
- Compaction积压
告警配置示例:
# Prometheus告警规则
groups:
- name: doris_alerts
rules:
- alert: DorisNodeDown
expr: up{job=~"doris_.*"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Doris监控目标抓取失败"
description: "目标 {{ $labels.instance }} 的指标抓取已失败超过1分钟,请检查进程、网络及监控端点;此告警不单独证明节点宕机"
- alert: DorisHighQueryLatency
expr: doris_fe_query_latency_p99 > 5000
for: 5m
labels:
severity: warning
annotations:
summary: "查询延迟过高"
description: "P99查询延迟超过5秒,当前值: {{ $value }}ms"
🛠️ 日常运维操作
数据备份与恢复
元数据备份:
-- 原稿的 ADMIN BACKUP 不能作为 Doris FE 元数据备份命令执行。
-- FE 元数据备份需按目标版本的备份规程单独实施并验证恢复。
-- SHOW BACKUP 用于查看数据快照备份任务,不代表 FE 元数据已备份。
SHOW BACKUP;
元数据恢复配置警示(不是自动备份):
# fe.conf
# 原稿列出的配置仅保留供核对,不应据此启用自动备份。
# metadata_failure_recovery 属于故障恢复配置;启用前须核对目标版本恢复规程。
# metadata_failure_recovery=true
# 以下参数的可用性及含义也须按目标版本核验。
# metadata_failure_recovery_interval_sec=300
自动备份方案应另行设计备份调度、独立存储、保留策略及恢复演练。
数据备份方案:
- HDFS备份:
-- 前提:已按目标版本创建可用的备份仓库 doris_backup_repo。
-- 原稿的 hdfs://hadoop-master:8020/doris_backup 应作为仓库存储位置,不能直接作为 TO 的仓库名。
BACKUP SNAPSHOT db_name.snapshot_name
TO doris_backup_repo
ON (table_name)
PROPERTIES ("type" = "full");
- 数据恢复:
-- 前提:doris_backup_repo 中存在对应快照;恢复前核对目标表冲突及版本限制。
RESTORE SNAPSHOT db_name.snapshot_name
FROM doris_backup_repo
ON (table_name)
PROPERTIES ("backup_timestamp" = "2023-06-01-08-00-00");
-- 此时间戳仅为原稿示例,执行时须使用仓库中实际存在的备份时间戳。
集群扩缩容
水平扩容:
- 部署新BE节点
- 添加到集群
- 监控数据均衡进度
垂直扩容:
- 停止BE节点
- 升级硬件配置
- 更新BE配置
- 重启BE节点
缩容注意事项:
- 确保剩余节点有足够存储空间
- 使用DECOMMISSION命令安全下线节点
- 监控数据迁移进度,避免数据丢失
版本升级
升级流程:
-
升级准备:
- 备份元数据
- 检查兼容性说明
- 准备回滚方案
-
升级步骤:
- 先升级所有FE节点
- 再升级BE节点
- 逐个节点升级,避免整体服务中断
# FE升级步骤
# 1. 停止FE
sh bin/stop_fe.sh
# 2. 替换软件包
cp -r apache-doris-x.x.x/* /path/to/fe/
# 3. 启动FE
sh bin/start_fe.sh --daemon
# BE升级类似
升级后检查:
- 检查各节点状态
- 验证元数据一致性
- 执行基本查询测试
- 监控系统性能指标
⚙️ 性能调优
系统参数调优
FE参数调优:
# 每个数据库的运行中事务数上限,不等同于查询并发度
max_running_txn_num_per_db=100
# JVM内存配置
JAVA_OPTS="-Xmx8192m -XX:+UseG1GC"
# 元数据优化
edit_log_roll_num=50000
edit_log_port=9010
BE参数调优:
# 查询性能相关
query_cache_size=536870912
max_memory_sink_batch_count=20
# 存储相关
storage_root_path=/data1/doris;70;SSD,/data2/doris;70;SSD
min_file_size_to_compress=0
cumulative_compaction_min_size=10737418240
# 并发控制
push_worker_count_normal_priority=3
push_worker_count_high_priority=3
查询性能优化
慢查询分析:
-- 开启慢查询日志
ADMIN SET FRONTEND CONFIG ("qe_slow_log_ms" = "5000");
-- 查看慢查询记录
SHOW PROC '/log/query/slow_query';
执行计划优化:
-- 查看执行计划
EXPLAIN SELECT * FROM table_name WHERE condition;
-- 添加查询提示
SELECT /*+ SET_VAR(enable_vectorized_engine=true) */
* FROM table_name WHERE condition;
常见查询优化技巧:
- 合理设计分区分桶
- 利用物化视图加速聚合
- 优化JOIN顺序和策略
- 控制查询并发和资源使用
导入性能优化
批量导入优化:
# BE配置
load_process_max_memory_limit_bytes=107374182400
load_process_max_memory_limit_percent=30
并行度调整:
-- Stream Load并行度
curl --location-trusted -u user:passwd -H "parallel=8" -T data.csv http://fe_host:8030/api/db/table/_stream_load
-- Broker Load并行度
LOAD LABEL example_db.label1
(
DATA INFILE("hdfs://data.csv")
INTO TABLE example_tbl
)
WITH BROKER
(
"username"="hdfs_user",
"password"="hdfs_password"
)
PROPERTIES
(
"timeout"="3600",
"max_filter_ratio"="0.1",
"load_parallelism"="8"
);
🔧 故障诊断与处理
常见故障类型
| 故障类型 | 可能原因 | 诊断方法 |
|---|---|---|
| FE宕机 | JVM OOM、磁盘满、网络故障 | 检查FE日志、JVM堆转储 |
| BE宕机 | 内存不足、磁盘故障、进程崩溃 | 检查BE日志、dmesg日志 |
| 查询超时 | 数据量大、资源不足、执行计划不优 | 分析慢查询日志、查看执行计划 |
| 导入失败 | 数据格式错误、资源不足、超时 | 检查导入日志、验证数据格式 |
| 集群不平衡 | 节点配置不一、数据倾斜 | 检查表分布、监控节点负载 |
故障排查流程
FE故障排查:
- 检查FE日志:
fe.log、fe.out - 查看JVM内存使用:
jmap -heap <fe_pid> - 检查磁盘空间:
df -h - 查看FE节点状态及元数据日志进度:
SHOW FRONTENDS;;此命令不能单独证明元数据一致性
BE故障排查:
- 检查BE日志:
be.INFO、be.WARNING - 查看系统资源:
top、iostat、free - 检查数据目录权限和空间
- 验证与FE的心跳连接:
SHOW BACKENDS;
查询故障排查:
- 获取查询ID:
SHOW PROC '/current_queries'; - 分析执行计划:
EXPLAIN <query>; - 检查资源使用:
SHOW PROC '/current_queries/resource'; - 查看表状态:
SHOW TABLET FROM <table>;
常见故障案例与解决方案
案例1:FE Master宕机
症状:FE Master进程退出,集群不可写入
解决步骤:
- 检查FE日志中的错误信息
- 如果是内存问题,增加JVM堆大小
- 检查参与选举的FE节点是否有多数派正常且相互可通信;仅有一个Follower正常并不必然满足选主条件
- 重启FE Master节点
- 验证元数据同步状态
案例2:BE节点磁盘满
症状:BE节点报错"No space left on device"
解决步骤:
- 检查磁盘使用情况:
df -h - 按保留策略清理已确认可删除的日志和临时文件;不要手工删除BE数据目录中的副本文件
- 如果是数据目录满,可以添加新的存储路径:
# be.conf
storage_root_path=/data1/doris;70;SSD,/data3/doris;70;SSD
- 重启BE节点
- 监控数据均衡情况
案例3:查询性能突然下降
症状:查询响应时间从毫秒级增加到秒级或分钟级
解决步骤:
- 检查系统负载:
top、iostat - 分析慢查询日志
- 检查是否有大量并发查询
- 查看表的数据量是否突增
- 检查是否有大量Compaction任务
- 优化查询或增加资源
✅ 掌握检查
- [ ] 理解Doris集群架构和节点角色
- [ ] 能够搭建基本的监控告警系统
- [ ] 掌握日常运维操作(备份、扩容、升级)
- [ ] 了解性能调优的关键参数和方法
- [ ] 能够处理常见的集群故障
🔗 学习连接
前置知识: 用户定义函数UDF, Doris环境安装与配置 下一步: 进一步学习企业级应用案例 相关概念: 表结构设计与优化, 数据导入方案