一、配置 RBD 块设备镜像
RHCS支持在两个ceph集群间RBD镜像同步,这允许您自动将RBD镜像从一个RHCS集群复制到另一个远程集群(可以实现跨集群自动复制备份数据),该机制使用网络实现异步通信,将源(主)RBD镜像 镜像到目标(辅助)RBD镜像当发生故障时,你需要将源RBD降级,并把目标RBD升级 ;RBD镜像同步需要有 rbd-mirror进程,rbd-mirror进程从远程主机拉取数据并应用到本地存储镜像。
RBD Mirroring 支持两种配置:(RBD镜像)
RBD Mirroring 是 Ceph 提供的一种功能,用于实现 RADOS Block Device (RBD) 镜像的高可用性和灾难恢复。它通过在两个或多个 Ceph 集群之间同步 RBD 镜像的数据,确保数据的高可用性和一致性。RBD Mirroring 支持两种主要的工作模式:单向镜像(One-way Mirroring) 和 双向镜像(Two-way Mirroring)。
-
One-way mirroring or active-passive(单向镜像 或 主-备 镜像)
-
Two-way mirroring or active-active(双向镜像 或 主-主 镜像)

在单向模式下,一个集群的RBD镜像可以以读写模式使用,而远程集群(备份集群)仅包含镜像副本。镜像代理仅在远程集群上运行。此模式支持配置多个次要集群。
概念
- 单向镜像:数据从主集群(Active Cluster)流向备集群(Passive Cluster),备集群仅作为备份,不提供读写服务。
- 主-备架构:主集群是活动的,负责处理所有的读写请求;备集群是被动 standby 状态,仅在主集群故障时接管服务。
工作原理
- 主集群上的 RBD 镜像是可读写的,用户可以直接访问。
- 备集群上的 RBD 镜像是只读的,仅用于同步主集群的数据。
- 数据同步是单向的:主集群的数据会实时或定期同步到备集群。
应用场景
- 灾难恢复:在主集群发生故障时,备集群可以接管服务,确保数据的连续性和可用性。
- 远程备份:将数据备份到远程位置,防止主集群的数据丢失。
优点
- 实现简单,配置和管理容易。
- 适用于对性能要求较高的场景,因为备集群不参与读写操作。
缺点
- 资源浪费:备集群在正常情况下处于闲置状态,资源利用率低。
- 切换延迟:从主集群故障到备集群接管服务,可能存在短暂的延迟。

在双向模式下,Ceph同步源和目标对(主和从)。该模式只允许两个集群之间的复制,并且必须在每个集群上配置镜像代理。
概念
- 双向镜像:数据在两个集群之间双向同步,每个集群都可以独立处理读写请求。
- 主-主架构:两个集群都是活动的,互相备份并处理各自的读写请求。
工作原理
- 两个集群的 RBD 镜像都是可读写的。
- 数据在两个集群之间双向同步,确保数据一致性。
- 每个集群都可以独立处理用户的读写请求。
应用场景
- 跨区域高可用性:在两个地理位置不同的集群之间同步数据,确保就近访问和高可用性。
- 负载均衡:通过分配用户到不同的集群,实现负载均衡。
优点
- 更高的资源利用率:两个集群都处于活动状态,资源利用率高。
- 更快的故障恢复:任何一个集群故障,另一个集群可以立即接管服务。
- 就近访问:用户可以从离自己更近的集群访问数据,减少延迟。
缺点
- 配置复杂:双向同步需要更复杂的配置和管理。
- 一致性挑战:确保两个集群之间的数据一致性需要更强的同步机制。
|
特性 |
One-way Mirroring (Active-Passive) |
Two-way Mirroring (Active-Active) |
|
数据流向 |
单向(主 -> 备) |
双向(主 主) |
|
集群状态 |
主集群活动,备集群 standby |
两个集群都活动 |
|
资源利用率 |
低(备集群闲置) |
高(两个集群都使用) |
|
配置复杂度 |
简单 |
复杂 |
|
应用场景 |
灾难恢复、远程备份 |
跨区域高可用性、负载均衡 |
|
切换延迟 |
存在切换延迟 |
无切换延迟 |
|
一致性挑战 |
较低 |
较高 |
- Pool Mode: 自动同步存储池中的所有镜像
- Image Mode: 自动同步存储池中的特定镜像
Lab: 配置 RBD 数据同步备份采用主备模式
执行脚本,并检查实验环境是否正确
[root@foundation0 ~]# ssh student@workstation
[student@workstation ~]$ lab start mirror-mirrors
打开一个命令终端登录serverc
[root@foundation0 ~]# ssh root@serverc
[root@serverc ~]# cephadm shell
[ceph: root@serverc /]# ceph -s
打开另一个命令终端登录serverf(单节点ceph存储)
[root@foundation0 ~]# ssh root@serverf
[root@serverf ~]# cephadm shell
[ceph: root@serverf /]# ceph -s
1. 配置两个集群间存储池数据的同步备份
在备份集群上面配置一个存储池从生产服务器同步数据到备份服务器。使用 pool-mode 模式实现两个集群间存储池数据的同步备份。
1)在两个集群中创建存储池
在生产集群上面创建一个名称为rbd的存储池,设置32个PG。
[ceph: root@serverc /]# ceph osd pool create rbd 32 32
[ceph: root@serverc /]# ceph osd pool application enable rbd rbd
[ceph: root@serverc /]# ceph osd lspools
[ceph: root@serverf /]# ceph osd pool create rbd 32 32
[ceph: root@serverf /]# ceph osd pool application enable rbd rbd
[ceph: root@serverf /]# ceph osd lspools
2)创建并配置镜像
在生产集群中,创建一个测试RBD镜像并进行验证。
数据同步是基于日志,必须打开镜像的日志功能
[ceph: root@serverc /]# rbd create image1 --size 1024 --pool rbd --image-feature=exclusive-lock,journaling
[ceph: root@serverc /]# rbd -p rbd ls
[ceph: root@serverc /]# rbd info image1

