RBD 的 mirroring 功能将会在下一个稳定版本Jewel中实现,这个Jewel版本已经发布了第一个版本10.1.0,这个功能已经在这个发布的版本中实现了

一、基本原理

我们试图解决的或者至少需要克服的问题是,ceph在内部是强一致性的,这个对于跨区域的情况数据同步是无法接受的,一个请求需要异地返回再确认完成,这个在性能上肯定是无法接受的,这就是为什么基本上无法部署跨区域的ceph集群

因此我们需要有一种机制能够让我们在不同区域的集群之间复制块设备。这个能够帮助我们实现两个功能:

  • 灾难恢复
  • 全球块设备分布(跨地理位置)

二、内部的实现

从上图所示是进行的主备模式的备份,其实这个只是看怎么应用了,在里面是自动实现的主主的模式,双向同步的,只是在应用中需要注意不要去同时操作同一个image,这个功能是作为主备去使用的,以备真正有问题的时候去实现故障恢复,这个同步是异步的

二、一个新的进程

一个新的守护程序:rbd-mirror 将会负责将一个镜像从一个集群同步到另一个,rbd-mirror需要在两个集群上都配置,它会同时连接本地和远程的集群。在jewel版本中还是一对一的方式,在以后的版本中会实现一对多的,所以在以后的版本可以配置一对多的备份

作为起点,这个功能讲使用配置文件连接集群,使用用户和密钥。使用admin用户就可以了,使用的验证方式就是默认的cephx的方式

为了相互识别,两个集群都需要相互注册使用 rbd mirror pool peer add 命令, 这个在下面会实践

二、镜像



The RBD mirroring 依赖两个新的rbd的属性

  • journaling: 启动后会记录image的事件
  • mirroring: 明确告诉rbd-mirror需要复制这个镜像

也有命令可以禁用单独的某个镜像。journaling可以看做是另一个rbd的image(一些rados对象),一般情况下,先写日志,然后返回客户端,然后被写入底层的rbd的image,出于性能考虑,这个journal可以跟它的镜像不在一个存储池当中,目前是一个image一个journal,最近应该会沿用这个策略,直到ceph引入一致性组。关于一致性组的概念就是一组卷,然后用的是一个RBD image。可以在所有的组中执行快照操作,有了一致性的保证,所有的卷就都在一致的状态。当一致性组实现的时候,我们就可以用一个journal来管理所有的RBD的镜像

可以给一个已经存在image开启journal么,可以的,ceph将会将你的镜像做一个快照,然后对快照做一个复制,然后开启journal,这都是后台执行的一个任务

可以启用和关闭单个镜像或者存储池的mirror功能,如果启用了journal功能,那么每个镜像将会被复制

可以使用 rbd mirror pool enable启用它

三、灾难恢复

交叉同步复制是可以的,默认的就是这个方式,这意味着两个地方的存储池名称需要相同的这个会带来两个问题

  • 使用相同的存储做备份做使用会影响性能的
  • 相同的池名称在进行恢复的时候也更容易。openstack里面只需要记录卷ID即可

每个image都有 mirroring_directory 记录当前active的地方。在本地镜像提示为 primary的时候,是可写的并且远程的站点上就会有锁,这个image就是不可写的。只有在primary镜像降级,备份的点升级就可以了,demoted 和 promoted来控制这里,这就是为什么引入了等级制度,一旦备份的地方升级了,那么主的就自动降级了,这就意味着同步的方向就会发生变化了

如果出现脑裂的情况,那么rbd-mirror将会停止同步,你自己需要判断哪个是最新的image,然后手动强制去同步 rbd mirror image resync

上面基本参照的是sebastien翻译的,原文只是做了简短的说明,下面是我的实践部分

下面在我的环境下进行实践

下面的环境是在两个集群上进行的,集群分别为:

  • 机器lab8106
  • 机器lab8107

先启动进程,因为这个是个新功能,所以采取的是进程运行在前台的方式方便找到问题,这个里面因为很容易混淆,所以运行的时候都会说明命令执行的地方

启动rbd-mirror的进程

在lab8106执行命令

rbd-mirror -m 192.168.8.106:6789 -d

在lab8107执行命令

rbd-mirror -m 192.168.8.107:6789 -d

开启pool的mirror功能

这里因为操作命令需要相互做peer的操作,所以需要提前做个配置文件的操作,将lab8106认为local集群,lab8107位remote集群,这个地方需要做个配置文件调整

注意需要在ceph.conf配置文件中添加

rbd_default_features = 125

在lab8106上执行

cp /etc/ceph/ceph.conf /etc/ceph/local.conf
cp /etc/ceph/ceph.client.admin.keyring /etc/ceph/local.client.admin.keyring
scp /etc/ceph/ceph.conf lab8107:/etc/ceph/local.conf
scp /etc/ceph/ceph.client.admin.keyring lab8107:/etc/ceph/local.client.admin.keyring

