跳到主要内容

Apache Doris 集群搭建与运维指南(Ubuntu 24.04 适配版 | 混合部署专属)

文档概述​

1. 文档目的​

基于 Ubuntu 24.04 LTS 系统,提供三节点混合部署(单节点同时运行FE+BE) 的 Apache Doris 4.0.6 集群完整部署与运维指南,移除 /current 软链接,补充端口说明、核心访问URL、日志/Java路径配置,所有命令可直接在 Ubuntu 24 执行。

架构选择说明:本文档采用存算一体部署模式(数据与计算紧耦合,BE 同时负责存储和查询),适用于固定业务规模、对查询延迟要求高的场景。如需弹性扩缩容,可参考官方存算分离部署指南。

2. 核心适配说明​

  • 系统版本:Ubuntu 24.04 LTS
  • Doris 版本:4.0.6(稳定版,2026年6月8日发布)
  • 部署模式:三节点混合部署(每台服务器同时运行 FE + BE 进程)
  • Java 版本:OpenJDK 17(Ubuntu 24 官方推荐)
  • 核心要求:CPU 支持 AVX2 指令集(Doris 必需)
  • 路径说明:直接使用物理目录 /opt/doris/apache-doris-4.0.6-bin-x64,无 /current 软链接

3. 集群架构(混合部署)​

节点编号主机名节点角色(混合部署)硬件配置(单节点整体)
节点1doris-node1FE(FOLLOWER)+ BE8核64GB内存,1TB SSD
节点2doris-node2FE(FOLLOWER)+ BE8核64GB内存,1TB SSD
节点3doris-node3FE(OBSERVER)+ BE8核64GB内存,1TB SSD

4. 磁盘空间规划参考​

组件推荐空间说明
FE100GB+SSD,用于元数据存储
BE总数据量 × 3 × 1.4LZ4 压缩比 0.3-0.5,3副本 + 40% 预留空间(后台 Compaction 用)

注:以上 BE 存储计算公式适用于存算一体部署模式。存算分离模式下,所有数据存于共享存储,本地磁盘仅用于缓存,磁盘大小取决于热数据量。

5. 前置规划与官方参考​

重要:以下内容参考 Apache Doris 4.x 官方集群规划文档 和 手动部署指南,建议在部署前逐项确认。

5.1 操作系统兼容性检查​

检查项要求说明
操作系统CentOS 7.3+ 或 Ubuntu 22.04+本文档已验证 Ubuntu 24.04 LTS
内核版本Linux 3.10+uname -r 查看
glibc版本2.17+ldd --version 查看
CPU架构x86_64(支持 AVX2 指令集)必须支持 AVX2,否则需使用 noavx2 版本
文件系统ext4 / xfs(推荐 xfs)生产环境推荐 xfs,性能更优
时钟同步所有节点时钟差 < 5000msDoris 元数据对时钟精度敏感

5.2 JDK 环境严格要求(4.x 专属)​

检查项要求说明
JDK版本JDK 17 及以上(不能使用 JDK 8)4.x 强制要求,低版本将直接启动失败
JDK发行版OpenJDK / Oracle JDK 均可建议使用独立于操作系统的 JDK
配置要求fe.conf 中必须指定 JAVA_HOME避免依赖系统环境变量

4.x 特别说明:Doris 4.x 的启动脚本在检测到系统 JDK 为 17 时,会使用 JAVA_OPTS_FOR_JDK_17 替代 JAVA_OPTS。4.1.2 版本默认已包含完整 JVM 参数(含 --add-opens 模块、GC 日志轮转 -Xlog:gc*、HeapDump 等),只需按需修改 -Xmx/-Xms 和 LOG_DIR 即可。

5.3 4.0.6 版本升级行为变更(重要)​

从 4.0.2 升级到 4.0.6 或新部署 4.0.6 时,需关注以下行为变更:

变更项说明影响与建议
enable_strict_consistency_dml 默认关闭(存算分离/云模式)不影响存算一体模式存算分离用户需根据业务需求显式开启
Time Series Compaction 触发阈值降低(2000→1000)Compaction 更加积极混合部署下可能增加IO压力,可按需调整
Cluster Snapshot 命令要求 root 权限安全性增强运维脚本需相应调整
JSONB/Variant 列不再允许作为分布列数据类型约束增强迁移前检查现有表结构

