3. Doris环境部署

部署Doris,说白了就是把一个分布式系统从零搭起来。很多新手一上来就急着敲命令,结果集群跑不起来,回头一看,硬件选型就错了。我见过不少团队,机器买回来才发现磁盘IO跟不上,或者内存配少了,最后只能加节点硬扛。

这一章,咱们把部署的每个环节拆开揉碎了讲。从硬件选型到集群规划,从源码编译到二进制部署,最后启动验证。你跟着走一遍,基本不会踩坑。

核心要点: Doris的部署没有想象中那么复杂,但硬件规划和配置调优是决定集群命运的关键。别跳过任何一步。

3.1 硬件与软件要求

先说说硬件。Doris对硬件的要求,其实取决于你的数据量和查询并发。我个人的习惯是,先估算数据规模,再反推硬件配置。

组件 推荐配置 最低配置 说明
CPU 16核及以上 8核 建议使用Intel Xeon或AMD EPYC系列
内存 64GB及以上 32GB BE节点内存越大,查询性能越好
磁盘 SSD 1TB+ HDD 500GB 强烈建议SSD,尤其是BE节点
网络 万兆网卡 千兆网卡 集群内网通信,万兆是标配

我曾经遇到过一台BE节点因为磁盘IO瓶颈,导致整个集群的导入延迟飙升。后来换了NVMe SSD,问题立刻解决。磁盘这块,别省。

软件方面,Doris依赖Java运行环境。JDK 8是官方推荐版本,但我建议直接用JDK 11,性能更好,GC也更稳定。操作系统的话,CentOS 7.9或Ubuntu 20.04都行,内核版本别太老。

3.2 集群规划

集群规划,说白了就是决定几台机器、怎么分工。Doris的架构很简单:FE(Frontend)负责元数据和查询解析,BE(Backend)负责数据存储和计算。

我建议的最小集群是3台机器。为什么是3台?因为FE需要奇数个节点才能做选举。你想想看,如果只有2台FE,挂了一台,剩下那台就不知道自己是leader还是follower了。

个人经验: 生产环境至少部署3个FE节点,5个BE节点起步。FE节点可以混部,但BE节点最好独占机器,避免资源争抢。

下面这张图,是我常用的集群规划方案。你可以参考一下:

Doris 集群规划拓扑图 应用 / 客户端 FE Leader FE Follower FE Observer BE 1 BE 2 BE 3 BE 4 FE 奇数节点保证选举,BE 节点数建议为 FE 的 2-3 倍

FE节点有三种角色:Leader、Follower、Observer。Leader负责写元数据,Follower做热备,Observer只提供读服务。我一般把Observer部署在离业务近的机器上,用来分担查询压力。

3.3 源码编译与二进制部署

部署方式有两种:源码编译和二进制包。我个人更推荐二进制包,省时省力。但如果你需要定制功能,或者想体验最新特性,那就得走源码编译这条路。

3.4.1 源码编译

源码编译,说白了就是自己动手丰衣足食。Doris的源码是用Java和C++混写的,编译前需要装好这些工具:

  • JDK 8 或 11
  • Maven 3.6+
  • GCC 7.3+
  • CMake 3.13+
  • Python 2.7 或 3.6+

编译命令很简单,但第一次跑可能会报错。我记得有一次编译到一半,提示缺少某个依赖库,折腾了半天才发现是GCC版本太低。

# 下载源码
git clone https://github.com/apache/doris.git
cd doris

# 编译
sh build.sh

# 编译完成后,产出在 output/ 目录下
ls output/
fe  be  broker

注意: 编译时尽量用干净的机器,避免环境变量冲突。我曾经在装了多个JDK版本的机器上编译,结果Maven死活找不到正确的JDK路径。

3.4.2 二进制部署

二进制部署就简单多了。从官网下载对应版本的tar包,解压就能用。我习惯把FE和BE分开部署,方便管理。

# 下载二进制包
wget https://apache-doris-releases.oss-cn-beijing.aliyuncs.com/doris-2.0.0-bin-x86_64.tar.gz

# 解压
tar -zxvf doris-2.0.0-bin-x86_64.tar.gz
cd doris-2.0.0

# 配置FE
cd fe
vi conf/fe.conf
# 修改 priority_networks 为实际网段
priority_networks = 192.168.1.0/24

# 配置BE
cd ../be
vi conf/be.conf
# 修改 priority_networks 和 storage_root_path
priority_networks = 192.168.1.0/24
storage_root_path = /data1/doris/data;/data2/doris/data

小技巧: priority_networks 这个参数一定要配对。如果不配,Doris会自动选择第一个网卡IP,万一选到docker网卡或者回环地址,集群就起不来了。我一般直接写成内网网段,比如 10.0.0.0/8。

3.5 集群启动与验证

配置好了,就该启动了。启动顺序有讲究:先启动FE,再启动BE。别搞反了,否则BE连不上FE会报错。

# 启动FE
cd fe
sh bin/start_fe.sh --daemon

# 检查FE是否启动成功
mysql -h 127.0.0.1 -P 9030 -u root
# 如果能连上MySQL客户端,说明FE启动成功

# 启动BE
cd be
sh bin/start_be.sh --daemon

# 在MySQL客户端中,将BE添加到集群
ALTER SYSTEM ADD BACKEND "192.168.1.10:9050";

# 查看BE状态
SHOW PROC '/backends';
-- Alive列为true,说明BE正常

启动后,我习惯做几个快速验证:

  • 建表测试: 创建一个简单的表,插入几条数据,看看能不能正常查询。
  • 导入测试: 用Stream Load导入一个小文件,验证导入链路是否通畅。
  • 查询测试: 跑几个聚合查询,看看结果对不对。

验证脚本示例:

-- 建表
CREATE TABLE test_table (
    id INT,
    name VARCHAR(50),
    age INT
) DISTRIBUTED BY HASH(id) BUCKETS 10;

-- 插入数据
INSERT INTO test_table VALUES (1, 'Alice', 25), (2, 'Bob', 30);

-- 查询
SELECT * FROM test_table;

如果以上步骤都顺利通过,恭喜你,Doris集群已经跑起来了。嗯,这里要注意一点:刚启动的集群,BE节点可能还在做数据均衡,别急着压测,等几分钟再说。

我个人习惯在启动后,用SHOW PROC '/frontends'检查FE的选举状态,确保Leader已经选出来。如果发现FE一直处于JOINING状态,多半是网络配置有问题,回头检查priority_networks。

好了,部署这块就讲到这里。你跟着走一遍,应该不会出大问题。如果遇到奇怪的报错,先看日志,日志在fe/log/和be/log/目录下,大部分问题都能从日志里找到线索。