跳到主要内容

Apache Doris 测试环境部署指南(Ubuntu 24.04 | SIT/UAT 3FE+3BE)

文档概述​

1. 文档目的​

基于 Ubuntu 24.04 LTS 系统,提供 3FE + 3BE 分离部署(FE 与 BE 部署在不同物理节点)的 Apache Doris 4.1.2 测试环境完整部署与运维指南。适用于 SIT(系统集成测试)和 UAT(用户验收测试)场景,所有命令可直接在 Ubuntu 24 执行。

架构选择说明:本文档采用存算一体 + 分离部署模式(FE 与 BE 部署在不同服务器上,互不影响)。FE 负责请求接入、查询规划与元数据管理,BE 负责数据存储与计算。适用于需要独立资源评估、性能压测的测试场景。如需混合部署(单节点同时运行 FE+BE),请参考生产环境混合部署指南。

2. 核心适配说明​

  • 系统版本:Ubuntu 24.04 LTS
  • Doris 版本:4.1.2(最新版)
  • 部署模式:分离部署(FE 专用节点 + BE 专用节点,互不干扰)
  • FE 节点数量:3 台(全部 FOLLOWER 角色,保证高可用)
  • BE 节点数量:3 台(3 副本存储,保证数据可靠性)
  • Java 版本:OpenJDK 17(Doris 4.x 强制要求)
  • 核心要求:CPU 支持 AVX2 指令集(Doris 必需)
  • 路径说明:直接使用物理目录 /opt/doris,无 /current 软链接

3. 测试环境集群架构​

3.1 FE 节点​

节点编号IP地址组件角色硬件配置磁盘分配
FE节点110.10.0.43FE(FOLLOWER)4C/8G/200G50GB meta + 20GB log
FE节点210.10.0.44FE(FOLLOWER)4C/8G/200G50GB meta + 20GB log
FE节点310.10.0.45FE(FOLLOWER)4C/8G/200G50GB meta + 20GB log

说明:3 个 FE 全部采用 FOLLOWER 角色(奇数个,均可参与选举),无需 OBSERVER。任意一个 FE 故障不影响集群读写。

3.2 BE 节点​

节点编号IP地址组件角色硬件配置磁盘分配
BE节点110.10.0.46BE8C/16G/2000G1800GB 数据 + 200GB 预留
BE节点210.10.0.47BE8C/16G/2000G1800GB 数据 + 200GB 预留
BE节点310.10.0.48BE8C/16G/2000G1800GB 数据 + 200GB 预留

4. 磁盘空间规划参考​

组件推荐空间说明
FE50GB+SSD,用于元数据存储,单盘即可
BE总数据量 × 3 × 1.4 / BE节点数LZ4 压缩比 0.3-0.5,3副本 + 40% 预留空间(后台 Compaction 用),2TB 单盘可容纳约 300-400GB 压缩后数据

5. 端口规划​

5.1 FE 端口(FE 节点开放)​

端口号协议用途访问说明
8030HTTPFE 内置监控页面、Web UI浏览器访问:http://<FE节点IP>:8030
9010TCPFE 节点间元数据日志同步(Edit Log)仅 FE 节点间互通
9020TCPFE RPC 通信(Thrift Server)BE→FE、FE↔FE 互通
9030TCPMySQL 客户端连接端口mysql -h <FE节点IP> -P 9030 -u root
8070TCPArrow Flight SQL 端口(高性能数据传输)可选,需显式开启

5.2 BE 端口(BE 节点开放)​

端口号协议用途访问说明
8040HTTPBE HTTP ServerBE↔BE 互通、浏览器监控:http://<BE节点IP>:8040
9050TCPBE 心跳服务(Thrift)FE→BE 心跳,用于 FE 检测 BE 存活状态
8060TCPBE BRPC 通信FE↔BE、BE↔BE 互通(查询片段分发、数据交换)
9060TCPBE 数据交互(Thrift Server)FE→BE 数据交互、BE↔BE 副本克隆/快照
8050TCPBE Arrow Flight SQL 端口(高性能数据传输)可选,需显式开启

6. 核心 URL 汇总​

