第1.1章:StarRocks部署--源码编译

本文介绍了StarRocks,一款基于Apache Doris的极速全场景MPP分析型数据库,强调其向量化执行引擎、兼容MySQL协议、联邦查询能力和现代化MPP架构。文章详细阐述了StarRocks的FE和BE节点、业务架构以及数据生态,旨在为读者提供StarRocks部署的基础知识。

StarRocks是鼎石科技基于Apache Doris(incubating) 0.13打造出的企业级国产数据库产品,目前已在Github开源:

GitHub - StarRocks/starrocks: StarRocks is a next-gen sub-second MPP database for full analytics scenarios, including multi-dimensional analytics, real-time analytics and ad-hoc query.

一、StarRocks特性

StarRocks是一款极速全场景MPP分析型数据库,可以“一栈式”的响应企业各类低延迟场景的查询需求。

为了对StarRocks有一个准确的认知,我们不妨将StarRocks概念的关键词逐项展开介绍:“极速”、“全场景”、“MPP”和“分析型数据库”。

  • 极速

StarRocks打造了原生向量化执行引擎,采用向量化技术,充分利用CPU的并行计算能力,在多维分析中实现亚秒级查询返回。StarRocks的向量化技术配合列式存储、智能物化视图和CBO查询优化器等诸多加速手段,实现较以往系统5-10倍的性能提升。

  • 全场景

StarRocks兼容MySQL协议,我们可以方便的使用各种客户端和BI工具来访问它。StarRocks可以灵活的满足多类数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等,让用户摆脱冗杂的技术栈。让数据分析不再需要做Cube,也不需要打成宽表,而是通过星型模型、雪花模型等进行多表关联灵活join,真正的“一栈式”解决数据分析难题。
 

  同时,StarRocks还具有强大的联邦查询能力,支持创建外部表直接访问来自Hive、MySQL和Elasticsearch的数据,而无需导入。

  • MPP架构

StarRocks使用现代化MPP(Massively Parallel Processing,大规模并行处理)架构,简单来说,StarRocks会将任务并行的分散到集群多个服务器节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果。这种架构下,StarRocks集群每个节点都有独立的磁盘存储系统和内存系统,业务数据根据数据库模型和应用特点划分到各个节点上,每台数据节点通过网络互相连接,彼此协同计算,作为整体提供数据库服务。StarRocks的现代化MPP架构保证了StarRocks具有可伸缩、高可用、高性能、高性价比、高容错、易运维等优势。

  • 分析型数据库

StarRocks的定位是OLAP分析型数据库,这也就是说它适合对大规模的数据进行多维度的查询分析,而不适合像OLTP类数据库(比如MySQL)一样对少量的数据进行大并发频繁的插入和修改。经过业界头部互联网公司的长期使用验证,StarRocks完全可以应对PB级别的结构化数据分析场景,查询时间一般可达到秒级或毫秒级。
 

二、StarRocks架构

StarRocks的架构很简洁,核心只有FE(Frontend)、BE(Backend)两类进程,不依赖外部组件,方便部署。同时,FE和BE都可以横向扩容,确保整个集群无单点,运维也非常省心。

 

针对上面的架构图,由上至下简单介绍几个基本概念:

  • Client

StarRocks没有自带客户端,推荐使用mysql-client进行访问。StarRocks兼容MySQL协议,所以我们可以使用任意的MySQL JDBC/ODBC客户端,例如SQLyog、DBeaver、Navicat等,将StarRocks视为MySQL进行连接访问。

  • FE

StarRocks的前端节点,使用Java语言编写,负责管理元数据,管理客户端连接,进行查询规划,查询调度等工作。准确来说,FE有两种角色:Follower和Observer,其中Follower会通过类raft的bdbje协议选主出一个Leader(实现选主需要集群中有半数以上的Follower实例存活),只有Leader会对元数据进行写操作。Observer和Follower的差别就是Observer不会参与选主。Observer同样不会进行任何的数据写入,只会参与读取,用来扩展集群的查询能力。每个FE节点都有一份完整的元数据,以此来达到元数据的高可用,保证单节点宕机的情况下,元数据能够实时地在线恢复,而不影响整个服务。

  • BE

