Apache Doris集群部署与优化实战指南
2026/9/12 9:42:01 网站建设 项目流程

1. Doris集群部署概述

Apache Doris作为一款开源的MPP分析型数据库,凭借其高性能、实时分析能力和易扩展性,在企业级数据分析领域占据重要地位。集群化部署是Doris在生产环境中的标准配置方式,通过多节点协同工作实现高可用和负载均衡。我在金融行业的数据仓库项目中多次实施Doris集群部署,总结出一套经过验证的最佳实践方案。

典型的Doris集群采用存算一体架构,由两类节点组成:

  • FE(Frontend):负责元数据管理、查询解析和调度
  • BE(Backend):负责数据存储和计算执行

生产环境建议至少部署3个FE节点(1 Master + 2 Follower)和多个BE节点,这种配置既能保证服务高可用,又能提供足够的计算存储能力。下面我将详细介绍从零开始部署Doris集群的全过程。

2. 部署前准备工作

2.1 硬件环境检查

根据我的实施经验,Doris对硬件有以下基本要求:

FE节点配置建议:

  • CPU:8核以上(OLAP场景建议16核+)
  • 内存:16GB起步(元数据量大的场景需要32GB+)
  • 磁盘:SSD优先,至少100GB空间(元数据单独存放)

BE节点配置建议:

  • CPU:16核以上(计算密集型场景建议32核+)
  • 内存:32GB起步(数据量大的场景需要128GB+)
  • 磁盘:HDD/SSD混合,建议每节点配置多块磁盘做存储

重要提示:生产环境务必确保BE节点有足够的内存,我曾遇到因内存不足导致BE频繁OOM的情况,建议预留20%的内存缓冲。

2.2 软件环境准备

操作系统要求:

  • CentOS 7/8或Ubuntu 16.04+
  • 内核版本3.10+
  • 关闭swap分区
  • 调整文件描述符限制(建议设置为65535)

依赖组件安装:

# CentOS示例 yum install -y epel-release yum install -y java-1.8.0-openjdk-devel lsof telnet wget

网络配置检查:

  • 确保节点间网络延迟<1ms
  • 开放必要端口:
    • FE:8030(HTTP)、9020(MySQL协议)、9030(FE内部通信)
    • BE:9060(BE心跳)、8040(HTTP)、8060(BE内部通信)

3. FE节点部署详解

3.1 安装首个FE(Master节点)

步骤1:下载并解压安装包

wget https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-2.0.4-bin-x64.tar.gz tar zxvf apache-doris-2.0.4-bin-x64.tar.gz mv apache-doris-2.0.4-bin-x64 /opt/doris

步骤2:配置元数据存储

mkdir -p /data/doris-meta ln -s /data/doris-meta /opt/doris/fe/doris-meta

步骤3:修改FE配置文件(fe/conf/fe.conf)

# Java堆内存配置(根据机器内存调整) JAVA_OPTS="-Xmx16g -Xms16g -XX:+UseG1GC" # 元数据目录指向 meta_dir=/data/doris-meta # 网络配置(替换为实际IP段) priority_networks=192.168.1.0/24 # 时区设置 timezone=Asia/Shanghai

步骤4:启动FE服务

cd /opt/doris/fe ./bin/start_fe.sh --daemon

验证启动状态:

# 查看日志 tail -f log/fe.log # 通过MySQL客户端连接验证 mysql -uroot -P9030 -h127.0.0.1 -e "SHOW FRONTENDS;"

3.2 扩展FE集群(Follower节点)

在新节点上重复安装步骤,然后:

步骤1:在Master节点添加Follower

ALTER SYSTEM ADD FOLLOWER "192.168.1.2:9010";

步骤2:在新节点启动FE(指定helper节点)

./bin/start_fe.sh --helper 192.168.1.1:9010 --daemon

关键检查点:

  • 确保所有FE节点的Alive状态为true
  • 检查show frontends输出中各节点Join状态
  • 观察日志同步情况,确保没有meta sync错误

经验分享:我曾遇到FE节点间时钟不同步导致元数据同步失败的问题,建议所有节点配置NTP时间同步服务。

4. BE节点部署指南

4.1 基础BE节点部署

步骤1:安装BE软件(同FE安装步骤)

步骤2:配置数据存储目录

mkdir -p /data1/doris-storage /data2/doris-storage

步骤3:修改BE配置文件(be/conf/be.conf)

# 存储路径配置(多磁盘情况) storage_root_path=/data1/doris-storage,medium:hdd;/data2/doris-storage,medium:ssd # 网络配置 priority_networks=192.168.1.0/24 # 内存限制(建议不超过物理内存80%) mem_limit=80%

步骤4:在FE中添加BE节点