用途URL/地址说明
Doris 4.1.2 安装包下载https://downloads.apache.org/doris/4.1.2/apache-doris-4.1.2-bin-x64.tar.gz官方下载地址
Doris 4.1.2 校验文件https://downloads.apache.org/doris/4.1.2/apache-doris-4.1.2-bin-x64.tar.gz.sha512用于验证安装包完整性
FE 监控页面(43)http://10.10.0.43:8030查看 FE 集群状态
FE 监控页面(44)http://10.10.0.44:8030查看 FE 集群状态
FE 监控页面(45)http://10.10.0.45:8030查看 FE 集群状态
BE 监控页面http://<BE节点IP>:8040查看 BE 负载、磁盘状态

一、环境准备(所有 6 台节点执行)​

1. 核心依赖验证​

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

# 2. 验证Ubuntu版本
lsb_release -a

# 3. 验证磁盘分区挂载(确认 /data 分区已正确挂载且空间充足)
# FE 节点(43/44/45):预期 /data ≈ 200G
# BE 节点(46/47/48):预期 /data ≈ 2.0T
df -h | grep -E 'Filesystem|/data'

# 4. 更新系统包
sudo apt update && sudo apt upgrade -y

2. 主机名与 Hosts 配置​

# FE 节点设置主机名
# 10.10.0.43 执行:
sudo hostnamectl set-hostname doris-fe-43
# 10.10.0.44 执行:
sudo hostnamectl set-hostname doris-fe-44
# 10.10.0.45 执行:
sudo hostnamectl set-hostname doris-fe-45

# BE 节点设置主机名
# 10.10.0.46 执行:
sudo hostnamectl set-hostname doris-be-46
# 10.10.0.47 执行:
sudo hostnamectl set-hostname doris-be-47
# 10.10.0.48 执行:
sudo hostnamectl set-hostname doris-be-48

# 配置 Hosts 解析(所有 6 台节点都执行)
sudo tee -a /etc/hosts <<EOF
10.10.0.43 doris-fe-43
10.10.0.44 doris-fe-44
10.10.0.45 doris-fe-45
10.10.0.46 doris-be-46
10.10.0.47 doris-be-47
10.10.0.48 doris-be-48
EOF

# 验证解析
ping -c 2 doris-fe-43

3. 防火墙配置​

3.1 FE 节点防火墙(43/44/45)​

sudo ufw enable

# FE 节点间互信(FE 子网 10.10.0.43/32, 10.10.0.44/32, 10.10.0.45/32)
sudo ufw allow from 10.10.0.43 to any port 9010 comment 'FE EditLog sync'
sudo ufw allow from 10.10.0.44 to any port 9010 comment 'FE EditLog sync'
sudo ufw allow from 10.10.0.45 to any port 9010 comment 'FE EditLog sync'
sudo ufw allow from 10.10.0.43 to any port 9020 comment 'FE RPC'
sudo ufw allow from 10.10.0.44 to any port 9020 comment 'FE RPC'
sudo ufw allow from 10.10.0.45 to any port 9020 comment 'FE RPC'

# BE→FE 通信(BE 通过 9020 端口 RPC 访问 FE)
sudo ufw allow from 10.10.0.46 to any port 9020 comment 'BE RPC'
sudo ufw allow from 10.10.0.47 to any port 9020 comment 'BE RPC'
sudo ufw allow from 10.10.0.48 to any port 9020 comment 'BE RPC'

# 对外暴露端口(允许运维/客户端访问)
sudo ufw allow 8030 comment 'FE Web UI'
sudo ufw allow 9030 comment 'Doris MySQL'

sudo ufw reload
sudo ufw status numbered

3.2 BE 节点防火墙(46/47/48)​

sudo ufw enable

# FE 节点心跳通信
sudo ufw allow from 10.10.0.43 to any port 9050 comment 'FE heartbeat'
sudo ufw allow from 10.10.0.44 to any port 9050 comment 'FE heartbeat'
sudo ufw allow from 10.10.0.45 to any port 9050 comment 'FE heartbeat'

# FE 节点数据交互
sudo ufw allow from 10.10.0.43 to any port 9060 comment 'FE Thrift'
sudo ufw allow from 10.10.0.44 to any port 9060 comment 'FE Thrift'
sudo ufw allow from 10.10.0.45 to any port 9060 comment 'FE Thrift'

# BE 节点间互信(BRPC 8060 + Thrift 9060)
sudo ufw allow from 10.10.0.46 to any port 8060 comment 'BE BRPC'
sudo ufw allow from 10.10.0.47 to any port 8060 comment 'BE BRPC'
sudo ufw allow from 10.10.0.48 to any port 8060 comment 'BE BRPC'
sudo ufw allow from 10.10.0.46 to any port 9060 comment 'BE Thrift inter'
sudo ufw allow from 10.10.0.47 to any port 9060 comment 'BE Thrift inter'
sudo ufw allow from 10.10.0.48 to any port 9060 comment 'BE Thrift inter'

