前言

RBD 的 mirroring 功能将在Jewel中实现的,这个Jewel版本已经发布了很久了,这个功能已经在这个发布的版本中实现了,本来之前写过一篇文章,但是有几个朋友根据文档配置后,发现还是有问题,自己在进行再次配置的时候也发现有些地方没讲清楚,容易造成误解,这里对文档进行再一次的梳理

基本原理

我们试图解决的或者至少需要克服的问题是,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翻译的,原文只是做了简短的说明,下面是我的实践部分

配置实践部分

先介绍下一些简单的概念

rbd-mirror 进程

rbd-mirror进程负责将镜像从一个Ceph集群同步到另一个集群

根据复制的类型,rbd-mirror可以在单个集群上或者是镜像的两个集群上都运行

  • 单向备份

    • 当数据从主集群备份到备用的集群的时候,rbd-mirror仅在备份群集上运行。
  • 双向备份
    • 如果两个集群互为备份的时候,rbd-mirror需要在两个集群上都运行

为了更清晰的理解这个配置,我们本次实践只进行单向备份的配置,也就是只备份一个集群的镜像到另外一个集群

rbd-mirror的每个实例必须能够同时连接到两个Ceph集群,因为需要同两个集群都进行数据通信

每个Ceph集群只运行一个rbd-mirror进程

Mirroring 模式

mirroring是基于存储池进行的peer,ceph支持两种模式的镜像,根据镜像来划分有:

  • 存储池模式

  • 一个存储池内的所有镜像都会进行备份

  • 镜像模式

  • 只有指定的镜像才会进行备份

本次配置选择的模式是镜像的模式,也就是指定的镜像才会进行备份

Image 状态

做了mirroring的Image的状态有:

primary (可以修改)

non-primary (不能修改).

当第一次对image进行开启mirroring的时候 .Images 自动 promoted 为 primary

开始配置

首先配置两个集群,配置的集群都没有更改名称,都是ceph,我们通过配置文件来控制集群的识别,我的环境是单主机集群,lab8106和lab8107两台机器

lab8106为local集群,lab8107为remote集群,准备把lab8106的image备份到lab8107的集群上

在ceph.conf当中添加:

rbd default features = 125

需要exclusive-lock和journaling属性

开启这两个个属性可以在创建的时候指定

语法:

rbd create <image-name> --size <megabytes> --pool <pool-name> --imagefeature <feature>

例子:

rbd create image-1 --size 1024 --pool rbd --image-feature exclusive-lock,journaling

这个是在lab8106上执行,因为我们需要对lab8106进行备份

也可以在创建以后开启属性:

语法:

rbd feature enable <pool-name>/<image-name> <feature-name>

例子:

rbd feature enable rbd/image-1 exclusive-lock
rbd feature enable rbd/image-1 journaling

上面有三种方法开启属性,选择习惯或者需要的一种就可以

开启存储池的mirror的模式

我们准备开启集群镜像备份模式

语法:

rbd mirror pool enable <pool-name> <mode>

在lab8106主机上执行:

rbd mirror pool enable rbd image

在lab8107主机上执行:

rbd mirror pool enable rbd image

上面的操作是对rbd存储池启动image模式的mirror配置

如果需要关闭:

语法:

rbd mirror pool disable <pool-name> <mode>

执行:

rbd mirror pool disable rbd image

处理配置文件和kerring

在lab8106上执行

[root@lab8106 ceph]# scp /etc/ceph/ceph.conf lab8107:/etc/ceph/local.conf
[root@lab8106 ceph]# scp /etc/ceph/ceph.client.admin.keyring lab8107:/etc/ceph/local.client.admin.keyring
[root@lab8106 ceph]#cp /etc/ceph/ceph.conf /etc/ceph/local.conf
[root@lab8106 ceph]#cp /etc/ceph/ceph.client.admin.keyring /etc/ceph/local.client.admin.keyring

在lab8107上执行:

[root@lab8107 ceph]# scp /etc/ceph/ceph.conf lab8106:/etc/ceph/remote.conf
[root@lab8107 ceph]# scp /etc/ceph/ceph.client.admin.keyring lab8106:/etc/ceph/remote.client.admin.keyring
[root@lab8107 ceph]#cp /etc/ceph/ceph.conf /etc/ceph/remote.conf
[root@lab8107 ceph]#cp /etc/ceph/ceph.client.admin.keyring /etc/ceph/remote.client.admin.keyring

执行完了后在两台机器上给予权限

