1. Doris集群部署概述
Apache Doris作为一款开源的MPP(大规模并行处理)分析型数据库,凭借其出色的实时分析能力和高并发查询性能,在企业级数据分析场景中越来越受欢迎。今天我要分享的是基于3FE+3BE架构的Doris集群完整部署过程,这个配置方案特别适合中小规模企业的实时数据分析需求。
为什么选择3FE+3BE架构?从实际生产经验来看,这种配置在保证高可用性的同时,资源消耗相对合理。三个FE节点(1个Leader+2个Follower)可以确保元数据服务的高可用,三个BE节点则提供了足够的数据存储和计算能力。我在多个项目中采用这种架构,都能稳定支撑每日数亿级数据的实时分析需求。
2. 环境准备与系统配置
2.1 硬件资源配置建议
根据实际项目经验,我建议采用以下配置方案:
| 主机 | IP地址 | 内存 | 磁盘空间 | 服务角色 |
|---|---|---|---|---|
| node01 | 192.168.31.10 | 16G | 500G SSD | FE(Leader) + BE |
| node02 | 192.168.31.20 | 16G | 500G SSD | FE(Follower) + BE |
| node03 | 192.168.31.30 | 16G | 500G SSD | FE(Follower) + BE |
注意:虽然原文提到3G内存可以运行,但在生产环境中建议至少16G内存。我曾在一个项目中尝试8G内存配置,在高并发查询时出现了频繁的OOM问题。
2.2 操作系统优化配置
这些优化配置对Doris的稳定运行至关重要,我整理了几个关键配置项:
- 关闭swap和透明大页
bash复制# 永久关闭swap
sudo sed -i '/swap/s/^/#/' /etc/fstab
sudo swapoff -a
# 关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
- 调整系统参数
bash复制# 增加虚拟内存区域
sudo sysctl -w vm.max_map_count=2000000
# 增加文件句柄数
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
- NTP时间同步
bash复制# 安装并配置NTP
sudo yum install -y ntp
sudo systemctl enable ntpd
sudo systemctl start ntpd
3. FE节点部署与配置
3.1 安装包准备与解压
从Apache Doris官网下载最新稳定版(当前为3.1.4):
bash复制wget https://doris.incubator.apache.org/downloads/apache-doris-3.1.4-bin-x64.tar.gz
解压并重命名目录:
bash复制tar -zxvf apache-doris-3.1.4-bin-x64.tar.gz -C /usr/local/
cd /usr/local && mv apache-doris-3.1.4-bin doris-3.1.4
3.2 FE主节点配置
编辑fe/fe.conf配置文件,关键参数说明:
properties复制# 设置表名大小写敏感(建议保持默认1)
lower_case_table_names = 1
# 指定网络接口(必须配置)
priority_networks=192.168.31.10/24
# JVM内存配置(根据机器内存调整)
JAVA_OPTS="-Xmx8g -Xms8g -XX:+UseMembar -XX:SurvivorRatio=8"
# 元数据存储目录(建议使用独立磁盘)
meta_dir=/data/doris-meta
启动主FE节点:
bash复制./fe/bin/start_fe.sh --daemon
3.3 MySQL客户端安装与使用
卸载可能冲突的mariadb:
bash复制rpm -e --nodeps mariadb-libs
安装MySQL客户端(以8.0.20为例):
bash复制tar -xvf mysql-8.0.20-1.el7.x86_64.rpm-bundle.tar
rpm -ivh mysql-community-common-8.0.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.20-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.20-1.el7.x86_64.rpm
连接FE并设置密码:
bash复制mysql -u root -h node01 -P 9030
> SET PASSWORD FOR 'root' = PASSWORD('YourStrongPassword123!');
3.4 添加FE Follower节点
在MySQL客户端中执行:
sql复制ALTER SYSTEM ADD FOLLOWER "192.168.31.20:9010";
ALTER SYSTEM ADD FOLLOWER "192.168.31.30:9010";
在node02和node03上启动FE:
bash复制./bin/start_fe.sh --helper 192.168.31.10:9010 --daemon
验证集群状态:
sql复制SHOW FRONTENDS;
4. BE节点部署与配置
4.1 BE节点基础配置
编辑be/be.conf配置文件:
properties复制# 网络接口配置
priority_networks=192.168.31.10/24
# 存储路径配置(建议使用SSD)
storage_root_path=/data/doris-storage
# JVM内存配置(根据机器内存调整)
JAVA_OPTS="-Xmx8g -Xms8g -XX:+UseMembar -XX:SurvivorRatio=8"
4.2 注册并启动BE节点
在MySQL客户端中注册BE节点:
sql复制ALTER SYSTEM ADD BACKEND "192.168.31.10:9050";
ALTER SYSTEM ADD BACKEND "192.168.31.20:9050";
ALTER SYSTEM ADD BACKEND "192.168.31.30:9050";
启动BE服务:
bash复制./be/bin/start_be.sh --daemon
验证BE状态:
sql复制SHOW BACKENDS;
5. 集群管理与监控
5.1 Web界面访问
通过浏览器访问FE的Web界面(默认端口8030):
code复制http://192.168.31.10:8030
登录后可以查看:
- 集群整体状态
- 查询统计信息
- 节点资源使用情况
- 慢查询分析
5.2 常见问题排查
- FE节点无法加入集群
- 检查防火墙设置(9010端口需开放)
- 确认helper节点地址正确
- 查看FE日志
log/fe.log中的错误信息
- BE节点状态异常
sql复制-- 查看BE详细状态
SHOW PROC '/backends'\G
- 检查BE日志
log/be.INFO - 确认storage_root_path有足够空间
- 查询性能问题
- 检查
SHOW PROC '/current_queries' - 分析慢查询日志
- 考虑增加BE节点或优化表分区
6. 生产环境优化建议
经过多个项目的实践验证,我总结了几点关键优化建议:
- 磁盘配置
- 元数据目录(meta_dir)建议使用RAID1
- 数据目录(storage_root_path)使用SSD并保持30%以上空闲空间
- 内存分配
- FE节点:总内存的60%分配给JVM
- BE节点:总内存的70%分配给JVM
- 网络优化
- 建议使用万兆网络
- 为Doris集群配置独立的网络平面
- 监控告警
- 集成Prometheus监控
- 设置关键指标告警(如节点离线、磁盘空间不足等)
在实际部署过程中,我发现很多问题都源于初期配置不当。比如有一次因为没设置priority_networks,导致BE节点间通信使用了错误的网卡,严重影响了数据同步效率。因此建议大家在部署时严格按照上述步骤操作,避免走弯路。