MySQL协议兼容性:4.0.6 对 MySQL 协议兼容性有增强,升级后建议重新验证客户端连接。

5.4 官方文档参考链接​

参考项链接
集群规划https://doris.apache.org/zh-CN/docs/4.x/install/preparation/cluster-planning/
环境检查https://doris.apache.org/zh-CN/docs/4.x/install/preparation/env-checking/
操作系统检查https://doris.apache.org/zh-CN/docs/4.x/install/preparation/os-checking/
存算一体手动部署https://doris.apache.org/zh-CN/docs/4.x/install/deploy-manually/integrated-storage-compute-deploy-manually/
4.0.6 Release Noteshttps://doris.apache.org/zh-CN/releases/v4.0/release-4.0.6/
所有版本发布https://doris.apache.org/zh-CN/releases/all-release/

一、环境准备(Ubuntu 24 专属,补充端口/URL)​

1. 核心依赖验证​

# 1. 验证CPU是否支持AVX2指令集(无输出则需更换服务器)
grep -o avx2 /proc/cpuinfo | head -1

# 2. 验证Ubuntu版本
lsb_release -a

# 3. 更新系统包(避免依赖缺失)
sudo apt update && sudo apt upgrade -y

2. 关键端口规划(完整说明,含用途/访问方式)​

组件端口号协议核心用途访问方式/注意事项
FE8030HTTPFE内置监控页面、Web UI浏览器访问:http://<FE节点IP>:8030(默认无密码)
FE9020TCPFE节点间通信(RPC)仅集群内节点互通,无需对外暴露
FE9030TCPMySQL客户端连接端口mysql -h <FE节点IP> -P 9030 -u root
FE9010TCPFE元数据日志同步(Edit Log)仅集群内FE节点互通,需保证3节点间9010端口连通
FE8070TCPArrow Flight SQL(高性能数据传输)可选,默认监听但需显式开启使用
BE8040HTTPBE内置监控页面浏览器访问:http://<BE节点IP>:8040
BE9050TCPBE与FE心跳通信FE通过此端口检测BE存活状态,需保证FE能访问BE的9050端口
BE8060TCPBE节点间通信(BRPC)仅集群内BE节点互通,无需对外暴露
BE9060TCPBE数据交互端口(Thrift Server)仅集群内使用,无需对外暴露
BE8050TCPBE Arrow Flight SQL(高性能数据传输)可选,需显式开启

3. 核心URL汇总​

用途URL/地址说明
Doris 4.0.6 安装包下载https://downloads.apache.org/doris/4.0.6/apache-doris-4.0.6-bin-x64.tar.gz官方下载地址,可替换为镜像源
Doris 4.0.6 校验文件https://downloads.apache.org/doris/4.0.6/apache-doris-4.0.6-bin-x64.tar.gz.sha512用于验证安装包完整性
FE 监控页面http://<FE节点IP>:8030/api/bootstrap查看FE集群状态、元数据信息
FE Web UIhttp://<FE节点IP>:8030简易Web管理界面(4.0+版本支持)
BE 监控页面http://<BE节点IP>:8040/status查看BE负载、磁盘、Compaction状态

4. 系统环境配置(所有节点执行)​

4.1 关闭防火墙​

# 1. 先确保UFW处于启用状态(基础安全)
sudo ufw enable

# 2. 开放集群内互通端口(仅节点间访问,禁止外部)
# FE节点间Edit Log同步端口(9010)
sudo ufw allow from 10.123.0.0/24 to any port 9010 comment 'FE Edit Log同步'
# FE节点间RPC通信端口(9020)
sudo ufw allow from 10.123.0.0/24 to any port 9020 comment 'FE RPC通信'
# BE心跳端口(9050,FE检测BE存活)
sudo ufw allow from 10.123.0.0/24 to any port 9050 comment 'FE-BE心跳'
# BE节点间BRPC通信端口(8060)
sudo ufw allow from 10.123.0.0/24 to any port 8060 comment 'BE BRPC通信'
# BE数据交互端口(9060)
sudo ufw allow from 10.123.0.0/24 to any port 9060 comment 'BE数据交互'

