RBD Mirror
红帽 Ceph 存储支持两个存储集群之间的RBD mirror功能。这样,您可以将 RBD 从一个红帽 Ceph 存储集群自动复制到另一个远程集群。这种机制会利用异步方式,通过网络来镜像来源(主要)RBD 镜像和目标(次要)RBD 镜像。如果包含主要 RBD 镜像的集群变得不可用,您可以故障转移到远程集群的次要 RBD 镜像,并且重新启动使用它的应用。
从来源 RBD 镜像故障转移到镜像的 RBD 镜像时,您必须降级来源 RBD 镜像并升级目标 RBD 镜像。当镜像被降级后,它变为锁定且不可用的状态。当镜像被升级后,它变为可用状态,可以在读写模式中访问。
RBD 镜像功能要求 rbd-mirror 软件包。该软件包需要安装到能够通过网络访问从属于镜像关系的两个集群的服务器上,而且每个红帽 Ceph 存储集群必须至少配置一个镜像代理。
您可以使用 ceph-ansible 软件包中的 Ansible Playbook 部署 RBD 镜像功能。您需要将应该运行 RBD 镜像代理的主机的名称添加到清单文件中的 rbd-mirrors
主机组,并且配置 group_vars/rbd-mirrors.yml
组变量文件。
RBD 镜像功能需要参与复制流程的所有 RBD 镜像启用 journalling 功能。这需要 RBD 镜像格式 2,红帽 Ceph 存储 2.0 及更高版本支持这种格式。
访问被镜像的 RBD 镜像的客户端也需要支持这一功能。因此,使用 krbd 客户端访问的 RBD 镜像不能使用 RBD mirror功能。
受支持的镜像配置
RBD 镜像功能支持两种配置:
单向镜像或主动-被动
双向镜像或主动-主动
在单向模式中,一个集群的 RBD 镜像可以读写模式访问,远程集群中仅包含镜像。镜像代理仅在远程集群上运行。这种模式可以支持配置多个次要集群。
在双向模式中,来源与目标对(主要与次要)进行了同步。每种类型都可以在镜像关系的任一集群中运行。此模式仅允许在两个集群之间进行复制,而且必须在每个集群上配置镜像代理。
受支持的镜像模式
RBD 镜像功能可以配置为:
池模式
镜像模式
在池模式中,自动为被镜像池中创建的每一个 RBD 镜像启用镜像功能。当来源集群上的池中创建了镜像时,远程集群中会自动创建次要镜像。
在镜像模式中,必须逐一为各个 RBD 镜像启用镜像功能。在这种模式中,您必须显式选择要在两个集群之间复制的 RBD 镜像。
配置 RBD 镜像功能
在配置 RBD 镜像功能时,您需要在各个集群上配置节点,使其含有两个集群的配置文件。通常,集群节点仅配置关于其自己集群的信息,默认称为 ceph
,而这个集群的配置文件则称为 /etc/ceph/
。ceph
.conf
例如,您可以将生产集群命名为 prod
,远程备用集群命名为 backup
。您需要将 prod
集群的 /etc/ceph/ceph.conf
文件重命名为 /etc/ceph/prod.conf
,并将它复制到两个集群的所有节点。类似地,您需要将 backup
集群的 /etc/ceph/ceph.conf
文件重命名为 /etc/ceph/backup.conf
,并将它复制到两个集群的所有节点。如果您的集群配置了非默认名称,请记得其配置文件将不再是 /etc/ceph/ceph.conf
。
逐步配置 RBD mirror
下表概述了在 prod
和 backup
这两个集群之间配置镜像功能所需的步骤:
1.在 prod
集群上的 /etc/sysconfig/ceph
文件中修改 CLUSTER
参数,使其匹配 CLUSTER=prod
。
在 backup
集群上的 /etc/sysconfig/ceph
文件中修改 CLUSTER
参数,使其匹配 CLUSTER=backup
。
2.将 /etc/ceph/ceph.conf
文件从 prod
集群复制到 backup
集群,存为 /etc/ceph/prod.conf
。
将 /etc/ceph/ceph.conf
文件从 backup
集群复制到 prod
集群,存为 /etc/ceph/backup.conf
。
3.在 prod
集群上,创建专用于 RBD 镜像功能的 cephx
用户,并为其配置对需要镜像的池的访问权限。
仅双向模式:在 backup
集群上,创建专用于 RBD 镜像功能的 cephx
用户,并为其配置对需要镜像的池的访问权限。
4.复制 prod
集群的用户的 keyring(/etc/ceph/ceph.client.mirror.keyring
复制到 backup
集群,存为 /etc/ceph/prod.client.mirror.keyring
)。
仅双向模式:复制 backup
集群的用户的 keyring(/etc/ceph/ceph.client.mirror.keyring
复制到 prod
集群,存为 /etc/ceph/backup.client.mirror.keyring
)。
5.在 backup
集群上安装 rbd-mirror 软件包。
仅双向模式:在 prod
集群上安装 rbd-mirror 软件包。
6.在 backup
集群上,配置、启用并启动 rbd-mirror
服务。
仅双向模式:在 prod
集群上,配置、启用并启动 rbd-mirror
服务。
7.在两个集群上,为所需的池启用 pool
或 image
模式的 RBD 镜像功能。
8.在 backup
集群上,将 prod
集群添加为对等集群。
仅双向模式:在 prod
集群上,将 backup
集群添加为对等集群。
如果配置单向 RBD 镜像功能,您不需要将配置和 keyring 文件从生产集群复制到远程集群。不过,它可以更轻松地管理被镜像的配置,因为在这之后,您可以从两个集群运行以任一集群为目标的命令。
单向池模式示例分步说明
本例中有两个集群 prod
和 bup
,已更新了其中的 /etc/sysconfig/ceph
文件,也交叉复制了 Ceph 配置和 keyring 文件。由于这是测试,本例中将 client.admin
用于各个集群,而要镜像的是默认池 rbd
。在开始这个过程之前,每个集群中必须存在用于存储 RBD 镜像的池的名称并且名称完全相同。
[ceph@server ~]$
yum -y install rbd-mirror[ceph@server ~]$
systemctl enable ceph-rbd-mirror.target[ceph@server ~]$
systemctl enable ceph-rbd-mirror@admin.service[ceph@server ~]$
systemctl start ceph-rbd-mirror@admin.service[ceph@server ~]$
rbd mirror pool enable rbd pool --cluster bup[ceph@server ~]$
rbd mirror pool enable rbd pool --cluster prod[ceph@server ~]$
rbd mirror pool status rbd --cluster bup
health: OK
images: 0 total[ceph@server ~]$
rbd mirror pool status rbd --cluster prod
health: OK
images: 0 total[ceph@server ~]$
rbd mirror pool info rbd --cluster bup
Mode: pool
Peers: none[ceph@server ~]$
rbd mirror pool info rbd --cluster prod
Mode: pool
Peers: none[ceph@server ~]$
rbd mirror pool peer add rbd client.admin@prod --cluster bup
2ece79b9-34b7-42fe-add1-ea9d6a10deb7[ceph@server ~]$
rbd mirror pool status rbd --cluster bup
Mode: pool
Peers:
UUID: NAME CLIENT
2ece79b9-34b7-42fe-add1-ea9d6a10deb7 prod client.admin[ceph@server ~]$
rbd mirror pool status rbd --cluster prod
Mode: pool
Peers: none[ceph@server ~]$
rbd create rbd/prod1 --size=128M \>
--image-feature=exclusive-lock,journaling --cluster prod[ceph@server ~]$
rbd -p rbd ls --cluster prod
prod1[ceph@server ~]$
rbd -p rbd ls --cluster bup
prod1[ceph@server ~]$
rbd image status rbd/prod1 --cluster prod
prod1:
global_id: b15a1331-d935-4fc1-b6b3-c5e8e4518a5e
state: down+unknown
description: status not found
last_update: 1969-12-31 16:00:00[ceph@server ~]$
rbd image status rbd/prod1 --cluster bup
prod1:
global_id: b15a1331-d935-4fc1-b6b3-c5e8e4518a5e
state: up+replaying
description: replaying, master_position=[object_number=3, tag_tid=1, entry_tid=3], mirror_position=[object_number=3, tag_tid=1, entry_tid=3], entries_behind_master=0
last_update: 2017-06-22 15:08:21
在单向模式中,来源集群不知道复制的状态。只有 RBD 镜像代理(在目标集群中)才会更新状态信息。
如果使用单向镜像功能,那么在故障转移到次要镜像后,没有办法自动故障恢复到原始的主要 RBD 镜像。这是因为,生产集群上没有运行 RBD 镜像代理。简化这一过程的唯一办法是使用双向镜像模式。
故障转移过程
如果主要 RBD 镜像变得不可用,您可以使用下列步骤来启用对次要 RBD 镜像的访问:
停止访问主要 RBD 镜像。也就是说,停止使用该镜像的所有应用和虚拟机。
使用 rbd mirror image demote
pool-name/image-name
命令来降级主要 RBD 镜像。使用 rbd mirror image promote
pool-name/image-name
命令来升级次要 RBD 镜像。恢复访问 RBD 镜像。重新启动应用和虚拟机。
RBD 镜像功能命令参考
红帽 Ceph 存储支持使用 rbd 命令进行 RBD 镜像:
RBD 镜像功能命令 | |
---|---|
启用 RBD 镜像功能 | rbd mirror pool enable |
禁用 RBD 镜像功能 | rbd mirror pool disable |
添加对等集群 | rbd mirror pool peer add |
显示镜像信息 | rbd mirror pool info |
删除对等集群 | rbd mirror pool peer remove |
启用某项功能 | rbd feature enable |
禁用某项功能 | rbd feature disable |
启用 RBD 镜像的镜像功能(镜像模式) | rbd mirror image enable |
禁用 RBD 镜像的镜像功能(镜像模式) | rbd mirror image disable |
降级主要副本 | rbd mirror image demote |
降级池中的所有主要副本 | rbd mirror pool demote |
升级次要副本 | rbd mirror image promote |
升级池中的所有次要副本 | rbd mirror pool promote |
强制重新同步 | rbd mirror image resync |
RBD 镜像的镜像状态 | rbd mirror image status |
池的镜像状态 | rbd mirror pool status |
RBD 镜像日志命令 | rbd journal info rbd journal status |
RBD 镜像日志检查 | rbd journal inspect |
在损坏时重置和清理日志 | rbd journal reset |