Doris 的组件少到只有 FE 和 BE 两种角色、两个进程,不依赖外部组件,部署和运维都简单,但能撑住 PB 级分析查询。这篇按三台机器的规划把 1.0.0 集群拉起来,顺带记下容易出问题的地方。
一、它是什么,由哪些角色组成
Apache Doris 出自百度大数据部门,早期叫 Palo,2018 年捐给 Apache 社区后改名。它是一个 MPP(大规模并行处理)分析型数据库,亚秒级响应,支持 10PB 以上的数据集,适合固定报表、实时分析、交互式分析和探索式分析。百度内部超过 200 个产品线在用,部署机器 1000 台以上,单一业务最大上百 TB。


- FE(Frontend):存集群元数据,接收解析查询、生成计划、调度执行、返回结果。Leader 和 Follower 保证元数据高可用,单点宕机可在线恢复;Observer 不参与写入,只扩查询节点、备份元数据。
- BE(Backend):存算一体,按 FE 的物理计划分布式执行。数据可靠性由 BE 保证,默认三副本,副本数可动态调。
- MySQL 协议:用任意 MySQL 客户端或 ODBC/JDBC 就能连。
- Broker:无状态独立进程,封装文件系统接口,让 Doris 能读 HDFS、S3、BOS 上的文件。
二、规格和节点规划

这次三台机器,FE 和 BE 混部:
- 192.168.66.151:FE(LEADER) + BE + Broker,1.0.0 二进制包
- 192.168.66.152:FE(FOLLOWER) + BE + Broker
- 192.168.66.153:FE(OBSERVER) + BE + Broker
官方的经验值:10~100 台最能发挥性能,其中 3 台部署 FE;最少 4 台(1 FE + 3 BE,一台 BE 上混部 Observer FE)也能平稳跑。一台机器可以跑多个 BE,但只能跑一个 FE;要 3 副本就得 3 台机器各跑一个 BE,而不是 1 台跑 3 个。FE 之间时钟偏差不超过 5 秒,所有节点关闭 Swap。FE 磁盘放元数据(几百 MB 到几个 GB),BE 磁盘按「数据量 × 3 副本 + 40% 余量」算。Follower 数量必须是奇数:1 个只保证读高可用,3 个才有读写高可用;Observer 数量随意,在线业务建议 3 Follower + 1~3 Observer,离线业务 1 + 1~3。
三、部署 FE
所有节点先装 JDK,节点 1 解压安装包后拷给其它节点:
rpm -ivh jdk-8u281-linux-x64.rpm
#在节点1上进行解压安装,然后拷贝给另外的节点即可
[root@doris-fe_be01 soft]# tar -zxvf apache-doris-1.0.0-incubating-bin.tar.gz -C /usr/local/
[root@doris-fe_be01 soft]# cd /usr/local/
[root@doris-fe_be01 local]# mv apache-doris-1.0.0-incubating-bin apache-doris
CentOS 自带的 MariaDB 要先卸掉再装 MySQL 客户端:
#卸载掉默认的MariaDB
rpm -e --nodeps mariadb mariadb-libs mariadb-server
#安装MySQL YUM源
rpm -ivh https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm
#导入公钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
#安装MySQL客户端
yum install mysql-community-client
建元数据目录,改 fe.conf:
#创建元数据和日志存储目录,FE节点都需要创建
mkdir -p /data/fe/{doris-meta,log}
#修改配置
[root@doris-fe_be01 ~]# vim /usr/local/apache-doris/fe/conf/fe.conf