# 3. 开放对外暴露端口(允许客户端/运维访问)
# FE监控/Web UI端口(8030,运维查看)
sudo ufw allow 8030 comment 'FE监控页面'
# FE MySQL客户端连接端口(9030,业务访问)
sudo ufw allow 9030 comment 'Doris MySQL连接'
# BE监控端口(8040,运维查看,可选)
sudo ufw allow 8040 comment 'BE监控页面'

# sudo ufw allow 22
# 4. 重载UFW规则使配置生效
sudo ufw reload

# 5. 验证防火墙规则(确认端口已开放)
sudo ufw status numbered

4.2 时间同步(Ubuntu 24 内置服务)​

# 配置阿里云NTP服务器
sudo tee /etc/systemd/timesyncd.conf <<EOF
[Time]
NTP=ntp.aliyun.com
FallbackNTP=time.ubuntu.com
EOF

# 重启时间服务并验证
sudo systemctl restart systemd-timesyncd
timedatectl status # 确保"System clock synchronized: yes"

4.3 Java 环境安装(FE 必需)​

# 安装OpenJDK 17
sudo apt install -y openjdk-17-jdk

# 配置JAVA_HOME(全局生效)
JAVA_PATH=$(dirname $(dirname $(readlink -f $(which java))))
sudo tee -a /etc/profile <<EOF
export JAVA_HOME=$JAVA_PATH
export PATH=\$JAVA_HOME/bin:\$PATH
EOF

# 生效并验证
source /etc/profile
java -version # 输出OpenJDK 17版本即成功

4.4 系统参数调优(避免资源竞争)​

# 1. 修改文件描述符限制(官方推荐100万,避免大规模集群文件句柄不足)
sudo tee -a /etc/security/limits.conf <<EOF
* soft nofile 1000000
* hard nofile 1000000
* soft nproc 65536
* hard nproc 65536
EOF

# 2. 禁用swap分区(Doris 推荐)
sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab

# 3. 禁用透明大页THP(官方要求,防止内存碎片和性能波动)
# 临时禁用
echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
# 永久禁用(写入rc.local)
sudo tee -a /etc/rc.local <<'EOF'
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
echo madvise > /sys/kernel/mm/transparent_hugepage/defrag
EOF
sudo chmod +x /etc/rc.local

# 4. 禁用CPU省电模式(官方要求,确保高负载下性能稳定)
# 若CPU不支持Scaling Governor可跳过此步
echo 'performance' | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

# 5. 优化内核参数(混合部署需增大内存映射)
sudo tee -a /etc/sysctl.conf <<EOF
vm.swappiness = 0
vm.max_map_count = 4000000 # 官方默认200万,混合部署加倍至400万,避免FE/BE内存竞争
fs.file-max = 655360
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 65536 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_abort_on_overflow = 1 # 官方建议,避免高并发下连接挂起
EOF

# 生效参数
sudo sysctl -p

##配置 PAM 模块
# 1. 确保common-session加载pam_limits.so
sudo grep -q "pam_limits.so" /etc/pam.d/common-session || sudo tee -a /etc/pam.d/common-session <<EOF
session required pam_limits.so
EOF

# 2. 确保非交互会话(systemd)也加载
sudo grep -q "pam_limits.so" /etc/pam.d/common-session-noninteractive || sudo tee -a /etc/pam.d/common-session-noninteractive <<EOF
session required pam_limits.so
EOF

## 配置 systemd 全局默认限制
# 编辑systemd全局配置文件
sudo tee -a /etc/systemd/system.conf <<EOF
DefaultLimitNOFILE=1000000
DefaultLimitNPROC=655350
EOF

# 编辑user级systemd配置(针对doris用户)
sudo tee -a /etc/systemd/user.conf <<EOF
DefaultLimitNOFILE=1000000
DefaultLimitNPROC=655350
EOF

4.5 主机名与 Hosts 配置​

# 节点1设置主机名(节点2/3分别改为ubuntu-doris-node2/ubuntu-doris-node3)
sudo hostnamectl set-hostname ubuntu-doris-node1

# 配置Hosts解析(所有节点执行,替换为实际IP)
sudo tee -a /etc/hosts <<EOF
10.123.0.141 ubuntu-doris-node1
10.123.0.142 ubuntu-doris-node2
10.123.0.143 ubuntu-doris-node3
EOF

