【Docker下部署高可用】StarRocks 存算一体架构高可用部署要点
文章目录
- 一、部署前核心前提(存算一体专属校验)
- 1. 环境与网络准备
- FQDN(主机名)部署模式
- ip部署模式
- 2、部署规划(存算一体关键)
- 二、FE 高可用集群配置(存算一体与存算分离通用,但需适配 BE 副本)
- 1. FE 配置文件关键参数(所有 FE 节点统一)
- 2. FE 集群启动与验证(分步骤执行)
- 步骤1:启动Leader FE节点(首个FE默认成Leader)
- 步骤2:添加Follower FE节点与helper同步元数据
- 步骤3:检查FE集群状态
- 三、BE 节点高可用配置(存算一体核心)
- 1. BE 配置文件关键参数(所有 BE 节点统一)
- 2. BE 节点启动与添加到集群
- 步骤 1:启动单个 BE 节点
- 步骤 2:将 BE 节点添加到集群(支持批量添加)
- 步骤 3:检查 BE 集群状态
- 四、注意事项与排查
- 1、存算一体部署关键注意事项
- 2、存算一体故障排查核心方向
- 五、存算一体部署后必做操作(参考)
存算一体架构中,BE 节点同时承担数据存储与计算任务,高可用部署需围绕 FE 集群冗余(避免元数据与控制层单点故障) 和 BE 节点多副本(确保数据存储与计算高可用) 两大核心,以下是针对性部署要点梳理:
一、部署前核心前提(存算一体专属校验)
1. 环境与网络准备
- 必看文档:提前参考「部署前提条件」和「检查环境配置」,确保 FE/BE 节点满足系统要求(如 CentOS 7+/Ubuntu 18.04+、内核参数优化、关闭 Swap 等)。
- 网络互通:FE 节点关键端口(
http_port8030、rpc_port9020、query_port9030、edit_log_port9010)、BE 节点关键端口(be_port9060、be_http_port8040、heartbeat_service_port9050、brpc_port8060)需打通,无防火墙/安全组拦截。 - FQDN 配置(推荐生产):若用主机名访问,所有节点
/etc/hosts需配置 FE/BE 节点的主机名与 IP 映射(例:192.168.1.10 fe-leader),避免依赖外部 DNS 解析失败。
FQDN(主机名)部署模式
FQDN 即完全限定域名,简单说就是能唯一标识节点的“主机名”(比如 fe-leader 或 be-node-1),在 StarRocks 部署中,核心作用是用固定主机名替代易变的 IP 地址,让节点间稳定通信,避免 IP 变更后重新调整集群配置。
配置 FQDN 最常用的方式,是在集群所有节点的 /etc/hosts 文件里,添加“节点 IP + 主机名”的映射(比如 192.168.1.10 fe-leader),且所有节点的映射内容必须完全一致。配置后可通过 ping 主机名 验证,能通就说明生效。
在 StarRocks 部署时,用 FQDN 也很简单:FE 首次启动需加 --host_type FQDN 参数,BE 直接启动即可;后续添加节点(比如加 Follower FE 或 BE),SQL 里用主机名替代 IP(比如 ALTER SYSTEM ADD BACKEND "be-node-1:9050"),无需配置 priority_networks,操作更简洁且适配生产环境 IP 变动场景。
ip部署模式
- FE/BE 都要在各自配置文件(fe.conf/be.conf)里加
priority_networks,绑定宿主机实际 IP,避免 Docker 选错 IP。 - 启动 不用加 FQDN 参数;加节点(Follower FE/BE)时,SQL 里写宿主机实际 IP。
- 宿主机 IP 不能随便改,改了要重配
priority_networks,还要在 FE 用 SQL 更旧 IP,否则节点连不上。
2、部署规划(存算一体关键)
- FE 元数据路径:独立于部署文件路径(例:部署文件在
/starrocks/fe,元数据路径设为/starrocks/fe_meta),确保磁盘有 100GB+ 空间(元数据增长需预留),且权限为755(chmod 755 <meta_dir>)。 - BE 数据路径:必须独立于部署文件路径(例:部署文件在
/starrocks/be,数据路径设为/starrocks/be_data),推荐用 SSD 或高 IO 机械盘(存算一体依赖 BE 存储性能),单节点数据盘空间建议 1TB+,权限同样为755。
二、FE 高可用集群配置(存算一体与存算分离通用,但需适配 BE 副本)
FE 是集群“控制中心”,存算一体架构下需部署 至少 3 个 Follower FE 节点(1 Leader + 2 Follower),确保元数据不丢失、SQL 解析/规划不中断,核心要点如下:
1. FE 配置文件关键参数(所有 FE 节点统一)
修改 fe/conf/fe.conf,重点配置以下参数(其他默认参数可参考「FE 配置项」文档):
- 元数据路径:
meta_dir = <fe_meta_dir>,必须与部署路径分离。 - 端口配置:
http_port = 8030:所有 FE 节点此端口 必须相同(客户端/BE 访问 FE 的 HTTP 端口),若冲突需改为其他可用端口(如 8031)。rpc_port = 9020、query_port = 9030、edit_log_port = 9010:可自定义,但需确保节点间无冲突(例:不同 FE 节点rpc_port可不同,但同一节点内端口唯一)。
- IP/FQDN 绑定:
- 用 IP 访问:添加
priority_networks = x.x.x.x/x(CIDR 格式,例:192.168.1.10/24),通过ifconfig或ip addr查看节点实际 IP,确保每个 FE 有唯一 IP 标识。 - 用 FQDN 访问:无需配置
priority_networks,但需确保/etc/hosts已配置主机名映射。
- 用 IP 访问:添加
- JDK 指定:若节点安装多 JDK(例:系统自带 JDK 8 + 手动装 JDK 11),需添加
JAVA_HOME = <path_to_jdk>(例:/usr/local/jdk11),避免与环境变量JAVA_HOME冲突。 - BE 副本数适配:若测试场景仅部署 1 个 BE 节点,需添加
default_replication_num = 1(默认值为 3,1 个 BE 无法满足 3 副本存储,会导致数据写入失败);生产环境 3+ BE 节点无需修改。
2. FE 集群启动与验证(分步骤执行)
步骤1:启动Leader FE节点(首个FE默认成Leader)
- 先创建元数据路径:
mkdir -p <fe_meta_dir>(例:mkdir -p /starrocks/fe_meta)。 - 启动命令:直接执行
./fe/bin/start_fe.sh --daemon(--daemon表后台运行,无需加FQDN相关参数)。 - 验证启动:执行
cat fe/log/fe.log | grep thrift,出现类似“thrift server started with port 9020”的日志,说明启动成功。
步骤2:添加Follower FE节点与helper同步元数据
需部署2个Follower FE,流程如下:
- 在Leader FE上添加Follower:
- 用MySQL客户端连Leader FE:
mysql -h <leader_fe_ip> -P9030 -uroot(初始密码为空,9030是默认query_port)。 - 执行SQL加Follower:
ALTER SYSTEM ADD FOLLOWER "<follower_fe_ip>:9010"(9010是默认edit_log_port,单次只能加1个,需重复加第2个)。
- 用MySQL客户端连Leader FE:
- 配置并启动新的Follower FE:
- 重复创建元数据路径、修改
fe.conf(和Leader FE一致,重点配meta_dir、http_port、priority_networks绑定自身IP)。 - 首次启动指定helper节点:
./fe/bin/start_fe.sh --helper <leader_fe_ip>:9010 --daemon。 - 验证启动:同样执行
cat fe/log/fe.log | grep thrift,出现thrift启动日志即成功。
- 重复创建元数据路径、修改
注意:
helper节点本质是StarRocks新FE节点(尤其是Follower/Observer)的“元数据同步源”,新节点启动时通过它获取集群现有元数据(比如集群拓扑、表结构等),才能正常加入集群。
核心作用就一个:帮新FE节点“快速接入集群”。因为新FE刚启动时没有任何元数据,无法直接和集群通信,必须通过helper节点同步完整元数据,才能成为集群的有效节点。
实际用的时候要注意两点:
- 一是helper节点必须是集群中已正常运行的FE(通常选Leader
FE,也可选已存活的Follower);- 二是新FE首次启动时,必须通过
--helper <helper节点IP:edit_log_port>参数指定它,后续重启新FE就不用再指定了。
步骤3:检查FE集群状态
在MySQL客户端执行 SHOW PROC '/frontends'\G,需满足:
- 3个FE节点的
Alive字段均为true。 - 1个节点
Role是LEADER,另外2个是FOLLOWER。 - 所有节点
IsHelper字段为true。
三、BE 节点高可用配置(存算一体核心)
存算一体中 BE 是“数据存储与计算节点”,需通过 3+ 节点冗余 和 数据多副本(默认 3 副本) 实现高可用,某 BE 节点故障时,其他节点可接管数据存储与计算任务,核心要点如下:
1. BE 配置文件关键参数(所有 BE 节点统一)
修改 be/conf/be.conf,重点配置以下参数:
- 数据路径:
storage_root_path = <be_data_dir>(替换为提前创建的数据路径,例:/starrocks/be_data),必须独立于部署路径,且确保磁盘空间充足(生产建议单节点 1TB+)。 - 端口配置:
be_port = 9060(FE 与 BE 通信的 RPC 端口)、be_http_port = 8040(BE 的 HTTP 端口)、heartbeat_service_port = 9050(BE 与 FE 心跳端口)、brpc_port = 8060(BE 间通信端口)。- 若端口冲突,需修改为其他可用端口(例:
be_port = 9061),但需记录修改后的端口,后续添加 BE 时需用到。
- IP/FQDN 绑定:与 FE 一致,IP 访问需添加
priority_networks = x.x.x.x/x(例:192.168.1.20/24),FQDN 访问无需配置(但需/etc/hosts映射)。 - JDK 指定:若多 JDK 环境,添加
JAVA_HOME = <path_to_jdk>(与 FE 用同一 JDK 版本最佳,避免兼容性问题)。
2. BE 节点启动与添加到集群
步骤 1:启动单个 BE 节点
- 先创建数据路径:
mkdir -p <be_data_dir>(例:mkdir -p /starrocks/be_data)。 - 启动命令:
./be/bin/start_be.sh --daemon(BE 启动无需指定--host_type,FQDN 场景只需/etc/hosts配置正确)。 - 验证启动成功:执行
cat be/log/be.INFO | grep heartbeat,若出现类似“I0520 11:00:00.456 ... heartbeat has started listening port on 9050”,说明 BE 启动成功。
步骤 2:将 BE 节点添加到集群(支持批量添加)
在 MySQL 客户端(已连接 Leader FE)执行 SQL:ALTER SYSTEM ADD BACKEND "<be1_ip/fqdn>:<heartbeat_service_port>", "<be2_ip/fqdn>:<heartbeat_service_port>", "<be3_ip/fqdn>:<heartbeat_service_port>"。
- 例:
ALTER SYSTEM ADD BACKEND "192.168.1.20:9050", "192.168.1.21:9050", "192.168.1.22:9050"(heartbeat_service_port默认 9050,若修改需替换)。 - 优势:可通过一条 SQL 添加多个 BE 节点,无需逐个执行。
步骤 3:检查 BE 集群状态
在 MySQL 客户端执行:SHOW PROC '/backends'\G,需满足以下条件:
- 所有 BE 节点的
Alive字段为true(节点存活,能与 FE 正常心跳)。 SystemDecommissioned和ClusterDecommissioned字段均为false(节点未被下线,可正常存储数据)。TabletNum字段后续会随数据写入增加(初始为 0 正常),DataUsedCapacity会逐步增长。
四、注意事项与排查
1、存算一体部署关键注意事项
-
BE 节点数量与副本数匹配
- 生产环境必须部署 3+ BE 节点,确保数据默认 3 副本存储(某节点故障,另外 2 个节点仍有完整数据)。
- 测试场景若仅 1 个 BE 节点,需在 FE 配置文件中设置
default_replication_num = 1,否则数据无法写入(FE 会因“找不到足够 BE 存储副本”拒绝写入)。
-
端口冲突与路径权限问题
- 端口冲突排查:若 FE/BE 启动失败,先执行
netstat -tulpn | grep <端口号>(例:netstat -tulpn | grep 9010),确认端口是否被占用,占用则修改配置文件。 - 路径权限排查:若日志报“Permission denied”,执行
chmod 755 -R <meta_dir>/<data_dir>(例:chmod 755 -R /starrocks/fe_meta),确保 StarRocks 进程有读写权限。
- 端口冲突排查:若 FE/BE 启动失败,先执行
-
节点重启与集群停止顺序
- 启动顺序:先启动所有 FE 节点 → 再启动所有 BE 节点(FE 未启动时,BE 无法注册到集群)。
- 停止顺序:先停止所有 BE 节点 → 再停止所有 FE 节点(避免 FE 未同步 BE 元数据导致异常)。
- 停止命令:
- FE:
./fe/bin/stop_fe.sh - BE:
./be/bin/stop_be.sh
- FE:
-
故障修复后的数据一致性
- FE 故障:若 Leader FE 挂掉,Follower 会自动选举新 Leader(需 3 个 FE 节点中至少 2 个存活),修复后重启原 Leader,会自动以 Follower 身份加入集群。
- BE 故障:若某 BE 节点挂掉,FE 会标记其为
Alive = false,待节点修复重启后,会自动重新注册到集群,并同步缺失的数据(基于副本机制,数据不会丢失)。
2、存算一体故障排查核心方向
-
FE 启动失败
- 查看警告日志:
cat fe/log/fe.warn.log,常见问题:- 元数据路径已存在旧数据:删除原
meta_dir(rm -rf <fe_meta_dir>),重新创建路径后启动。 helper节点配置错误:Follower 启动时--helper参数的 IP/端口错误,需确认 Leader FE 的priority_networks和edit_log_port。
- 元数据路径已存在旧数据:删除原
- 查看警告日志:
-
BE 启动失败
- 查看警告日志:
cat be/log/be.WARNING,常见问题:- 数据路径已存在旧数据:删除原
storage_root_path(rm -rf <be_data_dir>),重新创建路径后启动。 - 磁盘满:执行
df -h查看数据盘空间,清理无用文件后重启。
- 数据路径已存在旧数据:删除原
- 查看警告日志:
-
BE 节点
Alive = false- 检查网络:在 FE 节点执行
telnet <be_ip> <heartbeat_service_port>(例:telnet 192.168.1.20 9050),若无法连接,需排查防火墙/安全组。 - 检查 BE 进程:在 BE 节点执行
ps -ef | grep starrocks_be,若进程不存在,重启 BE 节点(./be/bin/start_be.sh --daemon)。
- 检查网络:在 FE 节点执行
五、存算一体部署后必做操作(参考)
- 修改初始密码:默认 root 密码为空,执行
SET PASSWORD FOR 'root'@'%' = PASSWORD('new_password');(例:SET PASSWORD FOR 'root'@'%' = PASSWORD('StarRocks123!');),避免安全风险。 - 创建业务用户:避免直接使用 root 操作,执行
CREATE USER 'biz_user'@'%' IDENTIFIED BY 'biz_password';,并授予权限(例:GRANT SELECT, INSERT ON *.* TO 'biz_user'@'%';)。 - 验证数据写入:创建测试表并插入数据,确认 BE 节点正常存储(例:
CREATE DATABASE test_db; USE test_db; CREATE TABLE test_table (id INT, name STRING) ENGINE=OLAP DUPLICATE KEY(id) DISTRIBUTED BY HASH(id) BUCKETS 10 PROPERTIES ("replication_num" = "3"); -- 副本数与 BE 节点数匹配 INSERT INTO test_table VALUES (1, "test"); SELECT * FROM test_table; -- 能查询到数据说明部署成功
