6.2. 配置 Ceph 块设备镜像概述
rbd-mirror 守护进程可以在单个 Ceph 存储集群上运行,实现单向镜像功能,也可以在两个 Ceph 存储集群上运行,以实现参与镜像关系的双向镜像。
rbd-mirror 守护进程负责通过从远程主镜像拉取更改,将镜像从一个 Ceph 存储集群同步到另一个 Ceph 存储集群,并将这些更改写入本地的非主镜像。
要使 RBD 镜像工作(可使用单向复制或双向复制),进行几个假设:
- 两个存储集群中都存在一个名称相同的池。
- 对于基于日志的镜像功能,池包含要镜像的启用了日志的镜像。
在单向或双向复制中,rbd-mirror 的每个实例必须能够同时连接其他 Ceph 存储集群。另外,两个数据中心站点之间网络必须具有足够的带宽才能处理镜像。
镜像以每个池为基础配置,带有镜像对等存储集群。Ceph 支持两种镜像模式,具体取决于池中镜像的类型。
- 池模式
- 启用了日志记录功能的池中的所有镜像都会被镜像(mirror)。
- 镜像模式
- 只有池中的特定镜像子集才会被镜像(mirror)。您必须为每个镜像单独启用镜像功能。
镜像是否可以修改取决于其状态:
- 您可以修改处于主状态的镜像。
- 您无法修改处于非主要状态的镜像。
镜像在镜像上启用镜像时自动提升为主要镜像。升级可能发生:
- 通过在池模式中启用镜像且仅适用于基于日志的镜像来隐式执行。
- 通过启用特定镜像的镜像来显式启用。
可以降级主镜像并提升非主镜像。
6.2.1. 单向复制(One-way Replication) 复制链接链接已复制到粘贴板!
单向镜像意味着一个存储集群中的主要镜像或镜像池会被复制到次要存储集群。单向镜像还支持复制到多个次要存储集群。
在辅助存储群集上,镜像是非主要复制;即 Ceph 客户端无法写入镜像。当数据从主存储集群镜像到次要存储集群时,rbd-mirror 仅在次要存储集群上运行。
为了进行单向镜像工作,应进行几项假设:
- 您有两个 Red Hat Storage Ceph 存储集群,您想要将镜像从主存储集群复制到辅助存储集群。
-
辅助存储集群包含
rbd-mirror守护进程,可在其中一个集群节点上运行。rbd-mirror守护进程连接到主存储集群,将镜像同步到次要存储集群。
图 6.1. 单向镜像
6.2.2. 双向复制(Two-way Replication) 复制链接链接已复制到粘贴板!
双向复制在主集群中添加一个 rbd-mirror 守护进程,使得镜像可以在集群上降级并提升到次要集群中。然后可以对次要群集上的镜像进行更改,然后按照相反方向(从次要到主要)进行复制。两个集群都必须运行 rbd-mirror,才能在任一集群上提升和降级镜像。目前,仅在两个站点间支持双向复制。
要进行双向镜像工作,请进行几项假设:
- 您有两个存储集群,希望在它们之间以任一方向复制镜像。
-
两个存储集群都运行
rbd-mirror守护进程。cluster1 上主的镜像由远程集群上的rbd-mirror守护进程同步,远程集群上的镜像与主集群同步。
图 6.2. 双向镜像
6.2.3. 使用命令行界面配置单向镜像 复制链接链接已复制到粘贴板!
使用单向复制时,您可以镜像到多个次要存储集群。
本节中的示例通过将主镜像作为 site-a 引用主存储集群和您要复制镜像的辅助存储集群作为 site-b 来区分两个存储集群。这些示例中使用的池名称称为 data。
先决条件
- 至少两个正在运行的 Red Hat Ceph Storage 集群。
- 对每个存储集群的 Ceph 客户端节点的根级别访问权限。
- 具有管理员级别功能的 CephX 用户。
流程
在两个站点上登录到
cephadmshell:示例
[root@site-a ~]# cephadm shell [root@site-b ~]# cephadm shell在
site-b上,调度在二级集群中部署 mirror 守护进程:语法
ceph orch apply rbd-mirror --placement=NODENAME示例
[ceph: root@site-b /]# ceph orch apply rbd-mirror --placement=host04注意nodename是要在二级集群中配置镜像的主机。在
site-a上的镜像上启用日志功能。对于新镜像,使用
--image-feature选项:语法
rbd create IMAGE_NAME --size MEGABYTES --pool POOL_NAME --image-feature FEATURE FEATURE示例
[ceph: root@site-a /]# rbd create image1 --size 1024 --pool data --image-feature exclusive-lock,journaling注意如果已经启用了
exclusive-lock,则使用journaling作为唯一参数,否则会返回以下错误:one or more requested features are already enabled (22) Invalid argument对于现有镜像,请使用
rbd feature enable命令:语法
rbd feature enable POOL_NAME/IMAGE_NAME FEATURE, FEATURE示例
[ceph: root@site-a /]# rbd feature enable data/image1 exclusive-lock, journaling要默认在所有新镜像中启用日志,请使用
ceph config set命令设置配置参数:示例
[ceph: root@site-a /]# ceph config set global rbd_default_features 125 [ceph: root@site-a /]# ceph config show mon.host01 rbd_default_features
在两个存储集群中选择 mirroring 模式(池模式或镜像模式)。
启用 池模式 :
语法
rbd mirror pool enable POOL_NAME MODE示例
[ceph: root@site-a /]# rbd mirror pool enable data pool [ceph: root@site-b /]# rbd mirror pool enable data pool这个示例启用对名为
data的完整池进行镜像。启用 镜像模式 :
语法
rbd mirror pool enable POOL_NAME MODE示例
[ceph: root@site-a /]# rbd mirror pool enable data image [ceph: root@site-b /]# rbd mirror pool enable data image这个示例在名为
data的池上启用镜像模式镜像。注意要在池中为特定镜像启用镜像功能,请参阅 Red Hat Ceph Storage Block Device Guide 中的 Enabling image mirroring 部分以了解更多详细信息。
验证两个站点都已成功启用了镜像:
语法
rbd mirror pool info POOL_NAME示例
[ceph: root@site-a /]# rbd mirror pool info data Mode: pool Site Name: c13d8065-b33d-4cb5-b35f-127a02768e7f Peer Sites: none [ceph: root@site-b /]# rbd mirror pool info data Mode: pool Site Name: a4c667e2-b635-47ad-b462-6faeeee78df7 Peer Sites: none
在 Ceph 客户端节点上,引导存储集群对等点。
创建 Ceph 用户帐户,并将存储集群对等注册到池:
语法
rbd mirror pool peer bootstrap create --site-name PRIMARY_LOCAL_SITE_NAME POOL_NAME > PATH_TO_BOOTSTRAP_TOKEN示例
[ceph: root@rbd-client-site-a /]# rbd mirror pool peer bootstrap create --site-name site-a data > /root/bootstrap_token_site-a注意这个示例 bootstrap 命令创建
client.rbd-mirror.site-a和client.rbd-mirror-peerCeph 用户。-
将 bootstrap 令牌文件复制到
site-b存储集群。 在
site-b存储集群中导入 bootstrap 令牌:语法
rbd mirror pool peer bootstrap import --site-name SECONDARY_LOCAL_SITE_NAME --direction rx-only POOL_NAME PATH_TO_BOOTSTRAP_TOKEN示例
[ceph: root@rbd-client-site-b /]# rbd mirror pool peer bootstrap import --site-name site-b --direction rx-only data /root/bootstrap_token_site-a注意对于单向 RBD 镜像功能,您必须使用
--direction rx-only参数,因为在引导对等时双向镜像是默认设置。
验证步骤
要验证镜像状态,请从主站点和次要站点的 Ceph monitor 节点运行以下命令:
语法
rbd mirror image status POOL_NAME/IMAGE_NAME示例
[ceph: root@mon-site-a /]# rbd mirror image status data/image1 image1: global_id: c13d8065-b33d-4cb5-b35f-127a02768e7f state: up+stopped description: remote image is non-primary service: host03.yuoosv on host03 last_update: 2021-10-06 09:13:58在这里,
up表示rbd-mirror守护进程正在运行,stopped意味着此镜像不是从另一个存储集群复制的目标。这是因为镜像是这个存储集群的主要部分。示例
[ceph: root@mon-site-b /]# rbd mirror image status data/image1 image1: global_id: c13d8065-b33d-4cb5-b35f-127a02768e7f
6.2.4. 使用命令行界面配置双向镜像 复制链接链接已复制到粘贴板!
使用双向复制时,您只能在两个存储集群之间镜像。
本节中的示例通过将主镜像作为 site-a 引用主存储集群和您将要复制镜像的辅助存储集群作为 site-b 来区分两个存储集群。这些示例中使用的池名称称为 data。
先决条件
- 至少两个正在运行的 Red Hat Ceph Storage 集群。
- 对每个存储集群的 Ceph 客户端节点的根级别访问权限。
- 具有管理员级别功能的 CephX 用户。
流程
在两个站点上登录到
cephadmshell:示例
[root@site-a ~]# cephadm shell [root@site-b ~]# cephadm shell在
site-a主集群中运行以下命令:示例
[ceph: root@site-a /]# ceph orch apply rbd-mirror --placement=host01注意nodename是您要配置镜像的主机。在
site-b上,调度在二级集群中部署 mirror 守护进程:语法
ceph orch apply rbd-mirror --placement=NODENAME示例
[ceph: root@site-b /]# ceph orch apply rbd-mirror --placement=host04注意nodename是要在二级集群中配置镜像的主机。在
site-a上的镜像上启用日志功能。对于新镜像,使用
--image-feature选项:语法
rbd create IMAGE_NAME --size MEGABYTES --pool POOL_NAME --image-feature FEATURE FEATURE示例
[ceph: root@site-a /]# rbd create image1 --size 1024 --pool data --image-feature exclusive-lock,journaling注意如果已经启用了
exclusive-lock,则使用journaling作为唯一参数,否则会返回以下错误:one or more requested features are already enabled (22) Invalid argument对于现有镜像,请使用
rbd feature enable命令:语法
rbd feature enable POOL_NAME/IMAGE_NAME FEATURE, FEATURE示例
[ceph: root@site-a /]# rbd feature enable data/image1 exclusive-lock, journaling要默认在所有新镜像中启用日志,请使用
ceph config set命令设置配置参数:示例
[ceph: root@site-a /]# ceph config set global rbd_default_features 125 [ceph: root@site-a /]# ceph config show mon.host01 rbd_default_features
在两个存储集群中选择 mirroring 模式(池模式或镜像模式)。
启用 池模式 :
语法
rbd mirror pool enable POOL_NAME MODE示例
[ceph: root@site-a /]# rbd mirror pool enable data pool [ceph: root@site-b /]# rbd mirror pool enable data pool这个示例启用对名为
data的完整池进行镜像。启用 镜像模式 :
语法
rbd mirror pool enable POOL_NAME MODE示例
[ceph: root@site-a /]# rbd mirror pool enable data image [ceph: root@site-b /]# rbd mirror pool enable data image这个示例在名为
data的池上启用镜像模式镜像。注意要在池中为特定镜像启用镜像功能,请参阅 Red Hat Ceph Storage Block Device Guide 中的 Enabling image mirroring 部分以了解更多详细信息。
验证两个站点都已成功启用了镜像:
语法
rbd mirror pool info POOL_NAME示例
[ceph: root@site-a /]# rbd mirror pool info data Mode: pool Site Name: c13d8065-b33d-4cb5-b35f-127a02768e7f Peer Sites: none [ceph: root@site-b /]# rbd mirror pool info data Mode: pool Site Name: a4c667e2-b635-47ad-b462-6faeeee78df7 Peer Sites: none
在 Ceph 客户端节点上,引导存储集群对等点。
创建 Ceph 用户帐户,并将存储集群对等注册到池:
语法
rbd mirror pool peer bootstrap create --site-name PRIMARY_LOCAL_SITE_NAME POOL_NAME > PATH_TO_BOOTSTRAP_TOKEN示例
[ceph: root@rbd-client-site-a /]# rbd mirror pool peer bootstrap create --site-name site-a data > /root/bootstrap_token_site-a注意这个示例 bootstrap 命令创建
client.rbd-mirror.site-a和client.rbd-mirror-peerCeph 用户。-
将 bootstrap 令牌文件复制到
site-b存储集群。 在
site-b存储集群中导入 bootstrap 令牌:语法
rbd mirror pool peer bootstrap import --site-name SECONDARY_LOCAL_SITE_NAME --direction rx-tx POOL_NAME PATH_TO_BOOTSTRAP_TOKEN示例
[ceph: root@rbd-client-site-b /]# rbd mirror pool peer bootstrap import --site-name site-b --direction rx-tx data /root/bootstrap_token_site-a注意--direction参数是可选的,因为在 bootstrapping peers 时双向镜像是默认设置。
验证步骤
要验证镜像状态,请从主站点和次要站点的 Ceph monitor 节点运行以下命令:
语法
rbd mirror image status POOL_NAME/IMAGE_NAME示例
[ceph: root@mon-site-a /]# rbd mirror image status data/image1 image1: global_id: a4c667e2-b635-47ad-b462-6faeeee78df7 state: up+stopped description: local image is primary service: host03.glsdbv on host03.ceph.redhat.com last_update: 2021-09-16 10:55:58 peer_sites: name: a state: up+stopped description: replaying, {"bytes_per_second":0.0,"entries_behind_primary":0,"entries_per_second":0.0,"non_primary_position":{"entry_tid":3,"object_number":3,"tag_tid":1},"primary_position":{"entry_tid":3,"object_number":3,"tag_tid":1}} last_update: 2021-09-16 10:55:50在这里,
up表示rbd-mirror守护进程正在运行,stopped意味着此镜像不是从另一个存储集群复制的目标。这是因为镜像是这个存储集群的主要部分。示例
[ceph: root@mon-site-b /]# rbd mirror image status data/image1 image1: global_id: a4c667e2-b635-47ad-b462-6faeeee78df7 state: up+replaying description: replaying, {"bytes_per_second":0.0,"entries_behind_primary":0,"entries_per_second":0.0,"non_primary_position":{"entry_tid":3,"object_number":3,"tag_tid":1},"primary_position":{"entry_tid":3,"object_number":3,"tag_tid":1}} service: host05.dtisty on host05 last_update: 2021-09-16 10:57:20 peer_sites: name: b state: up+stopped description: local image is primary last_update: 2021-09-16 10:57:28如果镜像处于
up+replaying状态,则镜像可以正常工作。在这里,up表示rbd-mirror守护进程正在运行,replaying表示此镜像是从另一个存储集群复制的目标。注意根据站点之间的连接,镜像可能需要很长时间才能同步镜像。