# 验证解析
ping -c 3 doris-node1

4.6 创建运行用户与目录​

# 创建doris用户(避免root运行)
sudo useradd -m -s /bin/bash doris
sudo passwd doris # 设置密码(生产环境建议复杂密码)
sudo usermod -aG sudo doris

# 创建目录(FE/BE数据、日志分离存储)
sudo mkdir -p /data1/doris/fe/meta /data1/doris/fe/log /data1/doris/fe/log/audit /data2/doris/be/log /data2/doris/be/storage /data3/doris/be/storage
sudo chown -R doris:doris /data1/doris /data2/doris /data3/doris
sudo chmod 755 /data1/doris /data2/doris /data3/doris

5. 安装包准备(所有节点执行,4.0.6版本)​

# 安装依赖工具
sudo apt install -y wget tar

# 下载Doris 4.0.6安装包(官方地址)
wget https://downloads.apache.org/doris/4.0.6/apache-doris-4.0.6-bin-x64.tar.gz

# 验证安装包完整性(可选)
wget https://downloads.apache.org/doris/4.0.6/apache-doris-4.0.6-bin-x64.tar.gz.sha512
sha512sum -c apache-doris-4.0.6-bin-x64.tar.gz.sha512 # 输出"OK"即通过

# 解压到/opt/doris目录(无current软链接)
tar zxf apache-doris-4.0.6-bin-x64.tar.gz

mv apache-doris-4.0.6-bin-x64 /opt/doris

sudo chown -R doris:doris /opt/doris
sudo chmod 755 /opt/doris

# 验证目录结构
ls /opt/doris # 应看到fe、be、apache_hdfs_broker目录

二、混合部署集群配置(核心,含日志/Java/端口)​

1. 单节点 FE 配置(完整配置)​

1.1 节点1/2(FOLLOWER)配置​

sudo vim /opt/doris/fe/conf/fe.conf
# ========== 以下按需修改 ==========

# 日志目录
LOG_DIR = /data1/doris/fe/log

# Java 路径(使用 = 赋值,前后无空格)
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64

# JDK17 JVM 参数(4.x 强制要求,包含 GC 日志轮转、HeapDump 等)
# 生产环境 64GB 总内存,分配 16GB 给 FE 堆
JAVA_OPTS_FOR_JDK_17="-Dfile.encoding=UTF-8 -Djavax.security.auth.useSubjectCredsOnly=false -Xmx16384m -Xms16384m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_DIR -Xlog:gc*:$LOG_DIR/fe.gc.log.$CUR_DATE:time,uptime:filecount=10,filesize=50M -Darrow.enable_null_check_for_get=false --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/sun.nio.cs=ALL-UNNAMED --add-opens=java.base/sun.security.action=ALL-UNNAMED --add-opens=java.base/sun.util.calendar=ALL-UNNAMED --add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED --add-opens=java.management/sun.management=ALL-UNNAMED --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.xml/com.sun.org.apache.xerces.internal.jaxp=ALL-UNNAMED"

# ========== 以下取消注释并修改 ==========

# 元数据目录
meta_dir = /data1/doris/fe/meta

# 审计日志目录
audit_log_dir = /data1/doris/fe/log/audit

# 表名大小写不敏感(⚠️集群创建后不可修改!0=敏感 1=转小写 2=保留原名/不敏感,推荐2)
lower_case_table_names = 2

# 网络CIDR(根据节点IP所在子网配置,确保匹配节点IP)
priority_networks = 10.123.0.0/24

1.2 节点3(OBSERVER)配置​

sudo vim /opt/doris/fe/conf/fe.conf
# ========== 以下按需修改 ==========

# 日志目录
LOG_DIR = /data1/doris/fe/log

# Java 路径
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64