# FE→BE BRPC 8060(FE 下发查询片段)
sudo ufw allow from 10.10.0.43 to any port 8060 comment 'FE BRPC'
sudo ufw allow from 10.10.0.44 to any port 8060 comment 'FE BRPC'
sudo ufw allow from 10.10.0.45 to any port 8060 comment 'FE BRPC'

# 运维监控端口
sudo ufw allow 8040 comment 'BE Web UI'

sudo ufw reload
sudo ufw status numbered

4. 时间同步​

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"

5. Java 环境安装(仅 FE 节点需要,43/44/45)​

注意:BE 节点可不安装 JDK,但安装后可方便调试。以下仅 FE 节点执行。

# FE 节点安装 JDK 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 版本即成功

6. 系统参数调优​

6.1 FE 节点(43/44/45)​

# 文件描述符限制(FE 对文件句柄需求较小)
sudo tee -a /etc/security/limits.conf <<EOF
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
EOF

# 禁用 swap
sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab

# 禁用透明大页 THP
echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
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

# 内核参数
sudo tee -a /etc/sysctl.conf <<EOF
vm.swappiness = 0
vm.max_map_count = 2000000
fs.file-max = 655360
EOF
sudo sysctl -p

# PAM 配置
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
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 全局限制
sudo tee -a /etc/systemd/system.conf <<EOF
DefaultLimitNOFILE=65536
DefaultLimitNPROC=65536
EOF

6.2 BE 节点(46/47/48)​

# 文件描述符限制(BE 需要较多文件句柄)
sudo tee -a /etc/security/limits.conf <<EOF
* soft nofile 1000000
* hard nofile 1000000
* soft nproc 65536
* hard nproc 65536
EOF

# 禁用 swap(Doris 强烈建议禁用)
sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab

# 禁用透明大页 THP
echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
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

# 禁用 CPU 省电模式
echo 'performance' | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

# 内核参数(分离部署无需增大 max_map_count)
sudo tee -a /etc/sysctl.conf <<EOF
vm.swappiness = 0
vm.max_map_count = 2000000
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 配置
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
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 全局限制
sudo tee -a /etc/systemd/system.conf <<EOF
DefaultLimitNOFILE=1000000
DefaultLimitNPROC=655350
EOF

7. 创建运行用户与目录​

7.1 FE 节点(43/44/45)​

# 创建 doris 用户
sudo useradd -m -s /bin/bash doris
sudo passwd doris # 设置密码

# 创建 FE 目录
sudo mkdir -p /data/doris/fe/meta /data/doris/fe/log /data/doris/fe/log/audit
sudo chown -R doris:doris /data/doris
sudo chmod 755 /data/doris

7.2 BE 节点(46/47/48)​

# 创建 doris 用户
sudo useradd -m -s /bin/bash doris
sudo passwd doris # 设置密码

# 创建 BE 目录
sudo mkdir -p /data/doris/be/log /data/doris/be/storage
sudo chown -R doris:doris /data/doris
sudo chmod 755 /data/doris

8. 安装包准备(所有 6 台节点执行)​

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

# 下载 Doris 4.1.2 安装包
wget https://download.selectdb.com/apache-doris-4.1.2-bin-x64.tar.gz


# 解压到 /opt/doris
tar zxf apache-doris-4.1.2-bin-x64.tar.gz
mv apache-doris-4.1.2-bin-x64 /opt/doris
sudo chown -R doris:doris /opt/doris
sudo chmod 755 /opt/doris

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

二、FE 节点配置与启动​

启动顺序要求:先启动 FE 节点 1(43)作为 Master,再注册并启动 FE 节点 2(44)、FE 节点 3(45)。

1. FE 配置(所有 3 个 FE 节点相同)​

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

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

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

# JDK17 JVM 参数(4.x 强制要求,包含 GC 日志轮转、HeapDump 等,直接修改 -Xmx/-Xms 即可)
# 测试环境 8GB 总内存,分配 5GB 给 FE 堆
JAVA_OPTS_FOR_JDK_17="-Dfile.encoding=UTF-8 -Djavax.security.auth.useSubjectCredsOnly=false -Xmx5120m -Xms5120m -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 = /data/doris/fe/meta