[root@lab8106 ceph]# chown ceph:ceph -R /etc/ceph
[root@lab8107 ceph]# chown ceph:ceph -R /etc/ceph

检验上面设置是否完成

在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

到这里就是两个集群可以通过local和remote进行通信了

增加peer

我们这里是做单个集群的备份,为了方便我们这里都用admin的keyring

语法

rbd mirror pool peer add <pool-name> <client-name>@<cluster-name>

这个是为了让rbd-mirror进程找到它peer的集群的存储池

在lab8106上执行

[root@lab8106 ceph]# rbd --cluster local mirror pool peer add rbd client.admin@remote
[root@lab8106 ceph]# rbd --cluster remote mirror pool peer add rbd client.admin@local

查询peer状态

[root@lab8106 ceph]# rbd mirror pool info rbd --cluster local
Mode: image
Peers:
UUID NAME CLIENT
a050a0f5-9448-43f2-872f-87c394083871 remote client.admin
[root@lab8106 ceph]# rbd mirror pool info rbd --cluster remote
Mode: image
Peers:
UUID NAME CLIENT
8d7b3fa4-be44-4e25-b0b7-cf4bdb62bf10 local client.admin

如果需要删除peer

语法:

rbd mirror pool peer remove <pool-name> <peer-uuid>

查询存储池状态

[root@lab8106 ceph]# rbd mirror pool status rbd
health: OK
images: 0 total

开启image的mirror

在lab8106执行

rbd mirror image enable rbd/image-1

查询镜像的状态

[root@lab8106 ceph]# rbd info rbd/image-1
rbd image 'image-1':
size 1024 MB in 256 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.102c2ae8944a
format: 2
features: exclusive-lock, journaling
flags:
journal: 102c2ae8944a
mirroring state: enabled
mirroring global id: dabdbbed-7c06-4e1d-b860-8dd104509565
mirroring primary: true

开启rbd-mirror的同步进程

先用调试模式启动进程看看情况

在lab8107的机器上执行

[root@lab8107 ceph]# rbd-mirror -d --setuser ceph --setgroup ceph --cluster remote -i admin
2017-01-22 17:43:53.688820 7fc926dc6c40 0 set uid:gid to 167:167 (ceph:ceph)
2017-01-22 17:43:53.688840 7fc926dc6c40 0 ceph version 10.2.5 (c461ee19ecbc0c5c330aca20f7392c9a00730367), process rbd-mirror, pid 32080

如果确认没问题就用服务来控制启动

vim /usr/lib/systemd/system/ceph-rbd-mirror@.service

修改

Environment=CLUSTER=remote

然后启动

语法为:

[root@lab8107 ceph]#systemctl start ceph-rbd-mirror@<client-id>

在lab8107上启动进程

[root@lab8107 ceph]# systemctl start  ceph-rbd-mirror@admin
[root@lab8107 ceph]# ps -ef|grep rbd
ceph 4325 1 1 17:59 ? 00:00:00 /usr/bin/rbd-mirror -f --cluster remote --id admin --setuser ceph --setgroup ceph

查询镜像的同步的状态

[root@lab8106 ~]# rbd mirror image status rbd/image-1 --cluster remote
image-1:
global_id: dabdbbed-7c06-4e1d-b860-8dd104509565
state: up+replaying
description: replaying, master_position=[object_number=2, tag_tid=2, entry_tid=3974], mirror_position=[object_number=3, tag_tid=2, entry_tid=2583], entries_behind_master=1391
last_update: 2017-01-22 17:54:22

检查数据是否同步

在lab8107执行

[root@lab8107 ceph]# rbd info rbd/image-1
rbd image 'image-1':
size 1024 MB in 256 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.127b515f007c
format: 2
features: exclusive-lock, journaling
flags:
journal: 127b515f007c
mirroring state: enabled
mirroring global id: fb976ffb-a71e-4714-8464-06381643f984
mirroring primary: false

可以看到数据已经同步过来了

总结

通过配置文件控制,可以实现集群名称不修改

rbd-mirror进程是在备份的集群上面启动的,并且是要能跟主集群和备份集群都能通信的,也就是peer都需要做,并且用户权限要控制好

根据上面的操作流程操作下来,应该是能够配置好rbd-mirror的

相关链接

Ceph Jewel Preview: Ceph RBD mirroring

变更记录

Why Who When
创建 武汉-运维-磨渣 2017-01-22