# JDK17 JVM 参数(与 FOLLOWER 一致)
JAVA_OPTS_FOR_JDK_17="-Dfile.encoding=UTF-8 -Djavax.security.auth.useSubjectCredsOnly=false -Xmx16384m -Xms16384m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_DIR -Xlog:gc*:$LOG_DIR/fe.gc.log.$CUR_DATE:time,uptime:filecount=10,filesize=50M -Darrow.enable_null_check_for_get=false --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/sun.nio.cs=ALL-UNNAMED --add-opens=java.base/sun.security.action=ALL-UNNAMED --add-opens=java.base/sun.util.calendar=ALL-UNNAMED --add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED --add-opens=java.management/sun.management=ALL-UNNAMED --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.xml/com.sun.org.apache.xerces.internal.jaxp=ALL-UNNAMED"

# ========== 以下取消注释并修改 ==========

# 元数据目录
meta_dir = /data1/doris/fe/meta

# 审计日志目录
audit_log_dir = /data1/doris/fe/log/audit

# OBSERVER 角色(手动添加,不参与选举)
node_role = OBSERVER

# 表名大小写不敏感(⚠️集群创建后不可修改!0=敏感 1=转小写 2=保留原名/不敏感,推荐2)
lower_case_table_names = 2

# 网络CIDR
priority_networks = 10.123.0.0/24

2. 单节点 BE 配置(完整配置)​

sudo vim /opt/doris/be/conf/be.conf
# ========== 以下按需修改 ==========

# 数据存储路径(SSD存热数据,HDD存冷数据)
storage_root_path = /data2/doris/be/storage,medium:SSD;/data3/doris/be/storage,medium:HDD

# Java 路径(使用 = 赋值,前后无空格)
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64

# 日志目录(默认指向 ${DORIS_HOME}/log/,这里改到数据盘)
LOG_DIR=/data2/doris/be/log/

# BE 内存限制(手动添加,默认不配为 90%。混合部署 64GB 用 60% ≈ 38GB,留给 FE 和系统)
mem_limit = 60%

# 网络CIDR(根据节点IP所在子网配置,确保匹配节点IP)
priority_networks = 10.123.0.0/24

# ========== 以下保持默认即可,无需修改 ==========
# JAVA_OPTS_FOR_JDK_17 默认已配好(-Xmx2048m),BE 主力是 C++,JVM 只用于辅助,无需调大
# JEMALLOC_CONF 默认已配好(jemalloc 内存分配器优化)
# 端口默认值:be_port=9060 webserver_port=8040 heartbeat_service_port=9050 brpc_port=8060 arrow_flight_sql_port=8050

3. 启动集群(按顺序执行)​

3.1 启动主 FE 节点(节点1)​

# 节点1(主FE/Master)启动(无需--helper参数)
sudo -u doris /opt/doris/fe/bin/start_fe.sh --daemon

# 等待30秒,确认FE启动
sudo /opt/doris/fe/bin/profile_fe.sh # 输出"pid: xxx"即成功
# 验证FE监控页面:浏览器访问 http://10.123.0.141:8030

3.2 注册并启动 FE FOLLOWER/OBSERVER 节点​

重要:官方要求先注册 FE 节点,再启动 FE 进程。若先启动后注册,可能导致 FE 加入集群失败。

# 安装MySQL客户端
sudo apt install -y mysql-client-core-8.0

# 1. 连接主FE(141)的MySQL端口(9030)
mysql -h 10.123.0.141 -P 9030 -u root

# 2. 先注册FE节点(必须先注册,再启动!)
# 注册节点2为FOLLOWER(参与选举):
ALTER SYSTEM ADD FOLLOWER "10.123.0.142:9010";

# 注册节点3为OBSERVER(仅同步元数据):
ALTER SYSTEM ADD OBSERVER "10.123.0.143:9010";

# 3. 验证注册结果
SHOW FRONTENDS;
# 预期结果:142/143节点出现在列表中,Role匹配配置的类型,Alive暂时为false(未启动)

注册完成后,再启动 FE FOLLOWER/OBSERVER 节点:

# 节点2(FOLLOWER)启动(--helper指向已存活的Master FE)
sudo -u doris /opt/doris/fe/bin/start_fe.sh --helper 10.123.0.141:9010 --daemon

# 节点3(OBSERVER)启动(--helper指向已存活的Master FE)
sudo -u doris /opt/doris/fe/bin/start_fe.sh --helper 10.123.0.141:9010 --daemon

注意:--helper 参数仅在首次启动时需要,后续重启无需指定。

3.3 注册并启动 BE(所有节点)​