ALTER SYSTEM ADD BACKEND "192.168.1.101:9050";

步骤5:启动BE服务

cd /opt/doris/be ./bin/start_be.sh --daemon

4.2 BE节点优化配置

内存管理优化:

# 查询内存限制(防止单个查询占用过多内存) query_mem_limit=8G # 压缩内存池 storage_page_cache_limit=12G

磁盘IO优化:

# 增加IO线程数 disable_storage_page_cache=false io_threads=16

网络优化:

# 增加RPC线程数 brpc_num_threads=64

验证BE状态:

SHOW BACKENDS\G

5. 集群验证与基础测试

5.1 基础功能验证

创建测试数据库:

CREATE DATABASE cluster_test; USE cluster_test;

建表测试(分区表+分桶表):

CREATE TABLE user_behavior ( user_id LARGEINT NOT NULL, item_id LARGEINT NOT NULL, behavior_type VARCHAR(10) NULL, ts DATETIME NOT NULL ) PARTITION BY RANGE(ts) ( PARTITION p202301 VALUES LESS THAN ('2023-02-01'), PARTITION p202302 VALUES LESS THAN ('2023-03-01') ) DISTRIBUTED BY HASH(user_id) BUCKETS 32 PROPERTIES ("replication_num" = "3");

数据导入测试:

INSERT INTO user_behavior VALUES (1001, 2001, 'click', '2023-01-15 10:00:00'), (1002, 2003, 'buy', '2023-01-20 14:30:00');

5.2 性能基准测试

TPC-H测试(Scale Factor 10):

-- 创建TPC-H测试库 CREATE DATABASE tpch; USE tpch; -- 导入TPC-H数据(略) -- 执行查询测试 SELECT l_returnflag, l_linestatus, SUM(l_quantity) AS sum_qty FROM lineitem WHERE l_shipdate <= DATE '1998-12-01' GROUP BY l_returnflag, l_linestatus;

监控关键指标:

  • 查询响应时间
  • BE节点CPU/内存使用率
  • 磁盘IO吞吐量

6. 集群运维关键点

6.1 日常监控配置

推荐监控指标:

  • FE JVM内存使用
  • BE Compaction分数
  • 查询队列长度
  • 副本健康状态

Prometheus监控配置示例:

scrape_configs: - job_name: 'doris' static_configs: - targets: ['192.168.1.1:8030', '192.168.1.2:8030'] labels: group: 'doris-fe' - targets: ['192.168.1.101:8040', '192.168.1.102:8040'] labels: group: 'doris-be'

6.2 常见问题处理

问题1:BE节点磁盘空间不足

-- 查看数据分布 SHOW TABLET STORAGE STATS; -- 解决方案: -- 1. 增加BE节点 -- 2. 执行数据均衡 ADMIN SET REPLICA DISTRIBUTION BALANCE;

问题2:查询内存超限

-- 临时解决方案 SET exec_mem_limit=8589934592; -- 8GB -- 长期方案 -- 优化查询或升级硬件

问题3:FE元数据损坏

# 使用元数据恢复工具 java -jar doris-meta-tool.jar --recover --metaPath=/data/doris-meta

7. 生产环境优化建议

7.1 参数调优经验

FE关键参数:

# 增加查询并行度 parallel_fragment_exec_instance_num=8 # 优化元数据加载 metadata_memory_limit=4G

BE关键参数:

# 压缩优化 disable_storage_page_cache=false storage_format_version=2 # 查询执行优化 enable_vectorized_engine=true batch_size=4096

7.2 高可用设计

推荐架构:

  • 3 FE节点(1 Master + 2 Follower)
  • 多个BE节点(建议至少3个)
  • 负载均衡器(如Nginx)代理FE的MySQL协议端口

自动故障转移配置:

# 检查FE Master健康状态脚本示例 #!/bin/bash if ! mysql -uroot -P9030 -h192.168.1.1 -e "SELECT 1" &>/dev/null; then # 触发Master切换 mysql -uroot -P9030 -h192.168.1.2 -e "ALTER SYSTEM TRANSFER MASTER TO '192.168.1.2:9010'" fi

8. 版本升级策略

8.1 滚动升级步骤

  1. 逐个停止BE节点并升级
  2. 逐个停止Follower FE并升级
  3. 最后升级Master FE

升级命令示例:

# BE升级步骤 ./bin/stop_be.sh # 替换新版本文件 ./bin/start_be.sh --daemon

8.2 升级验证要点

  • 检查所有节点版本号
  • 验证基础查询功能
  • 检查数据一致性
  • 监控性能指标变化

重要经验:在金融项目升级时,我们总是先在测试环境完整演练升级过程,记录每个步骤耗时,制定详细的回滚方案。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询