# 设置大小写敏感,建议调整为 1,即大小写不敏感。(该参数在集群创建后不能再修改)
lower_case_table_names = 1

# 网络 CIDR
priority_networks = 10.10.0.0/24

2. 启动主 FE 节点(10.10.0.43)​

# 在 10.10.0.43 上执行
sudo -u doris /opt/doris/fe/bin/start_fe.sh --daemon

# 等待 30 秒,确认 FE 启动
sudo /opt/doris/fe/bin/profile_fe.sh # 输出 "pid: xxx" 即成功

# 本机验证(确认 FE 服务正常)
curl http://127.0.0.1:8030

# 验证 FE 监控页面:浏览器访问 http://10.10.0.43:8030
# ⚠️ 若本地 PC 不在 10.10.0.0/24 网段,需通过跳板机端口转发:
# ssh -L 8030:10.10.0.43:8030 -L 9030:10.10.0.43:9030 user@跳板机IP -N
# 然后访问 http://localhost:8030

3. 注册并启动其他 FE 节点​

# 在任意节点安装 MySQL 客户端(用 43 节点即可)
sudo apt install -y mysql-client-core-8.0

# 连接主 FE
mysql -h 10.10.0.43 -P 9030 -u root

# 注册 FE 节点(必须先注册,再启动!)
ALTER SYSTEM ADD FOLLOWER "10.10.0.44:9010";
ALTER SYSTEM ADD FOLLOWER "10.10.0.45:9010";

# 验证注册结果
SHOW FRONTENDS;
# 预期:44/45 节点出现在列表中,Role=FOLLOWER,Alive 暂时为 false
# 在 10.10.0.44 上启动 FE
sudo -u doris /opt/doris/fe/bin/start_fe.sh --helper 10.10.0.43:9010 --daemon

# 在 10.10.0.45 上启动 FE
sudo -u doris /opt/doris/fe/bin/start_fe.sh --helper 10.10.0.43:9010 --daemon

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

4. 验证 FE 集群​

SHOW FRONTENDS;
-- 预期:3 个节点全部 Alive=true,Role=FOLLOWER,IsMaster 分别 true/false/false

三、BE 节点配置与启动​

1. BE 配置(所有 3 个 BE 节点相同)​

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

# 数据存储路径(单盘 SSD)
storage_root_path = /data/doris/be/storage,medium:SSD

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

# 日志目录(默认指向 ${DORIS_HOME}/log/,这里改到 /data 分区)
LOG_DIR=/data/doris/be/log/

# BE 内存限制(手动添加,默认不配为 90%。16GB 机器用 70% ≈ 11GB,预留 5GB 给系统)
mem_limit = 70%

# 网络 CIDR
priority_networks = 10.10.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

2. 注册 BE 节点​

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

# 连接 FE(在任意 FE 节点执行)
mysql -h 10.10.0.43 -P 9030 -u root

# 注册 BE 节点(使用 9050 心跳端口)
ALTER SYSTEM ADD BACKEND "10.10.0.46:9050";
ALTER SYSTEM ADD BACKEND "10.10.0.47:9050";
ALTER SYSTEM ADD BACKEND "10.10.0.48:9050";

3. 启动 BE​

# 在 10.10.0.46 上执行
sudo -u doris /opt/doris/be/bin/start_be.sh --daemon

# 在 10.10.0.47 上执行
sudo -u doris /opt/doris/be/bin/start_be.sh --daemon

# 在 10.10.0.48 上执行
sudo -u doris /opt/doris/be/bin/start_be.sh --daemon

4. 验证 BE 状态​

SHOW BACKENDS;
-- 关注以下列:
-- Alive = true 表示节点存活
-- TabletNum 表示分片数量,新节点会逐渐均衡
-- DataUsedCapacity 表示已用数据量

四、集群验证​

1. 登录数据库​

# 通过 MySQL 客户端连接 Doris
mysql -h 10.10.0.43 -P 9030 -u root

2. 检查集群节点​

-- 查看 FE 状态
SHOW FRONTENDS;

-- 查看 BE 状态
SHOW BACKENDS;

3. 修改默认密码​

-- 确认当前用户为 root
SELECT user();
-- +-----------------------+
-- | user() |
-- +-----------------------+
-- | 'root'@'10.10.0.43' |
-- +-----------------------+

-- 修改 root 密码
SET PASSWORD = PASSWORD('your_secure_password');

