【Docker下部署高可用】StarRocks 存算一体架构高可用部署要点

文章目录

存算一体架构中,BE 节点同时承担数据存储与计算任务,高可用部署需围绕 FE 集群冗余(避免元数据与控制层单点故障)BE 节点多副本(确保数据存储与计算高可用) 两大核心,以下是针对性部署要点梳理:

一、部署前核心前提(存算一体专属校验)

1. 环境与网络准备

  • 必看文档:提前参考「部署前提条件」和「检查环境配置」,确保 FE/BE 节点满足系统要求(如 CentOS 7+/Ubuntu 18.04+、内核参数优化、关闭 Swap 等)。
  • 网络互通:FE 节点关键端口(http_port 8030、rpc_port 9020、query_port 9030、edit_log_port 9010)、BE 节点关键端口(be_port 9060、be_http_port 8040、heartbeat_service_port 9050、brpc_port 8060)需打通,无防火墙/安全组拦截。
  • FQDN 配置(推荐生产):若用主机名访问,所有节点 /etc/hosts 需配置 FE/BE 节点的主机名与 IP 映射 (例:192.168.1.10 fe-leader),避免依赖外部 DNS 解析失败。

FQDN(主机名)部署模式

FQDN 即完全限定域名,简单说就是能唯一标识节点的"主机名"(比如 fe-leaderbe-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部署模式

  1. FE/BE 都要在各自配置文件(fe.conf/be.conf)里加 priority_networks,绑定宿主机实际 IP,避免 Docker 选错 IP。
  2. 启动 不用加 FQDN 参数;加节点(Follower FE/BE)时,SQL 里写宿主机实际 IP。
  3. 宿主机 IP 不能随便改,改了要重配 priority_networks,还要在 FE 用 SQL 更旧 IP,否则节点连不上。

2、部署规划(存算一体关键)

  • FE 元数据路径:独立于部署文件路径(例:部署文件在 /starrocks/fe,元数据路径设为 /starrocks/fe_meta),确保磁盘有 100GB+ 空间(元数据增长需预留),且权限为 755chmod 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 配置项」文档):

  1. 元数据路径meta_dir = <fe_meta_dir>,必须与部署路径分离。
  2. 端口配置
    • http_port = 8030:所有 FE 节点此端口 必须相同(客户端/BE 访问 FE 的 HTTP 端口),若冲突需改为其他可用端口(如 8031)。
    • rpc_port = 9020query_port = 9030edit_log_port = 9010:可自定义,但需确保节点间无冲突(例:不同 FE 节点 rpc_port 可不同,但同一节点内端口唯一)。
  3. IP/FQDN 绑定
    • 用 IP 访问:添加 priority_networks = x.x.x.x/x(CIDR 格式,例:192.168.1.10/24),通过 ifconfigip addr 查看节点实际 IP,确保每个 FE 有唯一 IP 标识。
    • 用 FQDN 访问:无需配置 priority_networks,但需确保 /etc/hosts 已配置主机名映射。
  4. JDK 指定 :若节点安装多 JDK(例:系统自带 JDK 8 + 手动装 JDK 11),需添加 JAVA_HOME = <path_to_jdk>(例:/usr/local/jdk11),避免与环境变量 JAVA_HOME 冲突。
  5. BE 副本数适配 :若测试场景仅部署 1 个 BE 节点,需添加 default_replication_num = 1(默认值为 3,1 个 BE 无法满足 3 副本存储,会导致数据写入失败);生产环境 3+ BE 节点无需修改。

2. FE 集群启动与验证(分步骤执行)

步骤1:启动Leader FE节点(首个FE默认成Leader)

  1. 先创建元数据路径:mkdir -p <fe_meta_dir>(例:mkdir -p /starrocks/fe_meta)。
  2. 启动命令:直接执行 ./fe/bin/start_fe.sh --daemon--daemon 表后台运行,无需加FQDN相关参数)。
  3. 验证启动:执行 cat fe/log/fe.log | grep thrift,出现类似"thrift server started with port 9020"的日志,说明启动成功。

步骤2:添加Follower FE节点与helper同步元数据

需部署2个Follower FE,流程如下:

  1. 在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个)。
  2. 配置并启动新的Follower FE
    • 重复创建元数据路径、修改fe.conf(和Leader FE一致,重点配meta_dirhttp_portpriority_networks绑定自身IP)。
    • 首次启动指定helper节点:./fe/bin/start_fe.sh --helper <leader_fe_ip>:9010 --daemon
    • 验证启动:同样执行 cat fe/log/fe.log | grep thrift,出现thrift启动日志即成功。

注意:

  1. helper节点本质是StarRocks新FE节点(尤其是Follower/Observer)的"元数据同步源",新节点启动时通过它获取集群现有元数据(比如集群拓扑、表结构等),才能正常加入集群。

  2. 核心作用就一个:帮新FE节点"快速接入集群"。因为新FE刚启动时没有任何元数据,无法直接和集群通信,必须通过helper节点同步完整元数据,才能成为集群的有效节点。

  3. 实际用的时候要注意两点:

    • 一是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个节点RoleLEADER,另外2个是FOLLOWER
  • 所有节点IsHelper字段为true

三、BE 节点高可用配置(存算一体核心)

存算一体中 BE 是"数据存储与计算节点",需通过 3+ 节点冗余数据多副本(默认 3 副本) 实现高可用,某 BE 节点故障时,其他节点可接管数据存储与计算任务,核心要点如下:

1. BE 配置文件关键参数(所有 BE 节点统一)

修改 be/conf/be.conf,重点配置以下参数:

  1. 数据路径storage_root_path = <be_data_dir>(替换为提前创建的数据路径,例:/starrocks/be_data),必须独立于部署路径,且确保磁盘空间充足(生产建议单节点 1TB+)。
  2. 端口配置
    • 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 时需用到。
  3. IP/FQDN 绑定 :与 FE 一致,IP 访问需添加 priority_networks = x.x.x.x/x(例:192.168.1.20/24),FQDN 访问无需配置(但需 /etc/hosts 映射)。
  4. 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 正常心跳)。
  • SystemDecommissionedClusterDecommissioned 字段均为 false(节点未被下线,可正常存储数据)。
  • TabletNum 字段后续会随数据写入增加(初始为 0 正常),DataUsedCapacity 会逐步增长。

四、注意事项与排查

1、存算一体部署关键注意事项

  1. BE 节点数量与副本数匹配

    • 生产环境必须部署 3+ BE 节点,确保数据默认 3 副本存储(某节点故障,另外 2 个节点仍有完整数据)。
    • 测试场景若仅 1 个 BE 节点,需在 FE 配置文件中设置 default_replication_num = 1,否则数据无法写入(FE 会因"找不到足够 BE 存储副本"拒绝写入)。
  2. 端口冲突与路径权限问题

    • 端口冲突排查:若 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 进程有读写权限。
  3. 节点重启与集群停止顺序

    • 启动顺序:先启动所有 FE 节点 → 再启动所有 BE 节点(FE 未启动时,BE 无法注册到集群)。
    • 停止顺序:先停止所有 BE 节点 → 再停止所有 FE 节点(避免 FE 未同步 BE 元数据导致异常)。
    • 停止命令:
      • FE:./fe/bin/stop_fe.sh
      • BE:./be/bin/stop_be.sh
  4. 故障修复后的数据一致性

    • FE 故障:若 Leader FE 挂掉,Follower 会自动选举新 Leader(需 3 个 FE 节点中至少 2 个存活),修复后重启原 Leader,会自动以 Follower 身份加入集群。
    • BE 故障:若某 BE 节点挂掉,FE 会标记其为 Alive = false,待节点修复重启后,会自动重新注册到集群,并同步缺失的数据(基于副本机制,数据不会丢失)。

2、存算一体故障排查核心方向

  1. FE 启动失败

    • 查看警告日志:cat fe/log/fe.warn.log,常见问题:
      • 元数据路径已存在旧数据:删除原 meta_dirrm -rf <fe_meta_dir>),重新创建路径后启动。
      • helper 节点配置错误:Follower 启动时 --helper 参数的 IP/端口错误,需确认 Leader FE 的 priority_networksedit_log_port
  2. BE 启动失败

    • 查看警告日志:cat be/log/be.WARNING,常见问题:
      • 数据路径已存在旧数据:删除原 storage_root_pathrm -rf <be_data_dir>),重新创建路径后启动。
      • 磁盘满:执行 df -h 查看数据盘空间,清理无用文件后重启。
  3. 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)。

五、存算一体部署后必做操作(参考)

  1. 修改初始密码 :默认 root 密码为空,执行 SET PASSWORD FOR 'root'@'%' = PASSWORD('new_password');(例:SET PASSWORD FOR 'root'@'%' = PASSWORD('StarRocks123!');),避免安全风险。

  2. 创建业务用户 :避免直接使用 root 操作,执行 CREATE USER 'biz_user'@'%' IDENTIFIED BY 'biz_password';,并授予权限(例:GRANT SELECT, INSERT ON *.* TO 'biz_user'@'%';)。

  3. 验证数据写入 :创建测试表并插入数据,确认 BE 节点正常存储(例:

    sql 复制代码
    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; -- 能查询到数据说明部署成功
相关推荐
zmjjdank1ng2 小时前
k8s问答题(二)
云原生·容器·kubernetes
uuukashiro3 小时前
多模态数据管理挑战重重?腾讯云数据湖计算DLC以Serverless架构破局
ai·架构·serverless·腾讯云
Lei活在当下11 小时前
【现代 Android APP 架构】09. 聊一聊依赖注入在 Android 开发中的应用
java·架构·android jetpack
一尘之中12 小时前
【架构人生】一种“低耦合、高内聚”的处世哲学
架构·ai写作
醉卧雕龙舫 、13 小时前
七.Docker网络
docker
小坏讲微服务13 小时前
五分钟使用 Docker-compose搭建 Redis 8.0 中间件
运维·redis·docker·中间件·容器·kubernetes·k8s
Aimyon_3614 小时前
MinerU Docker自定义版本部署
运维·docker·容器
梁正雄16 小时前
19、docker跨主机网络 Overlay\Underlay
网络·docker·容器
Ryan今天学习了吗18 小时前
💥不说废话,带你上手使用 qiankun 微前端并深入理解原理!
前端·javascript·架构