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节点最好独占机器,避免资源争抢。
下面这张图,是我常用的集群规划方案。你可以参考一下:
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/目录下,大部分问题都能从日志里找到线索。