StarRocks的后端节点,使用C++语言开发,负责数据存储,计算执行,以及compaction,副本管理等工作。StarRocks会将我们创建的表根据分区和分桶机制划分成多个Tablet多副本存储在不同BE节点上。这里的Tablet是StarRocks表的逻辑分片,也是StarRocks中副本管理的基本单位。

  • Broker

在上面的架构图中没有体现,它是StarRocks和外部HDFS/对象存储等外部数据对接的中转服务组件,辅助提供导入导出功能,可以视需求添加使用。Broker本身无状态,可以随意启停,不会影响集群。

三、StarRocks业务架构

在对StarRocks的架构有了基本的了解后,我们再简单介绍一下企业使用StarRocks时,大数据架构的整体设计。下图就是一个常见的大数据业务架构图,StarRocks在整个大数据架构中一般会处在比较靠上的位置,我们会将数据ETL后导入至StarRocks,而后提供给上层的各类业务系统进行展示和分析。

在这套架构中,Hadoop作为大数据存储和批量处理的行业标准,用于原始数据的落地和存储。Kafka用于支持实时数据的传输。Hive,Spark,Flink作为数据加工和处理的工具,将经过清洗和处理的明细数据导入StarRocks。根据业务对数据实时性的要求,我们既可以按照“T+1”的方式批量导入,也可以进行实时的导入。在StarRocks中对明细数据进行进一步的计算、聚合、建立物化视图等处理后,便可以直接提供给上层的各类线上业务系统。

上层应用可以根据自身需要,通过标准SQL语句直接查明细数据,或者查聚合数据。查询的灵活性完全由SQL语句来提供,不需要再额外开发其他用于数据处理的程序模块。

 

如果用户的数据规模不大,上图中的业务架构还可以进一步简化。比如我们就不用再搭建架构较重的Hadoop集群,也不需要再使用Flink等外部计算框架,而是直接使用Kafka作为缓冲,在外部数据进入Kafka后通过StarRocks自带的Routine Load流式拉取数据,来将所有的原始数据直接存放在StarRocks中。

同时,我们可以在StarRocks中使用insert into select配合物化视图构建上卷的模型,实现内部的ETL操作。这种简洁的架构可以极大的降低企业的运维成本,并且让企业的数据分析体系更加简单。

四、StarRocks数据生态

StarRocks拥有完备的数据生态,可以灵活的对接企业当前的数据架构,进行数据导入和数据迁移。当前社区提供了多种导入方式,我们可以根据数据源位置、数据量大小、导入频率等需求选择最适合自己业务需求的导入方式:

 StarRocks 目前主要提供了5种不同的导入方式来适配不同的数据导入需求。各导入方式的使用场景、数据源类型以及适合的数据规模等信息如下表,我们可以先有一个初步的认识:
 

 

 StarRocks 目前主要提供了5种不同的导入方式来适配不同的数据导入需求。各导入方式的使用场景、数据源类型以及适合的数据规模等信息如下表,我们可以先有一个初步的认识:

 

除表中的5种主要方式外,StarRocks还开发了Flink-Connector-StarRocks和DataX-StarRocksWriter数据导入插件,让我们可以对接更多类型的数据源完成数据的高效导入和迁移。

至此,我们已经对StarRocks有了基本的了解。接下来,我会用一系列的文章详细展开对StarRocks的介绍,让大家可以快速上手部署使用。
 