重要:官方要求先注册 BE 节点,再启动 BE 进程。若先启动后注册,可能导致 BE 注册异常。

# 1. 先注册BE节点到FE(仅节点1执行)
mysql -h 10.123.0.141 -P 9030 -u root

# 执行以下SQL(注册BE节点,使用9050心跳端口)
ALTER SYSTEM ADD BACKEND "10.123.0.141:9050";
ALTER SYSTEM ADD BACKEND "10.123.0.142:9050";
ALTER SYSTEM ADD BACKEND "10.123.0.143:9050";

注册完成后,在所有节点启动 BE:

# 2. 所有节点启动BE
sudo -u doris /opt/doris/be/bin/start_be.sh --daemon

3.4 验证 BE 状态​

# 连接FE验证BE状态
mysql -h 10.123.0.141 -P 9030 -u root

## 查看 BE 状态
show backends;

通常情况下需要注意以下几项状态:

Alive 为 true 表示节点存活

TabletNum 表示该节点上的分片数量,新加入的节点会进行数据均衡,TabletNum 逐渐趋于平均

3.5 创建 FE 的 systemd 服务文件(所有 FE 节点执行)​

注意:以下配置已针对重启后无法启动的问题进行了优化

sudo tee /etc/systemd/system/doris-fe.service <<EOF
[Unit]
Description=Apache Doris FE Service
# 等待网络完全就绪后再启动
After=network.target network-online.target multi-user.target systemd-timesyncd.service
Wants=network.target network-online.target
Requires=network-online.target

[Service]
# 使用simple类型更稳定(推荐)
Type=simple
User=doris
Group=doris

# 预加载环境变量
Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
Environment=PATH=/usr/lib/jvm/java-17-openjdk-amd64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# 工作目录
WorkingDirectory=/opt/doris/fe

# 启动命令(节点1为Master,无需--helper;节点2/3需添加--helper参数)
# 节点1配置:
ExecStart=/bin/bash -c 'source /etc/profile && exec /opt/doris/fe/bin/start_fe.sh'

# 节点2/3配置(取消注释并替换为实际Master FE地址):
# ExecStart=/bin/bash -c 'source /etc/profile && exec /opt/doris/fe/bin/start_fe.sh --helper 10.123.0.141:9010'

# 停止命令
ExecStop=/opt/doris/fe/bin/stop_fe.sh

# 重启命令
ExecReload=/bin/bash -c '/opt/doris/fe/bin/stop_fe.sh && source /etc/profile && exec /opt/doris/fe/bin/start_fe.sh'

# 进程管理
PIDFile=/opt/doris/fe/bin/doris.pid
GuessMainPID=yes

# 自动重启配置
Restart=on-failure
RestartSec=10s
StartLimitInterval=60s
StartLimitBurst=3

# 资源限制
LimitNOFILE=1000000
LimitNPROC=655350
LimitCORE=infinity

# 日志配置
StandardOutput=journal
StandardError=journal
SyslogIdentifier=doris-fe

# 超时设置
TimeoutStartSec=300
TimeoutStopSec=120

[Install]
WantedBy=multi-user.target
EOF

# 重新加载systemd配置
sudo systemctl daemon-reload

# 启用FE服务(开机自启)
sudo systemctl enable doris-fe.service

# 启动服务并检查状态
sudo systemctl start doris-fe.service
sudo systemctl status doris-fe.service

# 验证服务是否启用
sudo systemctl is-enabled doris-fe.service
# 输出"enabled"表示启用成功

# 查看启动日志(重要:用于排查启动失败原因)
sudo journalctl -u doris-fe.service -f

3.6 重启后FE启动故障排查​

如果重启服务器后FE仍然无法启动,请按以下步骤排查:

3.6.1 检查systemd服务状态​

# 查看服务状态详情
sudo systemctl status doris-fe.service

# 查看详细启动日志
sudo journalctl -u doris-fe.service --no-pager -n 50

# 实时监控启动过程
sudo journalctl -u doris-fe.service -f

3.6.2 常见故障原因及解决方案​

故障现象可能原因解决方案
Failed to start Apache Doris FE ServiceJAVA_HOME环境变量未设置在服务文件中添加Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
Permission denieddoris用户权限不足检查/opt/doris目录权限:sudo chown -R doris:doris /opt/doris
Network is not available网络服务未就绪修改After=network-online.target,确保网络完全启动
PID file not foundPID文件路径错误确认PIDFile路径正确,或移除PIDFile配置
Too many open files文件描述符限制不足增加LimitNOFILE值或检查系统ulimit设置

3.6.3 手动验证启动​

# 切换到doris用户手动测试
sudo -u doris bash
source /etc/profile
cd /opt/doris/fe
./bin/start_fe.sh --daemon

# 检查进程是否启动
ps -ef | grep doris

3.7 创建 BE 的 systemd 服务文件(所有 BE 节点执行)​

注意:BE服务配置也进行了相应优化

sudo tee /etc/systemd/system/doris-be.service <<EOF
[Unit]
Description=Apache Doris BE Service
# 等待FE服务和网络完全就绪
After=network.target network-online.target doris-fe.service multi-user.target
Wants=network.target network-online.target doris-fe.service
Requires=network-online.target

[Service]
Type=simple
User=doris
Group=doris

# 环境变量配置
Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
Environment=PATH=/usr/lib/jvm/java-17-openjdk-amd64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# 工作目录
WorkingDirectory=/opt/doris/be

# 启动命令
ExecStart=/bin/bash -c 'source /etc/profile && exec /opt/doris/be/bin/start_be.sh'

# 停止命令
ExecStop=/opt/doris/be/bin/stop_be.sh

# 重启命令
ExecReload=/bin/bash -c '/opt/doris/be/bin/stop_be.sh && source /etc/profile && exec /opt/doris/be/bin/start_be.sh'

# 进程管理
GuessMainPID=yes

# 自动重启配置
Restart=on-failure
RestartSec=10s
StartLimitInterval=60s
StartLimitBurst=3

# 资源限制
LimitNOFILE=1000000
LimitNPROC=655350
LimitCORE=infinity

# 日志配置
StandardOutput=journal
StandardError=journal
SyslogIdentifier=doris-be

# 超时设置
TimeoutStartSec=300
TimeoutStopSec=120

[Install]
WantedBy=multi-user.target
EOF

# 重新加载systemd配置
sudo systemctl daemon-reload

# 启用BE服务(开机自启,但不立即启动)
sudo systemctl enable doris-be.service

# 验证服务是否启用
sudo systemctl is-enabled doris-be.service
# 输出"enabled"表示启用成功

3.8 服务管理常用命令​

# 启动/停止/重启服务
sudo systemctl start doris-fe.service
sudo systemctl stop doris-fe.service
sudo systemctl restart doris-fe.service

sudo systemctl restart doris-be.service
sudo systemctl stop doris-be.service

# 查看服务状态
sudo systemctl status doris-fe.service
sudo systemctl status doris-be.service

# 查看服务日志
sudo journalctl -u doris-fe.service -f
sudo journalctl -u doris-be.service -f

# 禁用开机自启
sudo systemctl disable doris-fe.service
sudo systemctl disable doris-be.service

4. 集群验证​

4.1 登录数据库​

通过 MySQL Client 登录 Doris 集群。

# 连接FE验证集群状态(9030端口)
mysql -h 10.123.0.141 -P 9030 -u root

4.2 检查 Doris 安装版本​

通过 show frontends 与 show backends 命令可以查看数据库版本情况。

# 1. 查看FE角色(Role列需匹配配置)
SHOW FRONTENDS;
# 预期结果:node1/node2=FOLLOWER,node3=OBSERVER,Alive=true

# 2. 查看BE状态(Alive=true,LastHeartbeat为近期时间)
SHOW BACKENDS;

4.3 修改 Doris 集群密码​

在创建 Doris 集群后,系统会自动创建 root 跟 admin 用户,并默认密码为空。建议在创建集群后为 root 、admin 用户重置一个新密码。

## 确认当前用户为 root,在 MySQL Client 中查看当前用户
select user();
+------------------------+
| user() |
+------------------------+
| 'root'@'10.123.0.141' |
+------------------------+
## 修改 root 用户密码,在 MySQL Client 中执行 set password 命令
SET PASSWORD = PASSWORD('password');