3)在主集群中启用 RBD Mirroring
在rbd池上启用池模式(pool mode)镜像,并进行验证。
[ceph: root@serverc /]# rbd mirror pool enable rbd pool //启用镜像池的 Mirroring
[ceph: root@serverc /]# rbd info image1
[ceph: root@serverc /]# exit

4)生成并交换 Bootstrap Token
为了在两个集群之间建立 Mirroring 连接,需要生成一个 Bootstrap Token,并将其从一个集群提供给另一个集群。在主集群中生成一个Bootstrap Token(同步令牌),定义集群名称为 prod
-
命令:rbd mirror pool peer bootstrap create --site-name primary rbd > /root/bootstrap_token_primary
[root@serverc ~]# mkdir /root/mirror
[root@serverc ~]# cephadm shell --mount /root/mirror
[ceph: root@serverc /]# rbd mirror pool peer bootstrap create --site-name prod rbd > /mnt/bootstrap_token_prod
这是生成一个 bootstrap token,用于在集群之间建立 RBD Mirroring 的连接。
--site-name prod:指定当前集群的名称为 prod。
rbd:指定存储池名称。
> /mnt/bootstrap_token_prod:将生成的 token 输出到容器内的 /mnt/bootstrap_token_prod 文件中。
退出 cephadm shell 到客户端主机系统。将引导令牌文件复制到/root目录下的备份存储集群中。
[ceph: root@serverc /]# exit
[root@serverc ~]# cat /root/mirror/bootstrap_token_prod
[root@serverc ~]# rsync -avP /root/mirror/bootstrap_token_prod serverf:/root/

2. 部署rbd-mirror进程
1)部署一个新的rbd-mirror进程
部署一个新的rbd-mirror进程,通过--placement参数设置该进程应该被放置在server主机
[ceph: root@serverf /]# exit
[root@serverf ~]# cephadm shell --mount /root/bootstrap_token_prod
[ceph: root@serverf /]# ceph orch apply rbd-mirror --placement=serverf.lab.example.com
[ceph: root@serverf /]# ceph orch ls | grep rbd-mirror
rbd-mirror 1/1 0s ago 20s serverf.lab.example.com
导入位于/mnt/bootstrap_token_prod文件中的引导标记。将备份集群命名为“bup”。
[ceph: root@serverf /]# rbd mirror pool peer bootstrap import --site-name bup --direction rx-only rbd /mnt/bootstrap_token_prod
Important:Ignore the known error containing the following text: auth: unable to find a keyring on ...
重要:忽略包含以下文本的已知错误:auth:无法找到keyring on…
[ceph: root@serverf /]# rbd -p rbd ls //确认镜像已经同步
image1
[ceph: root@serverf /]# rbd mirror pool info rbd

