未记录事实核验 · 状态:维护中

记录仅说明核验时间与维护状态,不保证适用于所有环境;使用前请留意正文中的版本、适用条件与风险提示。

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集群主要由两类节点组成:

  1. FE (Frontend):元数据管理、查询规划、集群协调
  2. 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节点上线流程:

  1. 部署BE节点软件并配置
  2. 启动BE进程
  3. 在FE上执行ADD BACKEND命令
  4. 验证节点状态为"Alive"
  5. 观察集群负载均衡情况

BE节点下线流程:

  1. 执行DECOMMISSION BACKEND命令
  2. 监控数据迁移进度
  3. 确认节点状态变为"Decommissioned"
  4. 停止BE进程
  5. 清理节点数据

warning ⚠️ 注意事项

  • 下线BE节点前确保集群有足够容量承载迁移数据
  • 下线过程中避免重启FE Master
  • 大集群下线可能需要较长时间,耐心等待数据迁移完成

🔍 集群监控与告警

监控指标体系

监控层面 关键指标 监控方法
系统层 CPU、内存、磁盘、网络 系统监控工具
进程层 JVM堆内存、GC、线程数 JMX、进程监控
服务层 QPS、查询延迟、错误率 Doris监控接口
业务层 导入量、查询量、活跃用户 业务日志分析

监控系统搭建

Prometheus + Grafana方案:

  1. 配置Doris导出指标:
# fe.conf
enable_metric_calculator=true
metric_calculator_interval_sec=10
  1. 配置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']
  1. 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

自动备份方案应另行设计备份调度、独立存储、保留策略及恢复演练。

数据备份方案:

  1. 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");
  1. 数据恢复:
-- 前提: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");
-- 此时间戳仅为原稿示例,执行时须使用仓库中实际存在的备份时间戳。

集群扩缩容

水平扩容:

  1. 部署新BE节点
  2. 添加到集群
  3. 监控数据均衡进度

垂直扩容:

  1. 停止BE节点
  2. 升级硬件配置
  3. 更新BE配置
  4. 重启BE节点

缩容注意事项:

  • 确保剩余节点有足够存储空间
  • 使用DECOMMISSION命令安全下线节点
  • 监控数据迁移进度,避免数据丢失

版本升级

升级流程:

  1. 升级准备:

    • 备份元数据
    • 检查兼容性说明
    • 准备回滚方案
  2. 升级步骤:

    • 先升级所有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;

常见查询优化技巧:

  1. 合理设计分区分桶
  2. 利用物化视图加速聚合
  3. 优化JOIN顺序和策略
  4. 控制查询并发和资源使用

导入性能优化

批量导入优化:

# 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故障排查:

  1. 检查FE日志:fe.log、fe.out
  2. 查看JVM内存使用:jmap -heap <fe_pid>
  3. 检查磁盘空间:df -h
  4. 查看FE节点状态及元数据日志进度:SHOW FRONTENDS;;此命令不能单独证明元数据一致性

BE故障排查:

  1. 检查BE日志:be.INFO、be.WARNING
  2. 查看系统资源:top、iostat、free
  3. 检查数据目录权限和空间
  4. 验证与FE的心跳连接:SHOW BACKENDS;

查询故障排查:

  1. 获取查询ID:SHOW PROC '/current_queries';
  2. 分析执行计划:EXPLAIN <query>;
  3. 检查资源使用:SHOW PROC '/current_queries/resource';
  4. 查看表状态:SHOW TABLET FROM <table>;

常见故障案例与解决方案

案例1:FE Master宕机

症状:FE Master进程退出,集群不可写入

解决步骤:

  1. 检查FE日志中的错误信息
  2. 如果是内存问题,增加JVM堆大小
  3. 检查参与选举的FE节点是否有多数派正常且相互可通信;仅有一个Follower正常并不必然满足选主条件
  4. 重启FE Master节点
  5. 验证元数据同步状态

案例2:BE节点磁盘满

症状:BE节点报错"No space left on device"

解决步骤:

  1. 检查磁盘使用情况:df -h
  2. 按保留策略清理已确认可删除的日志和临时文件;不要手工删除BE数据目录中的副本文件
  3. 如果是数据目录满,可以添加新的存储路径:
# be.conf
storage_root_path=/data1/doris;70;SSD,/data3/doris;70;SSD
  1. 重启BE节点
  2. 监控数据均衡情况

案例3:查询性能突然下降

症状:查询响应时间从毫秒级增加到秒级或分钟级

解决步骤:

  1. 检查系统负载:top、iostat
  2. 分析慢查询日志
  3. 检查是否有大量并发查询
  4. 查看表的数据量是否突增
  5. 检查是否有大量Compaction任务
  6. 优化查询或增加资源

✅ 掌握检查

  • [ ] 理解Doris集群架构和节点角色
  • [ ] 能够搭建基本的监控告警系统
  • [ ] 掌握日常运维操作(备份、扩容、升级)
  • [ ] 了解性能调优的关键参数和方法
  • [ ] 能够处理常见的集群故障

🔗 学习连接

前置知识: 用户定义函数UDF, Doris环境安装与配置 下一步: 进一步学习企业级应用案例 相关概念: 表结构设计与优化, 数据导入方案