在lab8107上执行

cp /etc/ceph/ceph.conf /etc/ceph/remote.conf
cp /etc/ceph/ceph.client.admin.keyring /etc/ceph/remote.client.admin.keyring
scp /etc/ceph/ceph.conf lab8106:/etc/ceph/remote.conf
scp /etc/ceph/ceph.client.admin.keyring lab8106:/etc/ceph/remote.client.admin.keyring

检验上面设置是否完成

在lab8106执行

[root@lab8106 ceph]# ceph --cluster local mon stat
e1: 1 mons at {lab8106=192.168.8.106:6789/0}, election epoch 3, quorum 0 lab8106
[root@lab8106 ceph]# ceph --cluster remote mon stat
e1: 1 mons at {lab8107=192.168.8.107:6789/0}, election epoch 3, quorum 0 lab8107

在lab8107执行

root@lab8107:~/ceph# ceph --cluster local mon stat
e1: 1 mons at {lab8106=192.168.8.106:6789/0}, election epoch 3, quorum 0 lab8106
root@lab8107:~/ceph# ceph --cluster remote mon stat
e1: 1 mons at {lab8107=192.168.8.107:6789/0}, election epoch 3, quorum 0 lab8107

准备工作完成了,开始做相关配置

在lab8106上执行

rbd --cluster local mirror pool enable rbd pool
rbd --cluster remote mirror pool enable rbd pool

如果需要关闭那么执行

rbd --cluster local mirror pool disable rbd
rbd --cluster remote mirror pool disable rbd

增加 CLUSTER PEER

格式

rbd mirror pool peer add {pool-name} {client-name}@{cluster-name}

使用admin这个账户就可以了

[root@lab8106 ceph]# rbd --cluster local mirror pool peer add rbd client.admin@remote
eb08d27f-9e09-484a-a55a-589249cf6c10
[root@lab8106 ceph]# rbd --cluster remote mirror pool peer add rbd client.admin@local
d22bb245-fb20-4273-b847-c8c5e06b2450

查询是否连接好

[root@lab8106 ceph]# rbd --cluster local mirror pool info
Mode: pool
Peers:
UUID NAME CLIENT
eb08d27f-9e09-484a-a55a-589249cf6c10 remote client.admin
[root@lab8106 ceph]# rbd --cluster remote mirror pool info
Mode: pool
Peers:
UUID NAME CLIENT
d22bb245-fb20-4273-b847-c8c5e06b2450 local client.admin

如果需要删除

rbd mirror pool peer remove {pool-name} {peer-uuid}

执行

rbd --cluster local mirror pool peer remove image-pool 55672766-c02b-4729-8567-f13a66893445
rbd --cluster remote mirror pool peer remove image-pool 60c0e299-b38f-4234-91f6-eed0a367be08

验证是否成功

在lab8106上执行

[root@lab8106 ceph]# rbd create testrbd --size 40000
[root@lab8106 ceph]# rbd ls
testrbd

在lab8107上执行

root@lab8107:~/ceph# rbd ls
testrbd

可以看到镜像已经同步过去了

在lab8107上执行

root@lab8107:~/ceph# rbd create testrbd1 --size 40000
root@lab8107:~/ceph# rbd ls
testrbd
testrbd1

在lab8106上执行

[root@lab8106 ceph]# rbd ls
testrbd
testrbd1

双向同步已经可以了

这里提一下,因为内核态的rbd还没有实现一些属性,所以在map的时候会提示没有这个设备,librbd是可以使用的

[root@lab8106 ceph]# rbd map testrbd
rbd: sysfs write failed
rbd: map failed: (6) No such device or address

镜像的升级与降级

[root@lab8106 ceph]# rbd --cluster local mirror image demote rbd/testrbd
Image demoted to secondary
[root@lab8106 ceph]# rbd --cluster local mirror image promote rbd/testrbd [root@lab8106 ceph]# rbd --cluster local mirror image promote rbd/testrbd
rbd: error promoting image to primary
2016-03-30 23:35:13.477096 7ffa50a3dc00 -1 librbd: image is already primary

这里对testrbd做了降级处理和升级处理,那么本地的这个就是只读的,远程的就是可写的

基本的实现就到这里,更多的实践再根据环境需求做就可以了