在不同存储集群中显示镜像同步态信息。
[root@serverc ~]# cephadm shell
[ceph: root@serverc /]# rbd mirror pool info rbd

Clean up your environment. 清理你的环境。
[ceph: root@serverc /]# rbd rm image1 -p rbd
[ceph: root@serverc /]# rbd -p rbd ls
[ceph: root@serverf /]# rbd -p rbd ls
[ceph: root@serverc /]# exit
[ceph: root@serverf /]# exit
补充:配置两个集群间存储池数据的同步备份,使用主备模式
在 Ceph 中配置两个集群之间的存储池数据同步备份,通常通过 RBD Mirroring 或 CephFS Mirroring 来实现。以下是详细的配置步骤,以 RBD Mirroring 为例,假设你有两个集群:主集群(Primary Cluster) 和 备集群(Secondary Cluster)。
1. 环境准备
-
确保两个集群的 Ceph 版本支持 RBD Mirroring(至少是 Ceph Nautilus 版本)。
-
确保两个集群之间网络互通,且防火墙允许 Ceph 通信端口(默认端口 6789 和 3300)。
-
确保在两个集群中,client.admin 用户有权限访问存储池。
2. 在两个集群中创建存储池
在主集群和备集群中分别创建存储池。
- 主集群
ceph osd pool create rbd 128 128
rbd pool init rbd
- 备集群
ceph osd pool create rbd 128 128
rbd pool init rbd
3. 在主集群中启用 RBD Mirroring
在主集群中启用 RBD Mirroring 功能,并配置同步模式。
启用镜像池的 Mirroring
rbd mirror pool enable rbd pool
配置 Mirroring 模式
-
配置为 **主-备模式(One-way Mirroring)**:(可选)
rbd mirror pool mode pool rbd snapshot
- 配置为 **主-主模式(Two-way Mirroring)**:(可选)
rbd mirror pool mode pool rbd image
4. 在备集群中启用 RBD Mirroring
在备集群中启用 RBD Mirroring 功能,并配置同步模式。
启用镜像池的 Mirroring
rbd mirror pool enable rbd pool
配置 Mirroring 模式
-
配置为 **主-备模式(One-way Mirroring)**:(可选)
rbd mirror pool mode pool rbd snapshot
- 配置为 **主-主模式(Two-way Mirroring)**:(可选)
rbd mirror pool mode pool rbd image
5. 在主集群中创建镜像
在主集群中创建一个镜像,并确保启用了 exclusive-lock 和 journaling 功能(这是 RBD Mirroring 的必要条件)。
rbd create image1 --size 1024 --pool rbd --image-feature=exclusive-lock,journaling
6. 生成并交换 Bootstrap Token
为了在两个集群之间建立 Mirroring 连接,需要生成一个 Bootstrap Token,并将其从一个集群提供给另一个集群。
在主集群中生成 Bootstrap Token
cephadm shell --mount /root/mirror
rbd mirror pool peer bootstrap create --site-name primary rbd > /mnt/bootstrap_token_primary
rsync -avP /root/mirror/bootstrap_token_primary serverf:/root/
将 Token 从主集群复制到备集群
将生成的 bootstrap_token_primary 文件从主集群传输到备集群。
在备集群中导入 Bootstrap Token
cephadm shell --mount /root/bootstrap_token_primary
rbd mirror pool peer bootstrap import --site-name secondary rbd < /mnt/bootstrap_token_primary
7. 启用镜像的 Mirroring
在主集群中为镜像启用 Mirroring 功能。
启用镜像的 Mirroring
rbd mirror image enable rbd/image1
8. 验证 Mirroring 状态
检查镜像的 Mirroring 状态,确保数据同步正常。
在主集群中查看镜像状态
rbd mirror image status rbd/image1
在主集群中查看镜像池状态
rbd mirror pool status rbd
9. 测试数据同步
在主集群中写入数据,检查备集群是否同步成功。
在主集群中写入数据
rbd -p rbd write /path/to/file image1
在备集群中检查数据
rbd mirror image promote rbd/image1
10. 配置故障转移(可选)
在主集群发生故障时,可以将备集群提升为主集群。
在备集群中提升镜像为主镜像
rbd mirror image promote rbd/image1
总结:
以下是完整的配置步骤:
-
在两个集群中创建存储池。
-
在主集群和备集群中启用 RBD Mirroring 功能,并配置为 主-备模式。
-
在主集群中创建镜像并启用 exclusive-lock 和 journaling 功能。
-
生成并交换 Bootstrap Token,建立集群之间的连接。
-
启用镜像的 Mirroring 功能。
-
验证 Mirroring 状态。
-
测试数据同步。
-
故障转移(可选)。
通过这些步骤,你可以成功配置 Ceph 集群之间的存储池数据同步备份,确保数据的高可用性和灾难恢复能力。
二、RBD Mirroring 命令(补充)
在 Ceph 中,RBD Mirroring 是一个用于实现跨集群数据同步的功能,确保数据的高可用性和灾难恢复能力。相关的命令主要分为三类:rbd mirror、rbd mirror pool 和 rbd mirror pool peer。以下是这些命令的详细说明及其作用。
1. rbd mirror 相关命令
rbd mirror 命令用于管理和配置 RBD Mirroring 功能。它可以启用、禁用、查看状态以及管理镜像的同步。
常用子命令;
rbd mirror pool enable
-
作用:启用一个存储池的 RBD Mirroring 功能
示例:rbd mirror pool enable rbd pool
rbd mirror pool disable
-
作用:禁用一个存储池的 RBD Mirroring 功能
示例:rbd mirror pool disable rbd pool
rbd mirror pool mode
-
作用:设置存储池的 Mirroring 模式(主-备模式或主-主模式)
示例:
主-备模式:rbd mirror pool mode pool rbd snapshot
主-主模式:rbd mirror pool mode pool rbd image
rbd mirror image enable
-
作用:为指定镜像启用 Mirroring 功能
示例:rbd mirror image enable rbd/image1
rbd mirror image disable
-
作用:为指定镜像禁用 Mirroring 功能
示例:rbd mirror image disable rbd/image1
rbd mirror image promote
-
作用:将指定镜像提升为主镜像(在故障转移时使用)
示例:rbd mirror image promote rbd/image1
rbd mirror image demote
-
作用:将指定镜像降级为备镜像(在故障恢复后使用)
示例:rbd mirror image demote rbd/image1
rbd mirror image status
-
作用:查看指定镜像的 Mirroring 状态
示例:rbd mirror image status rbd/image1
rbd mirror pool status
-
作用:查看存储池中所有镜像的 Mirroring 状态
示例:rbd mirror pool status rbd
2. rbd mirror pool peer 相关命令
rbd mirror pool peer 命令用于管理集群之间的对等关系(peer),即配置两个集群之间的 Mirroring 连接。
常用子命令:
rbd mirror pool peer add
-
作用:添加一个对等集群,用于数据同步。
示例:rbd mirror pool peer add rbd client.admin@remote_cluster
rbd mirror pool peer remove
-
作用:移除一个对等集群。
示例:rbd mirror pool peer remove rbd
rbd mirror pool peer bootstrap create
-
作用:生成一个 bootstrap token,用于在对等集群之间建立连接。
示例:rbd mirror pool peer bootstrap create --site-name primary rbd > /root/bootstrap_token_primary
rbd mirror pool peer bootstrap import
-
作用:导入一个 bootstrap token,用于在对等集群之间建立连接。
示例:rbd mirror pool peer bootstrap import --site-name secondary rbd < /root/bootstrap_token_primary
rbd mirror pool peer list
-
作用:列出存储池的所有对等集群。
示例:rbd mirror pool peer list rbd
3. rbd mirror daemon 相关命令
rbd mirror daemon 命令用于管理 RBD Mirroring 守护进程(rbd-mirror),包括启动、停止、查看状态等。
常用子命令:
rbd mirror daemon status
-
作用:查看 RBD Mirroring 守护进程的状态。
示例:rbd mirror daemon status
rbd mirror daemon restart
-
作用:重启 RBD Mirroring 守护进程。
示例:rbd mirror daemon restart
rbd mirror daemon stop
-
作用:停止 RBD Mirroring 守护进程。
示例:rbd mirror daemon stop
思维导图:

小结:
本篇为 【RHCA认证 - CL260 | Day07:块设备镜像同步】的学习笔记,希望这篇笔记可以让您初步了解如何配置 RBD 块设备镜像、RBD Mirroring 命令,不妨跟着我的笔记步伐亲自实践一下吧!
Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关环境、视频,可评论666并私信小安,请放下你的羞涩,花点时间直到你真正的理解。
RBD块设备镜像同步配置
1279

被折叠的 条评论
为什么被折叠?



