以下步骤将向您展示如何创建 EC 配置文件,然后将该配置文件应用到 EC 池。
-
本节中提到的命令将创建一个名为 EC-profile 的纠删码配置文件,该配置文件将具有 k=3 和 m=2 的特征,分别是数据和编码块的数量。因此,每个存储在纠删码池中的对象将被划分为 3 个(k)个数据块,并在其中添加 2 个(m)个额外的编码块,总共制作了 5 (k + m) 个块。最后,这 5 (k + m) 个块分布在不同的 OSD 故障区域:
- Create the erasure code profile:
-
- List the profile:
-
- Get the contents of your erasure code profile:
这显示在以下屏幕截图中:
- Create a Ceph pool of the erasure type, which is based on the erasure code profile that we created in step 1:
检查新创建的池的状态;你应该发现池的大小是5 (k + m),也就是擦除大小。因此,数据将被写入五个不同的 OSD,如下图所示:
- Let's now add some data to this newly created Ceph pool. To do this, we will create a dummy file, hello.txt, and add this file to the EC-pool as shown in the following screenshot:
- To verify if the erasure-coded pool is working correctly, we will check the OSD map for the EC-pool and object1 as shown in the following screenshot:
如果你观察输出,你会注意到object1存放在placement group中 2.c,依次存储在 EC 池。你还会注意到归置组存储在五个OSD上,即osd.2、osd.8 、osd.0、osd.7 和 osd.6。如果您返回第 1 步,您将看到我们创建了 (3,2) 的纠删码配置文件。这就是为什么 object1 存储在五个 OSD 上的原因。
在这个阶段,我们已经完成了在 Ceph 集群中建立一个纠删池。现在,我们将刻意尝试破坏 OSD,以查看当 OSD 不可用时擦除池的行为。
- We will now try to bring down osd.2 and osd.8, one by one.
These are optional steps and you should not be performing this on your production Ceph cluster. Also, the OSD numbers might change for your cluster; replace them wherever necessary.
关闭 osd.2 并检查 EC-pool 和object1的OSD映射。您应该注意到 osd.2 被替换为单词 NONE, w这意味着 osd.2 不再可用于此池:
This is shown in the following screenshot:
- Similarly, break one or more OSD, that is, osd.8, and notice the OSD map for the EC-pool and object1. You will notice that, like osd.2, osd.8 also gets replaced by the word NONE, which means that osd.8 is also no longer available for this EC-pool:
如下截图所示:
现在,EC-pool 运行在三个 OSD 上,这是设置的最低要求擦除池。如前所述, EC-pool 将需要五个块中的任意三个块才能读取数据.现在,我们只剩下三个块了,分别是 on osd.0、osd.7 和 osd.6,我们仍然可以访问数据。让我们验证读取的数据:
Ceph 强大的架构极大地受益于纠删码功能。当 Ceph 检测到任何故障区域不可用时,它就会开始其基本的恢复操作。在恢复操作期间,擦除池通过将失败的块解码到新的 OSD 上来重建自己,然后,它们会自动使所有块可用。
在上面提到的最后两个步骤中,我们打算最终破解了osd.2和osd.8< /kbd>。一段时间后,Ceph 将启动t 恢复并将丢失的块重新生成到不同的 OSD 上。恢复操作完成后,您应该检查 EC-pool 和 object1 的 OSD 映射。您会惊讶地看到新的 OSD ID 为 osd.1 和 osd.3。因此,an 擦除池在没有管理输入的情况下变得健康,如以下屏幕截图所示: