# 配置 EMQX 持久化

# 任务目标

  • 如何通过 persistent 字段 配置 EMQX 4.x 集群持久化。
  • 如何通过 volumeClaimTemplates 字段配置 EMQX 5.x 集群 Core 节点持久化。

# EMQX 集群持久化配置

  • 配置 EMQX 集群

将上述内容保存为:emqx-persistent.yaml,执行如下命令部署 EMQX 集群:

kubectl apply -f emqx-persistent.yaml
1

输出类似于:

emqx.apps.emqx.io/emqx created
1
  • 检查 EMQX 集群是否就绪

# 验证 EMQX 集群持久化是否生效

验证方案: 1)在旧 EMQX 集群中通过 Dashboard 创建一条测试规则;2)删除旧集群;3) 重新创建 EMQX 集群,通过 Dashboard 查看之前创建的规则是否存在。

  • 通过 Dashboard 创建测试规则

打开浏览器,输入 EMQX Pod 所在宿主机 IP 和 端口 32016 来登录 EMQX 集群 Dashboard(Dashboard 默认用户名为:admin ,默认密码为:public),进入 Dashboard 点击 数据集成 → 规则 进入创建规则的页面,我们先点击添加动作的按钮为这条规则添加响应动作,然后点击创建生成规则,如下图所示:

当我们的规则创建成功之后,在页面会出现一条规则记录,规则 ID 为:emqx-persistent-test,如下图所示:

  • 删除旧 EMQX 集群

执行如下命令删除 EMQX 集群:

kubectl delete -f  emqx-persistent.yaml
1

说明:emqx-persistent.yaml 是本文中第一次部署 EMQX 集群所使用的 YAML 文件,这个文件不需要做任何的改动。

输出类似于:

emqx.apps.emqx.io "emqx" deleted
1

执行如下命令查看 EMQX 集群是否被删除:

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

输出类似于:

Error from server (NotFound): emqxes.apps.emqx.io "emqx" not found
1
  • 重新创建 EMQX 集群

执行如下命令重新创建 EMQX 集群:

kubectl apply -f  emqx-persistent.yaml
1

输出类似于:

emqx.apps.emqx.io/emqx created
1

接下来执行如下命令查看 EMQX 集群是否就绪:

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

输出类似于:

[
  {
    "node": "emqx@emqx-core-0.emqx-headless.default.svc.cluster.local",
    "node_status": "running",
    "otp_release": "24.2.1-1/12.2.1",
    "role": "core",
    "version": "5.0.9"
  },
  {
    "node": "emqx@emqx-core-1.emqx-headless.default.svc.cluster.local",
    "node_status": "running",
    "otp_release": "24.2.1-1/12.2.1",
    "role": "core",
    "version": "5.0.9"
  },
  {
    "node": "emqx@emqx-core-2.emqx-headless.default.svc.cluster.local",
    "node_status": "running",
    "otp_release": "24.2.1-1/12.2.1",
    "role": "core",
    "version": "5.0.9"
  }
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

最后通过浏览器访问 EMQX Dashboard 查看之前创建的规则是否存在,如下如图所示:

从图中可以看出:在旧集群中创建的规则 emqx-persistent-test 在新的集群中依旧存在,则说明我们配置的持久化是生效的。