忘记密码恢复方法:Doris 的 root 账户在 FE 节点本机始终支持免密登录,不受密码变更影响。忘记密码时,只需 SSH 到任意 FE 节点,执行以下命令即可重置:

mysql -h127.0.0.1 -P9030 -uroot     # 无需密码,直接登录
SET PASSWORD = PASSWORD('new_password');   -- 重置 root 密码

原理:Doris 信任本地回环连接(127.0.0.1),root 通过本机登录时跳过密码验证。这也是将 root 限制为 localhost 后仍然能恢复的原因——即使忘记业务管理员 doris_admin 的密码,也能 SSH 到 FE 节点用 root 免密登录进行重置。

4. 创建业务管理员账户​

Doris 集群初始化后自带两个内置账户:root 和 admin。建议将内置账户限制为本机登录(仅用于紧急恢复),另外创建业务专用管理员账户供日常运维使用。

-- 查看当前内置用户
SELECT user, host FROM mysql.user;
-- +-------+------+
-- | user | host |
-- +-------+------+
-- | admin | % |
-- | root | % |
-- +-------+------+

第一步:创建业务管理员账户

-- 创建业务管理员(允许远程登录,密码强度满足业务规范)
CREATE USER 'doris_admin'@'%' IDENTIFIED BY 'Doris@Admin2024!';

-- 授予管理权限(等同于内置 admin/root 权限)
-- 注意:ADMIN_PRIV 必须用 *.*.*(三级资源),GRANT_PRIV 和 ALL 用 *.*
GRANT ADMIN_PRIV ON *.*.* TO 'doris_admin'@'%';
GRANT GRANT_PRIV ON *.* TO 'doris_admin'@'%';
GRANT ALL ON *.* TO 'doris_admin'@'%';

关键说明:

  • ADMIN_PRIV 是集群级权限,必须在 *.*.* 上授予,不能与数据权限合并;
  • Doris 中 ALL 只包含数据操作权限(SELECT、LOAD、ALTER、CREATE、DROP 等),不包含 GRANT_PRIV(授权他人权限的能力),必须显式授予。

第二步:锁闭内置账户

-- 用 doris_admin 登录后执行:限制 root 和 admin 仅本机可登录
DROP USER 'root'@'%';
DROP USER 'admin'@'%';
CREATE USER 'root'@'localhost' IDENTIFIED BY 'Root@Recovery2024!';
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'Admin@Recovery2024!';

-- 验证结果
SELECT user, host FROM mysql.user;
-- +-------------+-----------+
-- | user | host |
-- +-------------+-----------+
-- | admin | localhost |
-- | doris_admin | % |
-- | root | localhost |
-- +-------------+-----------+

安全说明:锁闭后,root/admin 仅能在 FE 节点本机通过 mysql -h127.0.0.1 -P9030 免密登录,用于密码重置等紧急操作,外网无法访问。

第三步:创建工具/应用专用账户

-- DBT 账户:需要建表、写数据权限(用于物化视图、模型创建)
CREATE USER 'dbt_user'@'%' IDENTIFIED BY 'Dbt@Transform2024!';
GRANT ALL ON *.* TO 'dbt_user'@'%';

-- SeaTunnel 账户:需要读写数据权限(用于数据同步/ETL)
CREATE USER 'seatunnel_user'@'%' IDENTIFIED BY 'SeaTunnel@Sync2024!';
GRANT SELECT_PRIV, LOAD_PRIV, ALTER_PRIV, CREATE_PRIV, DROP_PRIV ON *.* TO 'seatunnel_user'@'%';

-- 只读账户(供 BI 工具或数据分析人员使用)
CREATE USER 'reader'@'%' IDENTIFIED BY 'Reader@2024!';
GRANT SELECT_PRIV ON *.* TO 'reader'@'%';

SeaTunnel 权限说明:

  • LOAD_PRIV:Stream Load 导入权限,SeaTunnel 写入 Doris 必需;
  • SELECT_PRIV:从 Doris 读取数据(作为 Source);
  • ALTER_PRIV / CREATE_PRIV / DROP_PRIV:自动建表或临时表管理(视场景按需授予,若仅读写固定表可去掉)。

生产环境建议:按数据库粒度收紧权限,例如:

GRANT SELECT_PRIV, LOAD_PRIV ON ods_db.* TO 'seatunnel_user'@'%';
GRANT ALL ON dwd_db.* TO 'dbt_user'@'%';

5. 创建测试表并插入数据​

CREATE DATABASE test_db;
USE test_db;

