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 --daemon4.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\G5. 集群验证与基础测试
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-meta7. 生产环境优化建议
7.1 参数调优经验
FE关键参数:
# 增加查询并行度 parallel_fragment_exec_instance_num=8 # 优化元数据加载 metadata_memory_limit=4GBE关键参数:
# 压缩优化 disable_storage_page_cache=false storage_format_version=2 # 查询执行优化 enable_vectorized_engine=true batch_size=40967.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'" fi8. 版本升级策略
8.1 滚动升级步骤
- 逐个停止BE节点并升级
- 逐个停止Follower FE并升级
- 最后升级Master FE
升级命令示例:
# BE升级步骤 ./bin/stop_be.sh # 替换新版本文件 ./bin/start_be.sh --daemon8.2 升级验证要点
- 检查所有节点版本号
- 验证基础查询功能
- 检查数据一致性
- 监控性能指标变化
重要经验:在金融项目升级时,我们总是先在测试环境完整演练升级过程,记录每个步骤耗时,制定详细的回滚方案。