配置里三件事:JAVA_OPTS 默认最大堆 4GB,生产建议 8G 以上;meta_dir 单独指定目录、最好单独一块 SSD,别留在安装目录下;机器有多个 IP(内外网、虚拟机、docker)时必须显式绑定。
写 systemd 单元托管 FE 进程:
cat > /usr/lib/systemd/system/doris-fe.service <<EOF
[Unit]
Description=Doris FE Service
Documentation=https://doris.apache.org
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_281-amd64"
User=root
Group=root
ExecStart=/usr/local/apache-doris/fe/bin/start_fe.sh --daemon
ExecStop=/usr/local/apache-doris/fe/bin/stop_fe.sh
ExecReload=/bin/kill --signal HUP
KillMode=control-group
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=default.target
EOF
systemctl daemon-reload && systemctl restart doris-fe.service && systemctl enable doris-fe.service &&systemctl status doris-fe.service
FE 高可用用类 Raft 的 bdbje 协议做选主、日志复制和故障切换:Follower 是可投票成员,多数派确认,能容忍少数派故障;Observer 异步订阅日志、不投票,状态落后于 Follower。所有变更都由选出的 master 执行,非 master 节点同步到最近一次变更的 LSN 后可以直读,满足顺序一致性。所有 FE 的 http_port 要一致。
root 默认无密码,先改密码,再把另外两个 FE 加进来:
#连接到FE
[root@doris-fe_be01 ~]# mysql -h 192.168.66.151 -P 9030 -uroot
#默认root无密码,通过以下命令修改 root密码 。
mysql> SET PASSWORD FOR 'root' = PASSWORD('admin123456');
mysql> ALTER SYSTEM ADD FOLLOWER "192.168.66.152:9010";
mysql> ALTER SYSTEM ADD OBSERVER "192.168.66.153:9010";
安装目录拷到其它 FE 节点,改配置绑各自 IP,建同样的启动文件并拉起:
cat > /usr/lib/systemd/system/doris-fe.service <<EOF
[Unit]
Description=Doris FE Service
Documentation=https://doris.apache.org
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_281-amd64"
User=root
Group=root
ExecStart=/usr/local/apache-doris/fe/bin/start_fe.sh --helper 192.168.66.151:9010 --daemon
ExecStop=/usr/local/apache-doris/fe/bin/stop_fe.sh
ExecReload=/bin/kill --signal HUP
KillMode=control-group
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=default.target
EOF
systemctl daemon-reload && systemctl restart doris-fe.service && systemctl enable doris-fe.service &&systemctl status doris-fe.service
检查集群成员:
[root@doris-fe_be01 ~]# mysql -h 192.168.66.151 -P 9030 -uroot -p
mysql> SHOW PROC '/frontends'G

四、部署 BE
BE 的 storage_root_path 默认在 be/storage 下要手动建目录,多路径用英文分号 ; 分隔(最后一个不加);priority_networks 每台改成自己的 IP;PPROF_TMPDIR 指到独立目录。
#创建数据和日志存储目录,BE节点都需要创建
mkdir -p /data/be/{doris-storage1,doris-storage2,log}
[root@doris-fe_be01 ~]# vim /usr/local/apache-doris/be/conf/be.conf

配置和目录拷到其它 BE 节点、各自改好 IP 后,在 FE 上把三个 BE 加进集群:
[root@doris-fe_be01 ~]# mysql -h 192.168.66.151 -P 9030 -uroot -p
ALTER SYSTEM ADD BACKEND "192.168.66.151:9050";
ALTER SYSTEM ADD BACKEND "192.168.66.152:9050";
ALTER SYSTEM ADD BACKEND "192.168.66.153:9050";
[[CODE:0089:10]]
确认 BE 状态,Alive 为 true 表示节点存活:
[[CODE:0089:11]]

五、Web UI 和踩过的坑
浏览器访问 http://FE_IP:FE_HTTP_PORT(默认 8030,Http 协议),账号 root,密码是前面改过的数据库 root 密码。

- 测试环境一个 BE 就能跑,生产上查询延迟基本由 BE 数量决定,别按测试规格上线。
ALTER SYSTEM ADD BACKEND执行成功不等于 BE 起来了,要回SHOW PROC '/backends'看 Alive。- 混部机器上 FE 和 BE 抢内存,BE 的
mem_limit要留够余量。
















暂无评论内容