【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; -- 能查询到数据说明部署成功
相关推荐
uzong19 小时前
Mermaid: AI 时代画图的魔法工具
后端·架构
TH_120 小时前
腾讯云-(8)-宝塔面板-安装Docker
docker·云计算·腾讯云
RUNNING123!20 小时前
RedHat 7.9 docker 安装 zabbix
docker·容器·zabbix
爱吃牛肉的大老虎20 小时前
网络传输架构之gRPC讲解
网络·架构
香吧香21 小时前
docker网络总结
docker
故渊ZY21 小时前
Java 代理模式:从原理到实战的全方位解析
java·开发语言·架构
weixin_4492900121 小时前
docker_ollama
docker·容器·eureka
起个名字逛街玩21 小时前
前端正在走向“工程系统化”:从页面开发到复杂产品架构的深度进化
前端·架构
欢喜躲在眉梢里21 小时前
CANN 异构计算架构实操指南:从环境部署到 AI 任务加速全流程
运维·服务器·人工智能·ai·架构·计算
weixin_5377658021 小时前
【容器技术】虚拟化原理与Docker详解
运维·docker·容器