# 创建命名空间 apiVersion: v1 kind: Namespace metadata: name: starrocks --- # 配置MinIO访问密钥Secret apiVersion: v1 kind: Secret metadata: name: starrocks-s3-secret namespace: starrocks type: Opaque stringData: AWS_ACCESS_KEY_ID: "admin" # MinIO访问密钥 AWS_SECRET_ACCESS_KEY: "izhMinio@pasword" # MinIO密钥 AWS_ENDPOINT: "http://minio-svc.minio-ns.svc.cluster.local:9000" # MinIO服务地址 AWS_DEFAULT_REGION: "cn-north-1" --- # FE ConfigMap apiVersion: v1 kind: ConfigMap metadata: name: fe-config namespace: starrocks data: fe.conf: | brpc_port = 8060 enable_brpc_ssl = false enable_fqdn_mode = true cloud_native_meta_port = 6090 meta_dir = /opt/starrocks/fe/meta edit_log_port = 9010 http_port = 8030 query_port = 9030 JAVA_OPTS = -Xmx16g -Xms16g --- # StorageClass(确保集群已部署local-path-provisioner) apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local-path-starrocks provisioner: rancher.io/local-path volumeBindingMode: WaitForFirstConsumer reclaimPolicy: Retain # 保留数据防止误删除 --- # FE Service apiVersion: v1 kind: Service metadata: name: fe-service namespace: starrocks spec: type: NodePort ports: - name: edit-log # 新增9010端口映射 port: 9010 targetPort: 9010 - name: query port: 9030 targetPort: 9030 nodePort: 31030 - name: http port: 8030 targetPort: 8030 nodePort: 31031 selector: app: fe --- # BE Service apiVersion: v1 kind: Service metadata: name: be-service namespace: starrocks spec: clusterIP: None ports: - name: be port: 9060 targetPort: 9060 - name: heartbeat port: 9050 targetPort: 9050 selector: app: be --- # BE ConfigMap apiVersion: v1 kind: ConfigMap metadata: name: be-config namespace: starrocks data: be.conf: | heartbeat_service_port = 9050 heartbeat_service_address = fe-service.starrocks.svc.cluster.local storage_root_path = /opt/starrocks/storage_data webserver_port = 8040 be_port = 9060 be_http_port = 8040 brpc_port = 8060 cloud_native_meta_port = 6090 # 存算分离核心配置(需与MinIO完全匹配) aws_s3_endpoint = minio-svc.minio-ns.svc.cluster.local:9000 aws_s3_path = s3://starrocks-data/ aws_s3_access_key = admin aws_s3_secret_key = izhMinio@pasword aws_s3_use_aws_sdk_default_behavior = false # 必须关闭AWS默认行为 aws_s3_enable_path_style_access = true # MinIO需要启用路径模式 # 存算分离配置 run_mode = shared_data cloud_native_storage_type = S3 aws_s3_path = "s3://starrocks-data/" # 生产环境JVM参数 JAVA_OPTS = -Xmx32g -Xms32g -XX:+UseG1GC JAVA_HOME = /opt/starrocks/jdk-17 --- # FE StatefulSet apiVersion: apps/v1 kind: StatefulSet metadata: name: fe namespace: starrocks spec: serviceName: fe-service replicas: 3 selector: matchLabels: app: fe template: metadata: labels: app: fe spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: ["fe"] topologyKey: "kubernetes.io/hostname" containers: - name: fe image: registry.cn-shanghai.aliyuncs.com/vsi-open/starrocks-fe:2025-05-22 command: - /bin/sh - -c - | # 添加日志输出便于调试 echo "Starting FE with ID ${FE_ID}"; if [ "${FE_ID}" = "fe-0" ]; then /opt/starrocks/fe/bin/start_fe.sh --host_type=FQDN else export JAVA_OPTS="-Xmx16g -Xms16g -Dcom.alibaba.rocketmq.client.sendSmartMsg=false" /opt/starrocks/fe/bin/start_fe.sh --helper=fe-0.fe-service.starrocks.svc.cluster.local:9010 --host_type=FQDN fi lifecycle: preStop: exec: command: ["/opt/starrocks/fe/bin/stop_fe.sh"] env: - name: FE_MASTER_SERVERS # 主节点专用配置 value: "fe-0.fe-service.starrocks.svc.cluster.local:9010" - name: FE_SERVERS value: "fe-0.fe-service.starrocks.svc.cluster.local:9010,fe-1.fe-service.starrocks.svc.cluster.local:9010,fe-2.fe-service.starrocks.svc.cluster.local:9010" - name: FE_ID valueFrom: fieldRef: fieldPath: metadata.name ports: - containerPort: 9010 # 内部通信端口 - containerPort: 9030 # MySQL协议端口 - containerPort: 8030 # HTTP端口 volumeMounts: - name: meta mountPath: /opt/starrocks/fe/meta - name: config mountPath: /opt/starrocks/fe/conf/fe.conf subPath: fe.conf readinessProbe: httpGet: path: /api/health port: 8030 initialDelaySeconds: 120 periodSeconds: 20 failureThreshold: 5 livenessProbe: httpGet: path: /api/health port: 8030 initialDelaySeconds: 200 periodSeconds: 30 failureThreshold: 3 volumes: - name: config configMap: name: fe-config volumeClaimTemplates: - metadata: name: meta spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "local-path-starrocks" resources: requests: storage: 50Gi --- # BE StatefulSet apiVersion: apps/v1 kind: StatefulSet metadata: name: be namespace: starrocks spec: serviceName: be-service replicas: 4 selector: matchLabels: app: be template: metadata: labels: app: be spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: ["be"] topologyKey: "kubernetes.io/hostname" containers: - name: be image: registry.cn-shanghai.aliyuncs.com/vsi-open/starrocks-be:2025-05-22 command: ["/opt/starrocks/be/bin/start_be.sh"] lifecycle: preStop: exec: command: ["/opt/starrocks/be/bin/stop_be.sh"] envFrom: - secretRef: name: starrocks-s3-secret env: - name: AWS_REGION value: "cn-north-1" - name: AWS_S3_ENDPOINT value: "minio-svc.minio-ns.svc.cluster.local:9000" - name: AWS_S3_USE_AWS_SDK_DEFAULT_BEHAVIOR value: "false" ports: - containerPort: 9060 name: hb-port # 心跳端口 - containerPort: 8040 name: http-port # 管理端口 - containerPort: 9050 name: hb-svc-port # 心跳服务端口 volumeMounts: - name: config mountPath: /opt/starrocks/be/conf/be.conf subPath: be.conf - name: storage mountPath: /opt/starrocks/be/storage resources: requests: cpu: 8 memory: 8Gi limits: cpu: 16 memory: 16Gi livenessProbe: tcpSocket: port: 9060 initialDelaySeconds: 120 periodSeconds: 20 readinessProbe: tcpSocket: port: 9060 initialDelaySeconds: 60 periodSeconds: 15 volumes: - name: config configMap: name: be-config volumeClaimTemplates: - metadata: name: meta spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "local-path-starrocks" resources: requests: storage: 50Gi - metadata: name: storage spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "local-path-starrocks" resources: requests: storage: 100Gi # 根据数据量调整 ```不用考虑minio,与宁状态如下 ``` ➜ StarRocks git:(master) ✗ kubectl get pod -n starrocks -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES be-0 1/1 Running 0 152m 172.18.3.241 follower03 <none> <none> be-1 1/1 Running 0 151m 172.18.1.57 follower01 <none> <none> be-2 1/1 Running 0 150m 172.18.0.130 leader01 <none> <none> be-3 1/1 Running 0 149m 172.18.2.222 follower02 <none> <none> fe-0 1/1 Running 0 7m22s 172.18.3.62 follower03 <none> <none> fe-1 0/1 Running 1 (46s ago) 5m17s 172.18.1.93 follower01 <none> <none> ➜ StarRocks git:(master) ✗ kubectl describe pod fe-1 -n starrocks Name: fe-1 Namespace: starrocks Priority: 0 Service Account: default Node: follower01/192.168.11.102 Start Time: Tue, 27 May 2025 15:47:56 +0800 Labels: app=fe apps.kubernetes.io/pod-index=1 controller-revision-hash=fe-675df448fb statefulset.kubernetes.io/pod-name=fe-1 Annotations: <none> Status: Running IP: 172.18.1.93 IPs: IP: 172.18.1.93 Controlled By: StatefulSet/fe Containers: fe: Container ID: containerd://463884b0da7eb4156097e7692746062da4046cc63df8d6d0f4c3dc615d4246ab Image: registry.cn-shanghai.aliyuncs.com/vsi-open/starrocks-fe:2025-05-22 Image ID: registry.cn-shanghai.aliyuncs.com/vsi-open/starrocks-fe@sha256:f581e1038681fa2f5d65bbb082f1d47d49fcab8ca37afb02c0eec5685947952d Ports: 9010/TCP, 9030/TCP, 8030/TCP Host Ports: 0/TCP, 0/TCP, 0/TCP Command: /bin/sh -c echo "Starting FE with ID ${FE_ID}"; if [ "${FE_ID}" = "fe-0" ]; then /opt/starrocks/fe/bin/start_fe.sh else echo "--helper=fe-0.fe-service.starrocks.svc.cluster.local:9010"; /opt/starrocks/fe/bin/start_fe.sh --helper=fe-0.fe-service.starrocks.svc.cluster.local:9010 fi State: Running Started: Tue, 27 May 2025 15:52:27 +0800 Last State: Terminated Reason: Error Exit Code: 143 Started: Tue, 27 May 2025 15:47:57 +0800 Finished: Tue, 27 May 2025 15:52:27 +0800 Ready: False Restart Count: 1 Liveness: http-get http://:8030/api/health delay=200s timeout=1s period=30s #success=1 #failure=3 Readiness: http-get http://:8030/api/health delay=120s timeout=1s period=20s #success=1 #failure=5 Environment: FE_MASTER_SERVERS: fe-0.fe-service.starrocks.svc.cluster.local:9010 FE_SERVERS: fe-0.fe-service.starrocks.svc.cluster.local:9010,fe-1.fe-service.starrocks.svc.cluster.local:9010,fe-2.fe-service.starrocks.svc.cluster.local:9010 FE_ID: fe-1 (v1:metadata.name) Mounts: /opt/starrocks/fe/conf/fe.conf from config (rw,path="fe.conf") /opt/starrocks/fe/meta from meta (rw) /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-65kpf (ro) Conditions: Type Status PodReadyToStartContainers True Initialized True Ready False ContainersReady False PodScheduled True Volumes: meta: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: meta-fe-1 ReadOnly: false config: Type: ConfigMap (a volume populated by a ConfigMap) Name: fe-config Optional: false kube-api-access-65kpf: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 5m32s default-scheduler Successfully assigned starrocks/fe-1 to follower01 Normal Pulled 62s (x2 over 5m32s) kubelet Container image "registry.cn-shanghai.aliyuncs.com/vsi-open/starrocks-fe:2025-05-22" already present on machine Normal Created 62s (x2 over 5m32s) kubelet Created container: fe Normal Started 62s (x2 over 5m32s) kubelet Started container fe Warning Unhealthy 62s (x9 over 3m23s) kubelet Readiness probe failed: Get "http://172.18.1.93:8030/api/health": dial tcp 172.18.1.93:8030: connect: connection refused Warning Unhealthy 62s (x3 over 2m2s) kubelet Liveness probe failed: Get "http://172.18.1.93:8030/api/health": dial tcp 172.18.1.93:8030: connect: connection refused Normal Killing 62s kubelet Container fe failed liveness probe, will be restarted Warning FailedPreStopHook 62s kubelet PreStopHook failed kubectl exec fe-0 -n starrocks -- curl http://localhost:8030/api/health % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 60 100 60 0 0 46224 0 --:--:-- --:--:-- --:--:-- 60000{"online_backend_num":0,"total_backend_num":4,"status":"OK"} ➜ StarRocks git:(master) ✗ ``` 我手动登陆fe-0 将4个be添加“ALTER SYSTEM ADD BACKEND”,但其alive都是false 特别说明 我的镜像是基于fe-ubuntu:latest与be-ubuntu:latest,不支持/opt/starrocks/be/bin/start_backend.sh -be_port=9060 webserver_port=8040 请修正
05-28
<think>嗯,用户的问题是在Kubernetes里部署StarRocks集群时,BE节点的alive状态显示为false,可能和镜像不支持某些启动参数有关。他们用的是fe-ubuntu:latest和be-ubuntu:latest镜像,需要调整StatefulSet配置来兼容start_be.sh脚本的限制。首先,我得回忆一下StarRocks的组件结构,BE节点负责数据存储和查询执行,启动脚本可能对环境变量或参数有特定要求。用户提到可能与镜像不支持的启动参数有关,所以需要检查BE的启动脚本是否有特别的要求。比如,是否需要在容器启动时传递某些参数,或者环境变量是否正确设置。参考用户提供的引用[1],里面有一个docker-compose.yaml的例子,其中BE服务的command是直接执行start_be.sh,并且挂载了配置文件、存储目录和日志。这可能说明在Kubernetes中也需要类似的配置,比如正确挂载配置文件,或者设置网络模式。另外,引用[3]提到将目录映射到Docker容器中,可能涉及到存储卷的挂载问题。如果BE节点需要持久化存储,在StatefulSet中是否正确配置了volumeClaimTemplates?还有健康检查的设置,引用[1]中的healthcheck部分,可能Kubernetes的存活探针需要调整,比如使用HTTP GET请求检查8040端口的健康接口,如果健康检查配置不正确,可能导致BE节点被认为不健康。接下来,用户需要调整StatefulSet配置。可能的步骤包括:确保启动命令正确,比如在容器命令中直接调用start_be.sh;检查环境变量,如BE的配置文件是否正确挂载;网络模式是否使用hostNetwork,因为StarRocks的BE可能需要特定的端口通信;存储卷是否正确挂载,特别是be.conf和storage目录;调整存活探针,使用正确的端口和路径;以及可能的初始化容器等待FE节点就绪。还需要考虑的是,Kubernetes中的服务发现是否配置正确,BE节点能否正确连接到FE节点。如果BE启动时依赖FE已经启动,可能需要初始化容器来等待FE就绪,如引用[2]中的etcd配置,可能需要类似的服务发现设置。最后,用户可能需要查看BE的日志来进一步诊断问题,所以需要确保日志目录挂载正确,方便排查错误。综合这些因素,调整StatefulSet的配置,确保所有参数和挂载点正确,健康检查配置合适,网络设置正确,应该能解决BE节点alive状态为false的问题。</think>### 分步解决方案 #### 1. 确认BE启动命令限制 StarRocks BE节点启动脚本`/opt/starrocks/be/bin/start_be.sh`默认要求**直接运行脚本**而非通过参数传递配置,需要调整Kubernetes StatefulSet的启动命令: ```yaml command: ["/bin/bash", "-c", "/opt/starrocks/be/bin/start_be.sh"] ``` #### 2. 配置关键环境变量 BE节点依赖以下核心参数,需通过env字段注入: ```yaml env: - name: PRIORITY_NETWORKS value: "10.0.0.0/24" # 指定BE节点通信网段 - name: BE_PORT value: "9060" # BE Thrift服务端口 - name: WEBSERVER_PORT value: "8040" # 健康检查端口 ``` #### 3. 调整网络模式 BE节点需要直接绑定主机网络端口,在StatefulSet中配置: ```yaml spec: template: spec: hostNetwork: true # 启用主机网络模式 dnsPolicy: ClusterFirstWithHostNet ``` #### 4. 持久化存储配置 BE需要稳定存储数据目录,使用PVC声明存储卷: ```yaml volumeMounts: - name: be-storage mountPath: /opt/starrocks/be/storage volumes: - name: be-storage persistentVolumeClaim: claimName: be-pvc ``` #### 5. 健康检查优化 根据BE的HTTP健康检查接口调整存活探针: ```yaml livenessProbe: httpGet: path: /api/health port: 8040 initialDelaySeconds: 60 periodSeconds: 30 ``` #### 6. 初始化容器配置 添加等待FE就绪的初始化容器: ```yaml initContainers: - name: wait-fe image: busybox:1.28 command: ['sh', '-c', 'until nc -z fe-service 9030; do echo waiting for fe; sleep 10; done'] ``` #### 7. 完整配置示例 ```yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: starrocks-be spec: serviceName: "be" replicas: 3 template: metadata: labels: app: be spec: hostNetwork: true initContainers: - name: wait-fe image: busybox:1.28 command: ['sh', '-c', 'until nc -z fe-service 9030; do echo waiting for fe; sleep 10; done'] containers: - name: be image: starrocks/be-ubuntu:latest command: ["/bin/bash", "-c", "/opt/starrocks/be/bin/start_be.sh"] env: - name: PRIORITY_NETWORKS value: "10.0.0.0/24" - name: BE_PORT value: "9060" ports: - containerPort: 9060 - containerPort: 8040 volumeMounts: - name: be-storage mountPath: /opt/starrocks/be/storage livenessProbe: httpGet: path: /api/health port: 8040 initialDelaySeconds: 60 periodSeconds: 30 volumeClaimTemplates: - metadata: name: be-storage spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "ssd" resources: requests: storage: 100Gi ``` ### 关键验证步骤 1. 检查BE日志定位错误原因: ```bash kubectl logs starrocks-be-0 -c be | grep "ERROR" ``` 2. 验证节点注册状态: ```bash mysql -h fe-service -P 9030 -uroot -e "SHOW PROC '/backends'" ``` 正常应显示`Alive: true`和`SystemDecommissioned: false`[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值