注意
本文档适用于 Ceph 开发版本。
RBD 镜像
RBD 图像可以在两个 Ceph 集群之间异步镜像。此功能以两种模式提供:
基于日志: 此模式使用 RBD 日志记录图像功能,以确保集群之间的点时间、崩溃一致性复制。对 RBD 图像的每次写入都首先记录到相关的日志中,然后再修改实际图像。远程集群将从此相关日志中读取并重播更新到其本地图像副本。由于对 RBD 图像的每次写入都会导致对 Ceph 集群写入两次,因此在使用 RBD 日志记录图像功能时,写入延迟预计会接近翻倍。
基于快照: 此模式使用定期计划或手动创建的 RBD 图像镜像快照,在集群之间复制崩溃一致的 RBD 图像。远程集群将确定两个镜像快照之间的任何数据或元数据更新,并将增量复制到其本地图像副本。在 RBD 图像功能的帮助下,可以快速确定更新的数据块,而无需扫描整个 RBD 图像。由于此模式不如日志记录细粒度,因此在故障转移场景中,在两个快照之间的完整增量需要在使用之前同步。任何部分应用的增量集将在故障转移时回滚。
fast-diff
image feature, updated data blocks can be quickly determined without the need to scan the full RBD image. Since this mode is not as fine-grained as journaling, the complete delta between two snapshots will need to be synced prior to use during a failover scenario. Any partially applied set of deltas will be rolled back at the moment of failover.
Note
基于日志的镜像需要 Ceph Jewel 发布或更高版本;基于快照的镜像需要 Ceph Octopus 发布或更高版本。
Note
本文档中“命名空间”一词的所有实例均指 RBD 命名空间。
镜像在同伴集群中按池配置,并且可以在池或命名空间内的命名空间或特定图像子集上配置。在使用基于日志的镜像时,您还可以镜像给定池或命名空间内的所有图像。镜像使用以下命令配置:rbd
命令。Therbd-mirror
守护进程负责从远程同伴集群拉取图像更新并将其应用于本地集群内的图像。
根据所需的复制需求,RBD 镜像可以配置为单向或双向复制:
单向复制: 当数据仅从主集群镜像到次级集群时,守护进程仅在次级集群上运行。
rbd-mirror
daemon runs only on the secondary cluster.双向复制: 当数据从集群的一个主图像镜像到另一个集群的非主图像(反之亦然)时,守护进程在两个集群上运行。
rbd-mirror
daemon runs on both clusters.
重要
每个守护进程实例必须能够同时连接到本地和远程 Ceph 集群(即所有监控器和 OSD 主机)。此外,网络必须在两个数据中心之间具有足够的带宽来处理镜像工作负载。rbd-mirror
daemon must be able to
connect to both the local and remote Ceph clusters simultaneously (i.e.
all monitor and OSD hosts). Additionally, the network must have sufficient
bandwidth between the two data centers to handle mirroring workload.
池配置
以下步骤演示了如何使用rbd
命令执行基本的行政管理任务来配置镜像。镜像按池配置。
这些池配置步骤应在两个同伴集群上执行。这些步骤假设两个集群,分别命名为“site-a”和“site-b”,可以通过单个主机访问,以便于理解。
请参阅rbdmanpage 以获取有关如何连接到不同 Ceph 集群的更多详细信息。
Note
以下示例中的集群名称对应于同名的 Ceph 配置文件(例如 /etc/ceph/site-b.conf)。请参阅ceph-conf文档,了解如何配置多个集群。请注意rbd-mirror
并不firefly 发布。Firefly 将延迟至少另一个冲刺,以便我们可以对新代码进行一些操作经验,并进行一些额外的测试,然后再承诺长期支持。需要源集群和目标集群具有唯一的内部名称;两者都可以并且应该称呼自己ceph
。存储在该目录层次结构中的数量。需要本地和远程集群的配置可以任意命名,并将守护进程容器化是维护它们的一种策略rbd-mirror
needs for local and remote clusters
can be named arbitrarily, and containerizing the daemon is one strategy
for maintaining them outside of /etc/ceph
以避免混淆。
启用镜像
要在具有rbd
的命名空间上启用镜像,请使用命名空间规范和镜像模式,以及可选的远程命名空间名称的mirror pool enable
子命令:
rbd mirror pool enable [--site-name {local-site-name}] {pool-name} {mode}
镜像模式可以是image
, pool
或init-only
:
image: 当配置为
image
模式时,必须显式启用镜像通过对于池的默认命名空间中的每个预期图像。其他命名空间不受影响,并且必须单独配置configured separately.pool: 当配置为
pool
模式时,池的默认命名空间中具有日志记录功能的图像都将被镜像。其他命名空间不受影响,并且必须单独配置configured separately.init-only: 当配置为
init-only
模式时,池的默认命名空间中的图像不会镜像,但其他命名空间仍然可以配置。这需要允许某些其他命名空间镜像到远程池的默认命名空间,但也可以单独使用。
例如:
$ rbd --cluster site-a mirror pool enable --site-name site-a image-pool image
$ rbd --cluster site-b mirror pool enable --site-name site-b image-pool image
创建或导入新引导令牌时也可以指定站点名称。.
站点名称稍后可以使用相同的mirror pool enable
子命令更改,但请注意,本地站点名称和远程集群使用的相应站点名称通常必须匹配。
禁用镜像
要在具有rbd
使缓存文件失效(丢弃),请指定mirror pool disable
命令和池名称上禁用镜像:
rbd mirror pool disable {pool-name}
以这种方式在池上禁用镜像时,镜像也将被禁用在任何图像(在池中)上,这些图像之前已显式启用镜像。
例如:
$ rbd --cluster site-a mirror pool disable image-pool
$ rbd --cluster site-b mirror pool disable image-pool
引导对等体
为了使rbd-mirror
守护进程能够发现其同伴集群,同伴必须注册,并且必须创建用户帐户。rbd
和mirror pool peer bootstrap create
和mirror pool peer bootstrap import
commands.
要手动创建新的引导令牌,使用rbd
的命名空间上启用镜像,请使用命名空间规范和镜像模式,以及可选的远程命名空间名称的mirror pool peer bootstrap create
子命令、池名称和一个可选的友好站点名称来描述本地集群:
rbd mirror pool peer bootstrap create [--site-name {local-site-name}] {pool-name}
的输出mirror pool peer bootstrap create
将是一个应该提供给mirror pool peer bootstrap import
命令的令牌。例如,在 site-a 上:
$ rbd --cluster site-a mirror pool peer bootstrap create --site-name site-a image-pool
eyJmc2lkIjoiOWY1MjgyZGItYjg5OS00NTk2LTgwOTgtMzIwYzFmYzM5NmYzIiwiY2xpZW50X2lkIjoicmJkLW1pcnJvci1wZWVyIiwia2V5IjoiQVFBUnczOWQwdkhvQmhBQVlMM1I4RmR5dHNJQU50bkFTZ0lOTVE9PSIsIm1vbl9ob3N0IjoiW3YyOjE5Mi4xNjguMS4zOjY4MjAsdjE6MTkyLjE2OC4xLjM6NjgyMV0ifQ==
要手动导入由其他集群创建的引导令牌,使用rbd
,请指定mirror pool peer bootstrap import
命令、池名称、创建的令牌的文件路径(或“-”从标准输入读取),以及可选的友好站点名称来描述本地集群和镜像方向(默认为 rx-tx 用于双向镜像,也可以设置为 rx-only 用于单向镜像):
rbd mirror pool peer bootstrap import [--site-name {local-site-name}] [--direction {rx-only or rx-tx}] {pool-name} {token-path}
例如,在 site-b 上:
$ cat <<EOF > token
eyJmc2lkIjoiOWY1MjgyZGItYjg5OS00NTk2LTgwOTgtMzIwYzFmYzM5NmYzIiwiY2xpZW50X2lkIjoicmJkLW1pcnJvci1wZWVyIiwia2V5IjoiQVFBUnczOWQwdkhvQmhBQVlMM1I4RmR5dHNJQU50bkFTZ0lOTVE9PSIsIm1vbl9ob3N0IjoiW3YyOjE5Mi4xNjguMS4zOjY4MjAsdjE6MTkyLjE2OC4xLjM6NjgyMV0ifQ==
EOF
$ rbd --cluster site-b mirror pool peer bootstrap import --site-name site-b image-pool token
手动手动添加集群同伴
如果需要,或者如果当前安装的 Ceph 版本中没有可用的上述引导命令,则可以手动指定集群同伴。
远程rbd-mirror
守护进程需要访问本地集群以执行镜像。应创建一个新的本地 Ceph 用户供远程守护进程使用。要创建 Ceph 用户,其中包含ceph
在使用部署工具(如auth get-or-create
命令,用户名、监控器权限和 OSD 权限:
$ ceph auth get-or-create client.rbd-mirror-peer mon 'profile rbd-mirror-peer' osd 'profile rbd'
生成的密钥环应复制到其他集群的rbd-mirror
守护进程主机,如果不使用以下描述的 Ceph 监控器存储。config-key
store described below.
要手动添加具有rbd
使缓存文件失效(丢弃),请指定mirror pool peer add
命令的镜像同伴 Ceph 集群,请指定池名称和集群规范:
rbd mirror pool peer add {pool-name} {client-name}@{cluster-name}
例如:
$ rbd --cluster site-a mirror pool peer add image-pool client.rbd-mirror-peer@site-b
$ rbd --cluster site-b mirror pool peer add image-pool client.rbd-mirror-peer@site-a
默认情况下,rbd-mirror
守护进程需要访问位于/etc/ceph/{cluster-name}.conf
的 Ceph 配置文件,该文件提供了同伴集群监控器的地址,此外还有一个位于默认或配置的密钥环搜索路径中的密钥环{client-name}
located in the default or configured keyring search paths
(e.g. /etc/ceph/{cluster-name}.{client-name}.keyring
).
或者,同伴集群的监控器和/或客户端密钥可以安全地存储在本地 Ceph 监控器config-key
存储中。要在添加镜像同伴时指定同伴集群连接属性,请使用--remote-mon-host
和--remote-key-file
选项。例如:
$ cat <<EOF > remote-key-file
AQAeuZdbMMoBChAAcj++/XUxNOLFaWdtTREEsw==
EOF
$ rbd --cluster site-a mirror pool peer add image-pool client.rbd-mirror-peer@site-b --remote-mon-host 192.168.1.1,192.168.1.2 --remote-key-file remote-key-file
$ rbd --cluster site-a mirror pool info image-pool --all
Mode: pool
Peers:
UUID NAME CLIENT MON_HOST KEY
587b08db-3d33-4f32-8af8-421e77abb081 site-b client.rbd-mirror-peer 192.168.1.1,192.168.1.2 AQAeuZdbMMoBChAAcj++/XUxNOLFaWdtTREEsw==
移除集群同伴
要使用rbd
使缓存文件失效(丢弃),请指定mirror pool peer remove
命令移除镜像同伴 Ceph 集群,请指定池名称和同伴 UUID(可从rbd mirror pool info
命令获取):
rbd mirror pool peer remove {pool-name} {peer-uuid}
例如:
$ rbd --cluster site-a mirror pool peer remove image-pool 55672766-c02b-4729-8567-f13a66893445
$ rbd --cluster site-b mirror pool peer remove image-pool 60c0e299-b38f-4234-91f6-eed0a367be08
数据池
在目标集群中创建图像时,rbd-mirror
选择数据池如下:
如果目标集群配置了默认数据池(使用
rbd_default_data_pool
配置选项),则将使用它。否则,如果源图像使用单独的数据池,并且目标集群上存在同名池,则将使用该池。
如果以上都不成立,则不会设置数据池。
命名空间配置
镜像可以在池的非默认命名空间中启用,而与默认命名空间无关。必须在事先配置池镜像之前配置命名空间。''
或""
).
启用镜像
要在具有rbd
的命名空间上启用镜像,请使用命名空间规范和镜像模式,以及可选的远程命名空间名称的mirror pool enable
子命令:
rbd mirror pool enable {pool-name}/{local-namespace-name} {mode} [--remote-namespace {remote-namespace-name}]
镜像模式可以是image
或pool
:
image: 当配置为
image
模式时,必须显式启用镜像通过对于命名空间中的每个预期图像。pool: 当配置为
pool
模式时,命名空间中的具有日志记录功能的图像都将被镜像。
例如:
$ rbd --cluster site-a mirror pool enable image-pool/namespace-a image --remote-namespace namespace-b
$ rbd --cluster site-b mirror pool enable image-pool/namespace-b image --remote-namespace namespace-a
这将在image-pool/namespace-a
集群site-a
和image-pool/namespace-b
集群site-b
之间设置图像模式镜像。--remote-namespace
选项,则命名空间将镜像到远程池中具有相同名称的命名空间。
之间设置池模式镜像image-pool
(默认命名空间) 和site-a
和image-pool/namespace-c
集群site-b
:
$ rbd --cluster site-a mirror pool enable image-pool pool --remote-namespace namespace-c
$ rbd --cluster site-b mirror pool enable image-pool init-only
$ rbd --cluster site-b mirror pool enable image-pool/namespace-c pool --remote-namespace ""
之间设置池模式镜像image-pool
(默认命名空间) 和site-a
和image-pool/namespace-d
集群site-b
之间,并同时设置image-pool
(默认命名空间)site-b
和image-pool/namespace-e
集群site-a
:
$ rbd --cluster site-a mirror pool enable image-pool pool --remote-namespace namespace-d
$ rbd --cluster site-a mirror pool enable image-pool/namespace-e image --remote-namespace ""
$ rbd --cluster site-b mirror pool enable image-pool image --remote-namespace namespace-e
$ rbd --cluster site-b mirror pool enable image-pool/namespace-d pool --remote-namespace ""
禁用镜像
要在具有rbd
使缓存文件失效(丢弃),请指定mirror pool disable
命令和命名空间规范的命名空间上禁用镜像:
rbd mirror pool disable {pool-name}/{namespace-name}
当配置为image
模式时,命名空间中的任何已启用镜像必须在禁用命名空间镜像之前显式禁用。
例如:
$ rbd --cluster site-a mirror pool disable image-pool/namespace-a
$ rbd --cluster site-b mirror pool disable image-pool/namespace-b
图像配置
与池配置不同,图像配置只需针对单个镜像同伴 Ceph 集群执行。
镜像的 RBD 图像指定为主图像或非主图像。这是图像的属性,而不是池的属性。指定为非主图像的图像不能被修改。
当在图像上首次启用镜像时(如果池镜像模式为pool
并且图像具有日志记录图像功能,则隐式启用,或者通过 by the
rbd
命令显式启用镜像,如果池镜像模式为image
).
启用图像镜像
如果图像的池配置为image
模式,则必须显式为池中的每个图像启用镜像。要使用rbd
使缓存文件失效(丢弃),请指定mirror image enable
命令以及池、图像名称和模式启用镜像:
rbd mirror image enable {pool-name}/{image-name} {mode}
镜像图像模式可以是journal
或snapshot
:
日志(默认):当配置为
journal
模式时,镜像将利用 RBD 日志记录图像功能来复制图像内容。如果图像尚未启用 RBD 日志记录图像功能,它将自动启用。快照: 当配置为
snapshot
模式时,镜像将利用 RBD 图像镜像快照来复制图像内容。启用后,将自动创建初始镜像快照。可以创建额外的 RBD 图像镜像快照通过rbd
command.
例如:
$ rbd --cluster site-a mirror image enable image-pool/image-1 snapshot
$ rbd --cluster site-a mirror image enable image-pool/image-2 journal
启用图像日志记录功能
RBD 基于日志的镜像使用 RBD 图像日志记录功能,以确保复制的图像始终保持崩溃一致性。在使用image
镜像模式时,当在图像上启用镜像时,日志记录功能将自动启用。在使用pool
镜像模式时,在将图像镜像到同伴集群之前,必须启用 RBD 图像日志记录功能。该功能可以在图像创建时通过提供--image-feature exclusive-lock,journaling
。此参数必须是 CIDR 表示法的子网(例如rbd
command.
启用。或者,日志记录功能可以动态地启用于现有的 RBD 图像。要使用rbd
请求图像重新同步,请指定feature enable
命令、池和图像名称以及功能名称:
rbd feature enable {pool-name}/{image-name} {feature-name}
例如:
$ rbd --cluster site-a feature enable image-pool/image-1 journaling
Note
日志记录功能依赖于排他锁功能。如果尚未启用排他锁功能,则应在启用日志记录功能之前启用它。
提示
您可以通过在您的 Ceph 配置文件中添加rbd default features = 125
来默认启用所有新图像的日志记录。
提示
rbd-mirror
调整器默认设置为适合镜像整个池的值。当使用rbd-mirror
在集群之间迁移单个卷时,通过在本地或集中配置的rbd_journal_max_payload_bytes=8388608
可以通过设置[client]
配置部分中设置rbd-mirror
在目标集群上呈现大量的写入工作负载:在迁移期间密切监控监控器集群性能,并在运行多个并行迁移之前仔细测试。
创建图像镜像快照
在使用基于快照的镜像时,每当希望镜像 RBD 图像更改的内容时,都需要创建镜像快照。要使用rbd
使缓存文件失效(丢弃),请指定mirror image snapshot
命令和池和图像名称:
rbd mirror image snapshot {pool-name}/{image-name}
例如:
$ rbd --cluster site-a mirror image snapshot image-pool/image-1
默认情况下,每个图像将创建最多5
镜像快照。如果达到限制,则自动删除最新的镜像快照。可以通过rbd_mirroring_max_mirroring_snapshots
配置选项覆盖此限制。此外,当图像被删除或镜像被禁用时,镜像快照将自动删除。
如果定义了镜像快照计划,则镜像快照也可以按定期自动创建。镜像快照可以在全局、按池或按图像级别进行计划。可以在任何级别定义多个镜像快照计划,但只有与单个镜像图像最匹配的快照计划才会运行。
要使用rbd
使缓存文件失效(丢弃),请指定mirror snapshot schedule add
命令创建镜像快照计划,请指定可选的池或图像名称;间隔;以及可选的开始时间:
rbd mirror snapshot schedule add [--pool {pool-name}] [--image {image-name}] {interval} [{start-time}]
The interval
可以使用d
, h
,
m
后缀分别指定为天、小时或分钟。可选的start-time
可以使用 ISO 8601 时间格式指定。例如:
$ rbd --cluster site-a mirror snapshot schedule add --pool image-pool 24h 14:00:00-05:00
$ rbd --cluster site-a mirror snapshot schedule add --pool image-pool --image image1 6h
要使用rbd
使缓存文件失效(丢弃),请指定mirror snapshot schedule remove
命令删除与相应的add
计划命令匹配的选项的镜像快照计划。
要使用rbd
使缓存文件失效(丢弃),请指定mirror snapshot schedule ls
命令列出特定级别(全局、池或图像)的所有快照计划,请指定可选的池或图像名称。此外,可以指定--recursive
选项以列出指定级别和以下级别的所有计划。例如:
$ rbd --cluster site-a mirror snapshot schedule ls --pool image-pool --recursive
POOL NAMESPACE IMAGE SCHEDULE
image-pool - - every 1d starting at 14:00:00-05:00
image-pool image1 every 6h
要使用rbd
使缓存文件失效(丢弃),请指定mirror snapshot schedule status
命令查看基于快照的镜像 RBD 图像下次创建快照的状态,请指定可选的池或图像名称:
rbd mirror snapshot schedule status [--pool {pool-name}] [--image {image-name}]
例如:
$ rbd --cluster site-a mirror snapshot schedule status
SCHEDULE TIME IMAGE
2020-02-26 18:00:00 image-pool/image1
要使用
To disable mirroring for a specific image with rbd
使缓存文件失效(丢弃),请指定mirror image disable
命令和池和图像名称:
rbd mirror image disable {pool-name}/{image-name}
例如:
$ rbd --cluster site-a mirror image disable image-pool/image-1
图像提升和降级
在需要将主指定移动到同伴 Ceph 集群中的图像的故障转移场景中,应停止对主图像的访问(例如,关闭 VM 或从 VM 中移除相关驱动器),降级当前主图像,提升新主图像,并在备用集群上恢复对图像的访问。
Note
RBD 仅提供必要的工具来促进图像的有序故障转移。需要一个外部机制来协调完整的故障转移过程(例如,在降级之前关闭图像)。
要使用rbd
使缓存文件失效(丢弃),请指定mirror image demote
命令和池和图像名称:
rbd mirror image demote {pool-name}/{image-name}
例如:
$ rbd --cluster site-a mirror image demote image-pool/image-1
要使用rbd
请求图像重新同步,请指定mirror pool demote
命令和池名称:
rbd mirror pool demote {pool-name}
例如:
$ rbd --cluster site-a mirror pool demote image-pool
要使用rbd
使缓存文件失效(丢弃),请指定mirror image promote
命令和池和图像名称:
rbd mirror image promote [--force] {pool-name}/{image-name}
例如:
$ rbd --cluster site-b mirror image promote image-pool/image-1
要使用rbd
请求图像重新同步,请指定mirror pool promote
命令和池名称:
rbd mirror pool promote [--force] {pool-name}
例如:
$ rbd --cluster site-a mirror pool promote image-pool
提示
由于主 / 非主状态是按图像划分的,因此有可能两个集群分割 IO 负载并准备故障转移 / 故障恢复。
Note
提升可以使用--force
选项强制执行。当降级无法传播到同伴 Ceph 集群时(例如,Ceph 集群故障、通信中断)需要强制提升。这将导致两个同伴之间的分叉脑情况,并且图像直到发出强制重新同步命令才会同步。
强制图像重新同步
如果rbd-mirror
守护进程检测到分叉脑事件,它将不会尝试镜像受影响的图像,直到问题解决。要恢复镜像,首先降级确定已过时的图像,然后请求与主图像重新同步。要使用 determined to be out-of-date and then request a
resync to the primary image. To request an image resync with rbd
请求图像重新同步,请指定mirror image resync
命令和池和图像名称:
rbd mirror image resync {pool-name}/{image-name}
例如:
$ rbd mirror image resync image-pool/image-1
Note
The rbd
命令仅将图像标记为需要重新同步。本地集群的rbd-mirror
守护进程进程负责异步执行重新同步。
镜像状态
每个主镜像的同伴集群复制状态都存储。此状态可以使用mirror image status
和mirror pool status
commands.
请求镜像图像状态,请使用rbd
使缓存文件失效(丢弃),请指定mirror image status
命令和池和图像名称:
rbd mirror image status {pool-name}/{image-name}
例如:
$ rbd mirror image status image-pool/image-1
请求镜像池摘要状态,请使用rbd
使缓存文件失效(丢弃),请指定mirror pool status
命令和池名称:
rbd mirror pool status {pool-name}
例如:
$ rbd mirror pool status image-pool
Note
添加--verbose
。此参数必须是 CIDR 表示法的子网(例如mirror pool status
命令将此外输出池中每个镜像的状态详细信息。
rbd-mirror 守护进程
两个rbd-mirror
守护进程负责监视远程、同伴集群上的图像日志并重播日志事件。RBD 图像日志记录功能按发生顺序记录图像的所有修改。这确保了远程图像的崩溃一致性镜像可以在本地获得。
The rbd-mirror
守护进程可在可选的rbd-mirror
发行包中提供。
重要
每个rbd-mirror
守护进程需要能够同时连接到两个集群。
警告
预 Luminous 发布:每个 Ceph 集群只运行一个rbd-mirror
守护进程。
每个rbd-mirror
守护进程应使用唯一的 Ceph 用户 ID。要创建 Ceph 用户,其中包含ceph
在使用部署工具(如auth get-or-create
命令,用户名、监控器权限和 OSD 权限:
ceph auth get-or-create client.rbd-mirror.{unique id} mon 'profile rbd-mirror' osd 'profile rbd'
The rbd-mirror
守护进程可以通过systemd
管理,通过指定用户 ID 作为守护进程实例:
systemctl enable ceph-rbd-mirror@rbd-mirror.{unique id}
The rbd-mirror
也可以在前景中运行rbd-mirror
command:
rbd-mirror -f --log-file={log_path}
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.