rbd-mirror新功能的更多相关文章

  1. SUSE Ceph RBD Mirror - Storage 6

    Ceph采用的是强一致性同步模型,所有副本都必须完成写操作才算一次写入成功,这就导致不能很好地支持跨域部署,因为如果副本在异地,网络延迟就会很大,拖垮整个集群的写性能.因此,Ceph集群很少有跨域部署 ...

  2. ceph luminous 新功能之内置dashboard

    前言 ceph luminous版本新增加了很多有意思的功能,这个也是一个长期支持版本,所以这些新功能的特性还是很值得期待的,从底层的存储改造,消息方式的改变,以及一些之前未实现的功能的完成,都让ce ...

  3. 从淘宝 UWP 的新功能 -- 比较页面来谈谈 UWP 的窗口多开功能

    前言 之前在 剁手党也有春天 -- 淘宝 UWP ”比较“功能诞生记 这篇随笔中介绍了一下 UWP 淘宝的“比较”新功能呱呱坠地的过程.在鲜活的文字背后,其实都是程序员不眠不休的血泪史(有血有泪有史) ...

  4. Sql Server 2016新功能之 Row-Level Security

    Sql Server 2016 有一个新功能叫 Row-Level Security ,大概意思是行版本的安全策略(原来我是个英语渣_(:з」∠)_) 直接上例子.这个功能相当通过对表添加一个函数作为 ...

  5. What's new in Windows 10 Enterprise with Microsoft Edge.(Windows 10 新功能)

    What's new in Windows 10 Enterprise with Microsoft Edge --带有Edge浏览器的Windows 10 企业版的新功能 本文摘录自公司群发邮件, ...

  6. MySQL 5.7 Replication 相关新功能说明

    背景: MySQL5.7在主从复制上面相对之前版本多了一些新特性,包括多源复制.基于组提交的并行复制.在线修改Replication Filter.GTID增强.半同步复制增强等.因为都是和复制相关, ...

  7. SQL Server2016 新功能实时查询统计信息

    SQL Server2016 新功能实时查询统计信息 很多时候有这样的场景,开发抱怨DBA没有调优好数据库,DBA抱怨开发写的程序代码差,因此,DBA和开发都成为了死对头,无法真正排查问题. DBA只 ...

  8. 一个新人如何学习在大型系统中添加新功能和Debug

    文章背景: 今年七月份正式入职,公司主营ERP软件,楼主所在的组主要负责二次开发,使用的语言是Java. 什么叫二次开发呢?ERP软件的客户都是企业.而这些企业之间的情况都有所不同,一套标准版本的企业 ...

  9. SQL Server 2014新功能PPT

        本篇文章是我在公司内部分享SQL Server 2014新功能的PPT,在本PPT中我详细描述了SQL Server除了BI方面的新功能,以及提供了大量的测试.希望对大家有帮助.     请点 ...

随机推荐

  1. charles系列

    charles 手机抓包 教程:https://www.axihe.com/charles/charles/proxy-phone.html坑:https://www.cnblogs.com/1-43 ...

  2. spring boot:使用多个线程池实现实现任务的线程池隔离(spring boot 2.3.2)

    一,为什么要使用多个线程池? 使用多个线程池,把相同的任务放到同一个线程池中,可以起到隔离的作用,避免有线程出错时影响到其他线程池,例如只有一个线程池时,有两种任务,下单,处理图片,如果线程池被处理图 ...

  3. Spark如何删除无效rdd checkpoint

    spark可以使用checkpoint来作为检查点,将rdd的数据写入hdfs文件,也可以利用本地缓存子系统. 当我们使用checkpoint将rdd保存到hdfs文件时,如果任务的临时文件长时间不删 ...

  4. 常用的实现Javaweb页面跳转的方式

    我们有两大种方式来实现页面跳转:1.JS(javascript):2.jsp跳转 先说jsp(金j三s胖p):1.转发:request.getRequestDispatcher("1.jsp ...

  5. 【转】Hello SDL

    from:http://lazyfoo.net/tutorials/SDL/01_hello_SDL/index.php Last Updated 6/11/19 So you learned the ...

  6. mysql分组函数与查询

    Ⅰ.分组函数的分类: max():最大值 min():最小值 sum():和 avg():平均值 count():计算非空的个数 这些都是通用的,sqlserver.oracle.mysql都是一样的 ...

  7. NB-IOT覆盖范围有多大 NB-IOT的强覆盖是怎么实现的

    NB-IoT技术自出现以来就以其强大的覆盖范围和通讯距离长而受到广泛的欢迎,发展到现在已经成为万物互联网络中的一个重要分支.那么NB-IoT覆盖范围到底有多大,是怎么来衡量其覆盖能力? 强大的覆盖范围 ...

  8. 给萌新HTML5 入门指南(二)

    本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上一篇我们已经为大家介绍了HTML5新增的内容和基础页面布局,这篇会继续向大 ...

  9. 【Luogu】P1306 斐波那契公约数 题解

    原题链接 嗯...很多人应该是冲着这个标题来的 (斐波那契的魅力) 1.分析题面 点开题目,浏览一遍题目,嗯?这么简单?还是蓝题? 再看看数据范围,感受出题人深深的好意... \(n,m \leq 1 ...

  10. C语言100题集合005-删除一维数组中所有相同的数,使之只剩一个

    系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞.转发.收藏哦- 后续C语言经典100例将会以pdf和代码的形式发放到公众号 欢迎关注:计算广告生态 即 ...