忘记密码恢复方法:若忘记 root 密码,可在 FE 节点本机通过 mysql -h127.0.0.1 -P9030 -uroot 免密登录,然后执行 SET PASSWORD = PASSWORD('new_password') 重置。

4.4 创建测试表并插入数据​

CREATE DATABASE test_db;

USE test_db;

CREATE TABLE test_table (id INT, name STRING)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 3
PROPERTIES ("replication_num" = "3");

# 插入测试数据
INSERT INTO test_table VALUES (1, 'doris_mixed');

# 查询数据(返回结果即集群正常)
SELECT * FROM test_table;

三、混合部署性能优化​

1. 单节点资源分配总结(8核64GB)​

组件内存分配CPU分配磁盘分配核心端口
FE8GB(堆内存)2核(0-1)100GB(/data/doris/fe)8030/9020/9030/9010
BE38GB(mem_limit=60%)5核(2-6)900GB(/data/doris/be)8040/9050/8060/9060
系统预留8GB1核(7)--

2. 核心优化点​

  • IO隔离:FE元数据、BE数据、日志分目录存储,避免IO竞争;
  • 内存限制:FE堆内存不超过总内存25%,BE mem_limit设为60-70%;
  • CPU绑定:通过taskset将FE/BE绑定到不同CPU核心,减少抢占;
  • Compaction调优:降低BE合并频率,减少混合部署下的IO压力;
  • 端口管控:仅对外暴露8030/8040(监控)、9030(MySQL连接),其余端口仅集群内互通。

四、混合部署运维管理​

1. 日志检查快捷命令​

# 查看FE实时日志
tail -f /opt/doris/fe/log/fe.log

# 查看BE实时日志
tail -f /opt/doris/be/log/be.INFO

# 查看FE审计日志(SQL操作记录)
tail -f /opt/doris/fe/log/audit/audit.log

3. 备份与恢复​

3.1 FE元数据备份​

sudo -u doris /opt/doris/fe/bin/stop_fe.sh
tar zcf fe_meta_backup_$(date +%Y%m%d).tar.gz /data/doris/fe/meta
sudo -u doris /opt/doris/fe/bin/start_fe.sh

3.2 集群升级(滚动升级)​

# 1. 备份当前版本
su - doris
cp -r /opt/doris /opt/doris/backup_$(date +%Y%m%d)

# 2. 滚动升级BE(逐个节点)
/opt/doris/be/bin/stop_be.sh
rm -rf /opt/doris/be/*
cp -r /path/to/new/doris/be/* /opt/doris/be/
/opt/doris/be/bin/start_be.sh

# 3. 升级FE(先升级Observer,再升级Follower)
/opt/doris/fe/bin/stop_fe.sh
rm -rf /opt/doris/fe/*
cp -r /path/to/new/doris/fe/* /opt/doris/fe/
/opt/doris/fe/bin/start_fe.sh --helper 10.123.0.141:9010 --daemon

4. 常见故障处理(含端口/URL相关)​

故障现象排查步骤解决方法
FE/BE进程崩溃1. 查看日志:/data/doris/log/fe/fe.log、/data/doris/log/be/be.INFO
2. 检查内存/CPU使用率
3. 验证Java路径
1. 降低FE/BE资源占用
2. 修正JAVA_HOME路径
3. 重新绑定CPU核心
BE Alive=false1. 检查9050端口连通性(nc -zv <BE_IP> 9050)
2. 查看/data/doris/be/storage权限
1. 重启BE进程
2. 确保FE能访问BE的9050端口
3. 检查目录权限为doris:doris
无法访问FE监控页面(8030)1. 检查8030端口是否被占用(ss -tulpn 后用 grep 8030 过滤)
2. 验证FE进程是否运行
1. 释放8030端口
2. 重启FE进程
3. 确认防火墙已关闭
MySQL无法连接9030端口1. 检查9030端口监听状态(ss -tulpn 后用 grep 9030 过滤)
2. 验证FE配置中query_port=9030
1. 修正FE的query_port配置
2. 重启FE进程
BE日志过大占满磁盘1. 查看日志目录大小:du -sh /data/doris/log/be
2. 检查sys_log_keep_hours配置
1. 临时清理旧日志
2. 减小sys_log_roll_size或缩短保留时间