-- 3 副本表,保证数据可靠性
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_test_cluster');

-- 查询验证
SELECT * FROM test_table;
-- 返回结果即集群正常

五、用户管理与远程访问​

1. 用户账户体系概述​

Doris 采用 MySQL 兼容的用户认证模型,用户身份由 用户名@客户端主机 唯一确定。即使用户名相同,来自不同主机的连接会被视为不同用户。

账户类型用途说明
root紧急恢复内置账户,限制仅本机免密登录,不对外开放
admin紧急恢复(备)内置账户,同样锁闭为仅本机登录
doris_admin业务管理员手动创建,日常集群管理、建库建表、用户管理,支持远程访问
reader只读查询BI 工具、数据分析,按需创建

2. 远程访问原理​

Doris FE 的 MySQL 协议端口(9030)和 HTTP 端口(8030)默认监听所有网络接口(0.0.0.0),因此只要满足以下条件即可从远程客户端访问:

  1. 网络可达:客户端和 FE 节点之间路由通畅;
  2. 防火墙放行:FE 节点防火墙已开放 9030(MySQL)和 8030(Web UI)端口;
  3. 用户允许远程:数据库用户创建时使用了 '%'(任意主机)或客户端所在的 IP/网段。

3. 配置远程访问​

3.1 检查 FE 绑定地址​

# 确认 FE MySQL 端口监听在 0.0.0.0(所有接口)
ssh 10.10.0.43 "ss -tulpn | grep 9030"
# 预期输出(LISTEN 0.0.0.0:9030 表示监听所有接口):
# tcp LISTEN 0 128 0.0.0.0:9030 0.0.0.0:* users:(("java",pid=xxx,fd=xxx))

如果监听地址为 127.0.0.1:9030(仅本机),需要修改 fe.conf:

# 检查 fe.conf 中是否有 mysql_service_nio_enabled 或绑定配置
grep -E 'mysql_service_nio_enabled|mysql_port|bind' /opt/doris/fe/conf/fe.conf

# 默认无需修改,若发现绑定限制,确保以下配置不存在或值正确:
# mysql_service_nio_enabled = true (默认值,启用 NIO,支持远程连接)

3.2 防火墙开放远程访问端口​

# 在所有 FE 节点(43/44/45)执行,允许外部客户端访问
# 如果之前未完全开放,补充以下规则:

# 允许任意来源访问 Web UI(8030)
sudo ufw allow 8030 comment 'FE WebUI remote'
# 允许任意来源访问 MySQL 协议(9030)
sudo ufw allow 9030 comment 'MySQL remote'

# 如果只需允许特定网段(如公司内网 192.168.0.0/16),用以下方式替代:
# sudo ufw allow from 192.168.0.0/16 to any port 9030 comment 'MySQL office'
# sudo ufw allow from 192.168.0.0/16 to any port 8030 comment 'WebUI office'

sudo ufw reload
sudo ufw status numbered

3.3 验证远程连接​

# 从远程客户端(非集群网段的 PC)测试 MySQL 连接
mysql -h 10.10.0.43 -P 9030 -u doris_admin -p
# 输入 Doris@Admin2024!

# 从浏览器验证 Web UI(确认能打开 FE 监控页面)
# 访问:http://10.10.0.43:8030
# 默认无需登录,建议通过 Nginx 反向代理增加认证层(见下节)

4. Web UI 安全加固(可选)​

Doris FE Web UI(8030 端口)默认无身份认证,任何人只要能访问该端口即可查看集群状态、执行部分管理操作。生产或测试环境建议通过 Nginx 反向代理增加 HTTP Basic Auth。

# 在 FE 节点或跳板机上安装 Nginx
sudo apt install -y nginx apache2-utils

# 创建认证用户文件
sudo htpasswd -c /etc/nginx/.htpasswd doris_admin
# 输入密码(两次确认)

# 配置 Nginx 反向代理
sudo tee /etc/nginx/sites-available/doris-ui <<'EOF'
server {
listen 8080;
server_name _;

auth_basic "Doris Admin";
auth_basic_user_file /etc/nginx/.htpasswd;

location / {
proxy_pass http://127.0.0.1:8030;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 60s;
}
}
EOF

sudo ln -s /etc/nginx/sites-available/doris-ui /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

# 之后通过 http://<FE_IP>:8080 访问 Web UI(需输入 htpasswd 用户名密码)

多 FE 高可用:若需统一入口访问多个 FE,可在 Nginx 中配置 upstream 列表,将请求转发到所有 FE 节点。