rbd-mirror配置指南-单向备份的更多相关文章

  1. SUSE Ceph RBD Mirror - Storage 6

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

  2. SQL Server 2012 AlwaysOn集群配置指南

    1. AlwaysOn介绍 AlwaysOn是SQL Server 2012提供的全新综合.灵活.高效经济的高可用性和灾难恢复解决方案.它整合了镜像和群集的功能,基于OS 故障转移群集(Windows ...

  3. P6 EPPM 安装与配置指南 16 R1 2016.4

       关于安装和 配置P6 EPPM 本指南告诉你如何自动 安装和配置您的应用程序. 在您开始之前,阅读 先决条件 P6 EPPM配置 (7页). 安装P6 EPPM 您将使用 安装程序 (窗口) . ...

  4. 【转】CentOS 6 服务器安全配置指南

    原文连接: CentOS 6 服务器安全配置指南(通用) Linux 是一个开放式系统,可以在网络上找到许多现成的程序和工具,这既方便了用户,也方便了黑客,因为他们也能很容易地找到程序和工具来潜入 L ...

  5. 【转】Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置

    Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置 原贴:https://www.cnblogs.com/jackadam/p/8568833.html ...

  6. [转帖]CentOS 6 服务器安全配置指南(通用)

    CentOS 6 服务器安全配置指南(通用) http://seanlook.com/2014/09/07/linux-security-general-settings/  发表于 2014-09- ...

  7. CentOS 7 个性化配置指南

    博客原文地址:CentOS 7 个性化配置指南 - Wind Spirit 0x00 前言 该教程主要安装了如下软件包 iptables MySQL PHP PHP 相关模块 Nginx 主要配置实现 ...

  8. DNS和Bind配置指南

    /////////////////////////////目录//////////////////////////////////////一.DNS原理相关二.使用bind搭建最简单的DNS服务器三. ...

  9. Visual Studio Code 配置指南

    Visual Studio Code (简称 VS Code)是由微软研发的一款免费.开源的跨平台文本(代码)编辑器.在我看来它是「一款完美的编辑器」. 本文是有关 VS Code 的特性介绍与配置指 ...

随机推荐

  1. Jenkins+pytest+Allure搭建自动化测试

    持续集成(CONTINUOUS INTEGRATION) 在CI环境中,开发人员将会频繁地向主干提交代码.这些新提交的代码在最终合并到主干前,需要经过编译和自动化测试流进行验证. 持续交付(CONTI ...

  2. 字符集、字符编码、国际化、本地化简要总结(UNICODE/UTF/ASCII/GB2312/GBK/GB18030)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明   普通的linux 和 普通的windows.    ...

  3. 【应用服务 App Service】App Service发生错误请求时,如何查看IIS Freb日志,从中得知错误所发生的模块,请求中所携带的Header信息

    问题描述 在使用Azure App Service时候,我们有时候对 一些请求发生错误毫无头绪,能从错误代码中知道请求错误,但是更多的信息呢? 当我们需要更多的信息时候,通常有以下的一些方式来查找问题 ...

  4. JS的Document属性和方法(转)

    document.title //设置文档标题等价于HTML的title标签document.bgColor //设置页面背景色document.fgColor //设置前景色(文本颜色)docume ...

  5. Linux命令行history

    概述 当执行命令后,系统默认会在内存记录执行过的命令 当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是~/.bash_history 登录shell时,会读取命令历史文件中记录下的命令加 ...

  6. CentOS换yum源为国内源

    CentOS换源 yum源 备份原来的文件. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup ...

  7. 撤销rebase与git原理

    git对象 git是面向对象的,对象存储在.git/objects文件夹中.此文件夹中,一个对象就是一个文件,文件名就是对象的id 提交commit的时候,每个文件都是一个数据对象,一个树对象会用来维 ...

  8. Redis常用命令(3)——Hash

    HDEL 格式:HDEL key field [field ...] 作用:删除哈希表中的一个或多个域. 返回值:删除的域的个数. HEXISTS 格式:HEXISTS key field 作用:判断 ...

  9. 03.axios登录前端

    1.创建一个Login.vue页面   1.1 写页面 views/Login.vue   在 views/components 下创建 Login.vue 页面   <template> ...

  10. AC 自动机刷题记录

    目录 简介 第一题 第二题 第三题 第四题 第五题 第六题 简介 这就是用来记录我对于<信息学奥赛一本通 · 提高篇>一书中的习题的刷题记录以及学习笔记. 一般分专题来写(全部写一起可能要 ...