# 配置 Core + Replicant 集群 (EMQX 5.x)

# 任务目标

  • 通过 coreTemplate 字段配置 EMQX 集群 Core 节点。
  • 通过 replicantTemplate 字段配置 EMQX 集群 Replicant 节点。

# Core 节点与 Replicant 节点

在 EMQX 5.0 中,EMQX 集群中的节点可以分成两个角色:核心(Core)节点和 复制(Replicant)节点。Core 节点负责集群中所有的写操作,与 EMQX 4.x 集群中的节点行为一致,作为 EMQX 数据库 Mria (opens new window) 的真实数据源来存储路由表、会话、配置、报警以及 Dashboard 用户信息等数据。而 Replicant 节点被设计成无状态的,不参与数据的写入,添加或者删除 Replicant 节点不会改变集群数据的冗余。更多关于 EMQX 5.0 架构的信息请参考文档:EMQX 5.0 架构 (opens new window),Core 节点与 Replicant 节点的拓扑结构如下图所示:

提示

EMQX 集群中至少要有一个 Core 节点,出于高可用的目的,EMQX Operator 建议 EMQX 集群至少有三个 Core 节点。

# 部署 EMQX 集群

apps.emqx.io/v2alpha1 EMQX 支持通过 .spec.coreTemplate 字段来配置 EMQX 集群 Core 节点,使用 .spec.replicantTemplate 字段来配置 EMQX 集群 Replicant 节点,更多信息请查看:API 参考

  • 将下面的内容保存成 YAML 文件,并通过 kubectl apply 命令部署它

    apiVersion: apps.emqx.io/v2alpha1
    kind: EMQX
    metadata:
      name: emqx
    spec:
      image: emqx:5.0
      coreTemplate:
        spec:
          replicas: 3
          resources:
            requests:
              cpu: 100m
              memory: 256Mi
      replicantTemplate:
        spec:
          replicas: 3
          resources:
            requests:
              cpu: 100m
              memory: 512Mi
      dashboardServiceTemplate:
        spec:
          type: LoadBalancer
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23

    上文的 YAML 中,我们声明了这是一个由三个 Core 节点和三个 Replicant 节点组成的 EMQX 集群。Core 节点最低需要 256Mi 内存 ,Replicant 节点最低需要512Mi 内存。在实际业务中,Replicant 节点会接受全部的客户端请求,所以 Replicant 节点需要的资源会更高一些。

  • 等待 EMQX 集群就绪,可以通过 kubectl get 命令查看 EMQX 集群的状态,请确保 STATUSRunning,这个可能需要一些时间

    $ kubectl get emqx
    NAME   IMAGE      STATUS    AGE
    emqx   emqx:5.0   Running   2m55s
    
    1
    2
    3
  • 获取 EMQX 集群的 Dashboard External IP,访问 EMQX 控制台

    EMQX Operator 会创建两个 EMQX Service 资源,一个是 emqx-dashboard,一个是 emqx-listeners,分别对应 EMQX 控制台和 EMQX 监听端口。

    $ kubectl get svc emqx-dashboard -o json | jq '.status.loadBalancer.ingress[0].ip'
    
    192.168.1.200
    
    1
    2
    3

    通过浏览器访问 http://192.168.1.200:18083 ,使用默认的用户名和密码 admin/public 登录 EMQX 控制台。

# 检查 EMQX 集群

$ kubectl get emqx emqx -o json | jq .status.emqxNodes
1

可以通过检查 EMQX 自定义资源的状态来获取所有集群中节点的信息,节点的 role 字段表示它们在集群中的角色,在上文中部署了一个由两个 Core 节点与三个 Replicant 节点组成的集群。

[
  {
    "node": "emqx@10.244.4.56",
    "node_status": "running",
    "otp_release": "24.3.4.2-2/12.3.2.2",
    "role": "replicant",
    "version": "5.0.20"
  },
  {
    "node": "emqx@10.244.4.57",
    "node_status": "running",
    "otp_release": "24.3.4.2-2/12.3.2.2",
    "role": "replicant",
    "version": "5.0.20"
  },
  {
    "node": "emqx@10.244.4.58",
    "node_status": "running",
    "otp_release": "24.3.4.2-2/12.3.2.2",
    "role": "replicant",
    "version": "5.0.20"
  },
  {
    "node": "emqx@emqx-core-0.emqx-headless.default.svc.cluster.local",
    "node_status": "running",
    "otp_release": "24.3.4.2-2/12.3.2.2",
    "role": "core",
    "version": "5.0.20"
  },
  {
    "node": "emqx@emqx-core-1.emqx-headless.default.svc.cluster.local",
    "node_status": "running",
    "otp_release": "24.3.4.2-2/12.3.2.2",
    "role": "core",
    "version": "5.0.20"
  },
   {
    "node": "emqx@emqx-core-2.emqx-headless.default.svc.cluster.local",
    "node_status": "running",
    "otp_release": "24.3.4.2-2/12.3.2.2",
    "role": "core",
    "version": "5.0.20"
  }
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44