5. 远程管理常用操作​

# 查看所有用户及其允许的连接主机
mysql -h 10.10.0.43 -P 9030 -u doris_admin -p -e "SELECT user, host FROM mysql.user;"

# 查看业务管理员权限
mysql -h 10.10.0.43 -P 9030 -u doris_admin -p -e "SHOW GRANTS FOR 'doris_admin'@'%';"

# 查看所有用户权限概览
mysql -h 10.10.0.43 -P 9030 -u doris_admin -p -e "SHOW ALL GRANTS;"

六、Systemd 服务配置​

1. FE 服务(仅在 FE 节点 43/44/45 执行)​

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]
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

# 节点 43(Master)配置:
ExecStart=/bin/bash -c 'source /etc/profile && exec /opt/doris/fe/bin/start_fe.sh'

# 节点 44/45 配置(取消注释并替换):
# ExecStart=/bin/bash -c 'source /etc/profile && exec /opt/doris/fe/bin/start_fe.sh --helper 10.10.0.43:9010'

ExecStop=/opt/doris/fe/bin/stop_fe.sh

Restart=on-failure
RestartSec=10s
StartLimitInterval=60s
StartLimitBurst=3

LimitNOFILE=65536
LimitNPROC=65536

StandardOutput=journal
StandardError=journal
SyslogIdentifier=doris-fe

TimeoutStartSec=300
TimeoutStopSec=120

[Install]
WantedBy=multi-user.target
EOF

# 启用服务
sudo systemctl daemon-reload
sudo systemctl enable doris-fe.service
sudo systemctl start doris-fe.service
sudo systemctl status doris-fe.service

2. BE 服务(仅在 BE 节点 46/47/48 执行)​

sudo tee /etc/systemd/system/doris-be.service <<EOF
[Unit]
Description=Apache Doris BE Service
After=network.target network-online.target multi-user.target systemd-timesyncd.service
Wants=network.target network-online.target
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

Restart=on-failure
RestartSec=10s
StartLimitInterval=60s
StartLimitBurst=3

LimitNOFILE=1000000
LimitNPROC=655350

StandardOutput=journal
StandardError=journal
SyslogIdentifier=doris-be

TimeoutStartSec=300
TimeoutStopSec=120

[Install]
WantedBy=multi-user.target
EOF

# 启用服务(不立即启动,确保 FE 先启动后再启动 BE)
sudo systemctl daemon-reload
sudo systemctl enable doris-be.service

七、资源分配总结​

7.1 FE 节点(4C/8G/200G)​

资源项分配值说明
FE 堆内存5GB-Xmx5120m,占总内存 62.5%
系统预留3GB操作系统 + 缓存开销
磁盘分配50GB meta + 20GB log元数据 + 审计日志,200GB 总盘充裕
CPU 分配全部 4 核FE 对 CPU 需求不高,无需绑核

7.2 BE 节点(8C/16G/2000G)​

资源项分配值说明
BE 内存约 11GBmem_limit=70%,占总内存 70%
系统预留约 5GB操作系统 + 页缓存
磁盘分配1800GB 存储 + 200GB 预留单盘 SSD,2TB 总盘
CPU 分配全部 8 核BE 为计算密集型,无需绑核
文件描述符1000000避免大规模查询时文件句柄不足

八、运维管理​

1. 服务管理常用命令​

# FE 服务(在 FE 节点执行)
sudo systemctl start doris-fe.service
sudo systemctl stop doris-fe.service
sudo systemctl restart doris-fe.service
sudo systemctl status doris-fe.service
sudo journalctl -u doris-fe.service -f

# BE 服务(在 BE 节点执行)
sudo systemctl start doris-be.service
sudo systemctl stop doris-be.service
sudo systemctl restart doris-be.service
sudo systemctl status doris-be.service
sudo journalctl -u doris-be.service -f

2. 日志检查​

# FE 日志(FE 节点)
tail -f /data/doris/fe/log/fe.log
tail -f /data/doris/fe/log/fe.warn.log

# FE 审计日志(FE 节点)
tail -f /data/doris/fe/log/audit/fe.audit.log

# BE 日志(BE 节点)
tail -f /data/doris/be/log/be.INFO
tail -f /data/doris/be/log/be.WARNING

3. FE 元数据备份​

# 在 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 --daemon

4. 滚动升级​

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

