安装前准备

确认Kubernetes集群正常运行,具备足够的资源(CPU、内存、存储)部署RocketMQ 5.3.0。确保kubectl和helm工具已安装并配置好集群访问权限。

检查存储类(StorageClass)是否支持动态卷供应,RocketMQ的NameServer和Broker需要持久化存储。若需自定义存储类,提前创建。

部署NameServer

RocketMQ 5.3.0的NameServer是无状态服务,可通过Deployment部署。创建YAML文件定义Deployment和Service,设置副本数、资源限制及服务暴露方式(ClusterIP或NodePort)。

配置健康检查(livenessProbe和readinessProbe),确保NameServer稳定运行。通过环境变量调整JVM参数,优化内存分配。

部署Broker集群

Broker是RocketMQ的核心组件,需持久化存储。使用StatefulSet部署Broker,确保Pod名称和存储卷稳定。配置PVC模板,动态申请持久化卷。

设置Broker角色(Master/Slave)和集群模式。通过环境变量或配置文件指定NameServer地址、Broker名称及集群名称。调整Broker参数如刷盘策略、消息存储路径。

配置控制台(Dashboard)

部署RocketMQ Dashboard用于监控和管理。通过Deployment暴露服务,配置Ingress或NodePort访问。在Dashboard配置中指定NameServer地址,确保能正确连接集群。

网络与访问配置

根据需求选择服务暴露方式。内部访问使用ClusterIP,外部访问通过NodePort或Ingress。配置网络策略,限制不必要的访问。

若需跨命名空间访问,确保DNS解析正确。测试NameServer和Broker的连通性,验证消息发送和接收功能。

监控与日志收集

集成Prometheus和Grafana监控RocketMQ指标,配置告警规则。部署日志收集工具(如EFK),集中管理Broker和NameServer日志。

调整日志级别和输出路径,便于故障排查。定期检查监控数据,优化集群性能。

验证与测试

使用RocketMQ提供的命令行工具测试消息生产与消费。验证集群高可用性,模拟节点故障,观察自动恢复情况。

测试持久化功能,确保消息不丢失。通过Dashboard检查各项指标,确认集群运行状态正常。

# 离线安装、安装在k8sworker01节点
cat rocketmq-deployment.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: rocketmq
---
################################
# RocketMQ NameServer
################################
apiVersion: apps/v1
kind: Deployment
metadata:
  name: rocketmq-nameserver
  namespace: rocketmq
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rocketmq-nameserver
  template:
    metadata:
      labels:
        app: rocketmq-nameserver
    spec:
      nodeSelector:
        kubernetes.io/hostname: k8sworker01
      containers:
        - name: namesrv
          image: sealos.hub:5000/repo/eclipse-temurin:17-jdk
          imagePullPolicy: IfNotPresent
          workingDir: /rocketmq
          command:
            - sh
            - -c
            - |
              exec ./bin/mqnamesrv
          ports:
            - containerPort: 9876
          volumeMounts:
            - name: rocketmq-home
              mountPath: /rocketmq
      volumes:
        - name: rocketmq-home
          hostPath:
            path: /root/rocketmq/rocketmq-all-5.3.0-bin-release
            type: Directory
---
apiVersion: v1
kind: Service
metadata:
  name: rocketmq-nameserver
  namespace: rocketmq
spec:
  selector:
    app: rocketmq-nameserver
  ports:
    - name: remoting
      port: 9876
      targetPort: 9876
  type: ClusterIP
---
################################
# RocketMQ Broker
################################
apiVersion: apps/v1
kind: Deployment
metadata:
  name: rocketmq-broker
  namespace: rocketmq
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rocketmq-broker
  template:
    metadata:
      labels:
        app: rocketmq-broker
    spec:
      nodeSelector:
        kubernetes.io/hostname: k8sworker01
      containers:
        - name: broker
          image: sealos.hub:5000/repo/eclipse-temurin:17-jdk
          imagePullPolicy: IfNotPresent
          workingDir: /rocketmq
          env:
            - name: JAVA_OPT_EXT
              value: "-Xms512m -Xmx512m -XX:MaxDirectMemorySize=256m"
          command:
            - sh
            - -c
            - |
              exec ./bin/mqbroker -n rocketmq-nameserver:9876
          ports:
            - containerPort: 10911
            - containerPort: 10909
          volumeMounts:
            - name: rocketmq-home
              mountPath: /rocketmq
      volumes:
        - name: rocketmq-home
          hostPath:
            path: /root/rocketmq/rocketmq-all-5.3.0-bin-release
            type: Directory
---
apiVersion: v1
kind: Service
metadata:
  name: rocketmq-broker
  namespace: rocketmq
spec:
  selector:
    app: rocketmq-broker
  ports:
    - name: broker
      port: 10911
      targetPort: 10911
  type: ClusterIP
---
################################
# RocketMQ Proxy
################################
apiVersion: apps/v1
kind: Deployment
metadata:
  name: rocketmq-proxy
  namespace: rocketmq
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rocketmq-proxy
  template:
    metadata:
      labels:
        app: rocketmq-proxy
    spec:
      nodeSelector:
        kubernetes.io/hostname: k8sworker01
      containers:
        - name: proxy
          image: sealos.hub:5000/repo/eclipse-temurin:17-jdk
          imagePullPolicy: IfNotPresent
          workingDir: /rocketmq
          command:
            - sh
            - -c
            - |
              exec ./bin/mqproxy -n rocketmq-nameserver:9876
          ports:
            - containerPort: 8081
          volumeMounts:
            - name: rocketmq-home
              mountPath: /rocketmq
      volumes:
        - name: rocketmq-home
          hostPath:
            path: /root/rocketmq/rocketmq-all-5.3.0-bin-release
            type: Directory
---
apiVersion: v1
kind: Service
metadata:
  name: rocketmq-proxy
  namespace: rocketmq
spec:
  selector:
    app: rocketmq-proxy
  ports:
    - name: grpc
      port: 8081
      targetPort: 8081
      nodePort: 32081
  type: NodePort
---
################################
# RocketMQ Dashboard
################################
apiVersion: apps/v1
kind: Deployment
metadata:
  name: rocketmq-dashboard
  namespace: rocketmq
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rocketmq-dashboard
  template:
    metadata:
      labels:
        app: rocketmq-dashboard
    spec:
      nodeSelector:
        kubernetes.io/hostname: k8sworker01
      containers:
        - name: dashboard
          image: sealos.hub:5000/apacherocketmq/rocketmq-dashboard:latest
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8082
          env:
            - name: "NAMESRV_ADDR"
              value: "rocketmq-nameserver:9876"
            - name: "JAVA_OPT_EXT"
              value: "-Xms256m -Xmx256m"
---
apiVersion: v1
kind: Service
metadata:
  name: rocketmq-dashboard
  namespace: rocketmq
spec:
  selector:
    app: rocketmq-dashboard
  ports:
    - name: http
      port: 8082
      targetPort: 8082
      nodePort: 32080
  type: NodePort



不过我指定了安装到k8sworker01,各位自己甄别不一定适合自己

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