StarRocks 3.3 存算分离部署踩坑实录FE FQDN CN 注册 MinIO 内置存储卷从零部署 StarRocks 3.3.22 存算分离集群FE CN 单节点架构MinIO 作为对象存储后端。记录三个关键踩坑点及解决方案。一、环境信息组件版本 / 配置StarRocks3.3.22-753696f运行模式shared_data存算分离节点单机FE CN 同机部署对象存储MinIOS3 兼容网络模式FQDNHostnamesr-node-xxx打码内网 IP10.xxx.167.xx二、FE 部署aws_s3_path 空值 FATAL2.1 现象按照官方文档配置fe.conf只设置了run_mode shared_data、meta_dir和enable_fqdn_mode true没有配置任何 S3 相关参数文档说后续通过 SQL 配置。启动 FE 后反复崩溃fe.warn.log出现FATAL (stateChangeExecutor|81) [GlobalStateMgr.createBuiltinStorageVolume():2633] The configuration item Config.aws_s3_path is invalid.重启三次每次都是 FE 选为 LEADER 后立即崩溃。2.2 根因文档说的是用户存储卷CREATE STORAGE VOLUMESQL那是集群跑起来后配的。但 StarRocks 3.x 在启动初始化阶段就会调用createBuiltinStorageVolume()创建内置存储卷这个步骤走的是Config.aws_s3_path读到空字符串直接 FATAL——等不到你执行 SQL 那一步。2.3 解决方案在fe.conf中先填入占位 MinIO 配置让内置存储卷初始化通过run_mode shared_data meta_dir /data/starrocks/meta_dir enable_fqdn_mode true # --- 占位 MinIO 配置内置存储卷必须 --- aws_s3_path s3://defaultbucket/ aws_s3_region us-east-1 aws_s3_endpoint http://10.xxx.167.xx:9000 aws_s3_access_key xxxxxxxxxx aws_s3_secret_key xxxxxxxxxx aws_s3_use_aws_sdk_default_behavior false aws_s3_use_instance_profile false aws_s3_enable_path_style_access true注意aws_s3_enable_path_style_access true是 MinIO 必需项否则 AWS SDK 会走 Virtual-Hosted-Style 请求MinIO 不认。FE 起来后再用 SQL 建真正的存储卷覆盖即可。三、FQDN 模式配置3.1 背景存算分离模式推荐使用 FQDN 而非 IP避免节点 IP 变动导致集群不可用。3.2 关键配置/etc/hosts10.xxx.167.xx sr-node-xxx 127.0.0.1 localhostfe.confenable_fqdn_mode true启用 FQDN 后StarRocks 直接通过InetAddress.getLocalHost()从/etc/hosts解析 IP不再遍历网卡匹配。因此priority_networks在 FQDN 模式下不需要配置。3.3 验证# 确认 hostname 与 hosts 文件一致hostname-f# → sr-node-xxx# 确认 FE 端口监听ss-tlnp|grep-E9010|9020|9030|8030FE 启动后通过 MySQL 客户端连接验证-- 连接mysql-h127.0.0.1-P9030-u root-- 查看 FE 状态SHOWPROC/frontends\G输出确认IsLeader: trueAlive: true。四、CN 部署与注册4.1 CN 配置文件cn.conf与 BE 同目录通过--cn参数启动sys_log_level INFO be_port 9060 be_http_port 8040 heartbeat_service_port 9050 brpc_port 8060 starlet_port 9070 # 指向 FE edit_log_port helper sr-node-xxx:9010 storage_root_path /data/starrocks/storage_root_path关键点helper指向 FE 的edit_log_port默认 9010CN 通过这个端口向 FE 注册。我第一次启动时漏了这行CN 虽然进程在跑但始终没有加入集群。4.2 启动 CNcd/data/starrocks/starrocks3 ./be/bin/stop_cn.sh ./be/bin/start_cn.sh--daemon日志确认CN started successfully BRPC server bind to host: 0.0.0.0, port: 8060 heartbeat has started listening port on 9050CN 日志里有 JIT 禁用的 WARNING内存 16GB 自动关OLAP 场景影响很小忽略即可。4.3 注册到 FEALTERSYSTEMADDCOMPUTENODEsr-node-xxx:9050;验证SHOWCOMPUTENODES\GComputeNodeId: 10341 Host: sr-node-xxx HeartbeatPort: 9050 Alive: true五、创建存储卷并建表5.1 创建 MinIO 存储卷CREATESTORAGE VOLUME def_volumeTYPES3 LOCATIONS(s3://defaultbucket)PROPERTIES(enabledtrue,aws.s3.regionus-east-1,aws.s3.endpointhttp://10.xxx.167.xx:9000,aws.s3.access_keyxxxxxxxxxx,aws.s3.secret_keyxxxxxxxxxx,aws.s3.use_aws_sdk_default_behaviorfalse,aws.s3.enable_path_style_accesstrue);SETdef_volumeASDEFAULTSTORAGE VOLUME;5.2 建表存算分离专属语法CREATETABLEIFNOTEXISTSdetail_demo(recruit_dateDATENOTNULLCOMMENTYYYY-MM-DD,region_numTINYINTCOMMENTrange [-128, 127],num_plateSMALLINTCOMMENTrange [-32768, 32767],telINTCOMMENTrange [-2147483648, 2147483647],idBIGINTCOMMENTrange [-2^63 1 ~ 2^63 - 1],password LARGEINTCOMMENTrange [-2^127 1 ~ 2^127 - 1],nameCHAR(20)NOTNULLCOMMENTrange char(m),m in (1-255),profileVARCHAR(500)NOTNULLCOMMENTupper limit 65533 bytes,ispassBOOLEANCOMMENTtrue/false)DUPLICATEKEY(recruit_date,region_num)DISTRIBUTEDBYHASH(recruit_date,region_num)PROPERTIES(storage_volumedef_volume,datacache.enabletrue,datacache.partition_duration1 MONTH);存算分离模式下建表PROPERTIES必须指定storage_volume否则数据不知道往哪个对象存储写。5.3 批量写入 1 万条测试数据INSERTINTOdetail_demoSELECTdate_add(2026-01-01,intervalseqDAY)ASrecruit_date,CAST((seq%127)1ASTINYINT)ASregion_num,CAST(seq1000ASSMALLINT)ASnum_plate,CAST(13800000000seqASINT)AStel,CAST(10000000000seqASBIGINT)ASid,CAST(12345678901234567890seqASLARGEINT)ASpassword,CONCAT(user_,seq)ASname,CONCAT(profile_desc_for_user_,seq)ASprofile,(seq%20)ASispassFROM(SELECT(a*1000b*100c*10d)ASseqFROM(SELECT0aUNIONSELECT1UNIONSELECT2UNIONSELECT3UNIONSELECT4UNIONSELECT5UNIONSELECT6UNIONSELECT7UNIONSELECT8UNIONSELECT9)t1CROSSJOIN(SELECT0bUNIONSELECT1UNIONSELECT2UNIONSELECT3UNIONSELECT4UNIONSELECT5UNIONSELECT6UNIONSELECT7UNIONSELECT8UNIONSELECT9)t2CROSSJOIN(SELECT0cUNIONSELECT1UNIONSELECT2UNIONSELECT3UNIONSELECT4UNIONSELECT5UNIONSELECT6UNIONSELECT7UNIONSELECT8UNIONSELECT9)t3CROSSJOIN(SELECT0dUNIONSELECT1UNIONSELECT2UNIONSELECT3UNIONSELECT4UNIONSELECT5UNIONSELECT6UNIONSELECT7UNIONSELECT8UNIONSELECT9)t4)tLIMIT10000;无表笛卡尔积技巧生成连续序列比存储过程轻量、兼容性好。验证SELECTcount(*)FROMdetail_demo;-- → 10005前 5 条 批量 10000六、MinIO 存储结构揭秘数据写入后在 MinIO 控制台观察到如下目录结构defaultbucket/ └─ {cluster_id}/ ← 集群 UUID如 4cab7f71-xxxx-xxxx ├─ db10001/ ← 业务数据库cloud_db ├─ db10565/ ← 系统数据库_statistics_ │ └─ {table_id}/ ← 表目录如 10472 detail_demo │ └─ {tablet_id}/ ← Tablet 目录如 10471 │ ├─ SCHEMA_xxx ← 表 DDL 定义文件 │ └─ meta/ ← Tablet 元数据 │ ├─ {rowset_version}_{segment_id}.meta │ └─ ... └─ ...关键点cluster_id是集群唯一标识一个 bucket 可以挂多个 StarRocks 集群db10001是用户创建的数据库在 SR 内部的数字 ID数据文件.dat不会立即出现——INSERT 数据先写内存 MemTable满足条件后才落盘成 Segment 文件meta/下的.meta文件记录 Rowset 版本和 Segment 映射关系七、三个关键踩坑点总结序号问题根因解决1FE 反复崩溃aws_s3_path为空内置存储卷初始化发生在启动阶段不等 SQL 配置fe.conf中填入占位 MinIO 配置2CN 进程在跑但不加入集群漏配helper指向 FE edit_log_portcn.conf配置helper hostname:90103FQDN 模式下仍报 FQDN 解析失败未启用enable_fqdn_mode仍走网卡匹配逻辑fe.conf配置enable_fqdn_mode true八、常用排查命令速查# FE 日志tail-100fe/log/fe.warn.logtail-100fe/log/fe.log# CN 日志tail-100be/log/cn.INFOcatbe/log/cn.WARNING# FE 状态mysql-h127.0.0.1-P9030-uroot-eSHOW PROC /frontends\G# CN 状态mysql-h127.0.0.1-P9030-uroot-eSHOW COMPUTE NODES\G# 数据库与表统计mysql-h127.0.0.1-P9030-uroot-eSHOW PROC /statistic# 存储卷mysql-h127.0.0.1-P9030-uroot-eSHOW STORAGE VOLUMES部署日期2026-05-28