# 2. 滚动升级 BE(逐个节点,保证集群始终有可用 BE)
# 在每个 BE 节点依次执行:
sudo -u doris /opt/doris/be/bin/stop_be.sh
rm -rf /opt/doris/be/lib /opt/doris/be/bin
cp -r /path/to/new/be/lib /opt/doris/be/
cp -r /path/to/new/be/bin /opt/doris/be/
sudo -u doris /opt/doris/be/bin/start_be.sh --daemon
# 等待 BE 恢复(SHOW BACKENDS 确认 Alive=true)后再操作下一台

# 3. 滚动升级 FE(先升非 Master 节点,最后升 Master)
# 先升级 44、45:
sudo -u doris /opt/doris/fe/bin/stop_fe.sh
rm -rf /opt/doris/fe/lib /opt/doris/fe/bin /opt/doris/fe/spark-dpp
cp -r /path/to/new/fe/lib /opt/doris/fe/
cp -r /path/to/new/fe/bin /opt/doris/fe/
cp -r /path/to/new/fe/spark-dpp /opt/doris/fe/
sudo -u doris /opt/doris/fe/bin/start_fe.sh --helper 10.10.0.43:9010 --daemon

# 最后升级 Master(43):
sudo -u doris /opt/doris/fe/bin/stop_fe.sh
rm -rf /opt/doris/fe/lib /opt/doris/fe/bin /opt/doris/fe/spark-dpp
cp -r /path/to/new/fe/lib /opt/doris/fe/
cp -r /path/to/new/fe/bin /opt/doris/fe/
cp -r /path/to/new/fe/spark-dpp /opt/doris/fe/
sudo -u doris /opt/doris/fe/bin/start_fe.sh --daemon

九、常见故障处理​

故障现象排查步骤解决方法
FE 启动失败,日志报 JAVA_OPTS_FOR_JDK_17 is not set检查 fe.conf 是否配置了完整的 JAVA_OPTS_FOR_JDK_17(含 --add-opens 等模块参数)从原始 fe.conf 中复制默认的 JAVA_OPTS_FOR_JDK_17 并调整 -Xmx/-Xms 即可
BE Alive=false1. 检查 FE 到 BE 的 9050 端口连通性:nc -zv 10.10.0.46 9050
2. 检查 BE 日志 /data/doris/be/log/be.WARNING
1. 确认防火墙已开放对应端口
2. 重启 BE 进程
3. 检查目录权限为 doris:doris
无法访问 FE 监控页面(8030)1. 检查 8030 端口:ss -tulpn | grep 8030
2. 确认 FE 进程运行中
1. 检查防火墙规则
2. 重启 FE 进程
MySQL 无法连接 90301. 检查 9030 端口监听
2. 确认密码正确
1. 检查 query_port=9030 配置
2. 本机免密登录后重置密码
BE 磁盘占满1. 查看磁盘使用:df -h
2. 检查日志大小:du -sh /data/doris/be/log
1. 清理旧日志
2. 扩容磁盘或清理无用数据
新 BE 节点 TabletNum 为 0数据均衡尚未完成等待自动均衡(通常数小时),或通过 ADMIN SET FRONTEND CONFIG ("disable_balance" = "false") 确认均衡已开启

十、测试环境注意事项​

  1. 数据安全:虽然是测试环境(SIT/UAT),但采用 3 副本存储保证数据可靠性,磁盘采用单副本即可的业务可调整为 replication_num=1 节省空间;
  2. FE 高可用:3 个 FOLLOWER 保证 FE 多数派选举,最多允许 1 个 FE 节点故障;
  3. 快速重置:测试完成后可清空 /data/doris/fe/meta(FE 节点)和 /data/doris/be/storage(BE 节点)目录快速重置集群;
  4. 版本升级验证:建议先在测试环境完成 4.1.2 升级验证,再推广到生产环境;
  5. 性能压测:BE 节点 2000G 单盘 SSD 足以支撑中等规模数据压测,若数据量超 1TB(压缩前)建议扩容;
  6. 网络规划:FE 与 BE 在不同子网(当前同处 10.10.0.0/24),生产环境建议分离子网以降低故障域;
  7. 磁盘分区注意:根分区(/)仅 50G,Doris 二进制包安装在 /opt/doris(根分区)。所有数据目录(meta、log、storage)已配置到 /data 分区(FE 199G / BE 2.0T),GC 日志也指向 /data,避免根分区被写满。建议定期执行 df -h / 监控根分区使用量。

官方文档参考: