rbd-mirror配置指南-单向备份
前言
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配置指南-单向备份的更多相关文章
- SUSE Ceph RBD Mirror - Storage 6
Ceph采用的是强一致性同步模型,所有副本都必须完成写操作才算一次写入成功,这就导致不能很好地支持跨域部署,因为如果副本在异地,网络延迟就会很大,拖垮整个集群的写性能.因此,Ceph集群很少有跨域部署 ...
- SQL Server 2012 AlwaysOn集群配置指南
1. AlwaysOn介绍 AlwaysOn是SQL Server 2012提供的全新综合.灵活.高效经济的高可用性和灾难恢复解决方案.它整合了镜像和群集的功能,基于OS 故障转移群集(Windows ...
- P6 EPPM 安装与配置指南 16 R1 2016.4
关于安装和 配置P6 EPPM 本指南告诉你如何自动 安装和配置您的应用程序. 在您开始之前,阅读 先决条件 P6 EPPM配置 (7页). 安装P6 EPPM 您将使用 安装程序 (窗口) . ...
- 【转】CentOS 6 服务器安全配置指南
原文连接: CentOS 6 服务器安全配置指南(通用) Linux 是一个开放式系统,可以在网络上找到许多现成的程序和工具,这既方便了用户,也方便了黑客,因为他们也能很容易地找到程序和工具来潜入 L ...
- 【转】Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置
Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置 原贴:https://www.cnblogs.com/jackadam/p/8568833.html ...
- [转帖]CentOS 6 服务器安全配置指南(通用)
CentOS 6 服务器安全配置指南(通用) http://seanlook.com/2014/09/07/linux-security-general-settings/ 发表于 2014-09- ...
- CentOS 7 个性化配置指南
博客原文地址:CentOS 7 个性化配置指南 - Wind Spirit 0x00 前言 该教程主要安装了如下软件包 iptables MySQL PHP PHP 相关模块 Nginx 主要配置实现 ...
- DNS和Bind配置指南
/////////////////////////////目录//////////////////////////////////////一.DNS原理相关二.使用bind搭建最简单的DNS服务器三. ...
- Visual Studio Code 配置指南
Visual Studio Code (简称 VS Code)是由微软研发的一款免费.开源的跨平台文本(代码)编辑器.在我看来它是「一款完美的编辑器」. 本文是有关 VS Code 的特性介绍与配置指 ...
随机推荐
- selenium元素定位学习笔记
一,定位原则 稳定 简单灵活 唯一 WebDriver提供了两种方式来定位页面元素,分别是find_element_by_XXX和find_elements_by_XXX.第一种方式的结果是在正常情况 ...
- zookeeper动态添加/删除集群中实例(zookeeper 3.6)
一,用来作为demo操作的zookeeper集群中的实例: 机器名:zk1 server.1=172.18.1.1:2888:3888 机器名:zk2 server.2=172.18.1.2:2888 ...
- ps命令没有显示路径找到命令真实路径
top发现某程序占用大量资源,但ps查看看不到程序真实路径,查找真实路径. ps aux |grep COMMAND 找到PID ls /proc/ 里边有很多数字文件夹,找到PID相应的文件夹进去看 ...
- uvalive6468,51cthink1419 Strange Antennas (离散化)
题意: 在一个 n x n 的平面上,给定 m 个等腰直角三角形(各点均为整数),问该平面上被三角形覆盖奇数次的点有多少个. 思路: 由于 n 较大,不能模拟解决,故使用离散化思想. 考虑每一行有多少 ...
- vue 项目抛出警告
There are multiple modules with names that only differ in casing. 此图为 博主(初雪日)的截图, 这个问题虽然不报错,但是会对项目有影 ...
- ams1117资料汇总
AMS1117系列稳压器有可调版与多种固定电压版,设计用于提供1A输出电流且工作压差可低至1V.在最大输出电流时,AMS1117器件的最小压差保证不超过1.3V,并随负载电流的减小而逐渐降低. AMS ...
- NB-IOT基站的优势和特点
NB-IOT基站是什么 NB-IOT基站的主要目的是完成移动通信网和UE之间的通信和管理功能,在移动通信中是组成蜂窝小区最基本的单元.只有在基站信号的覆盖范围之内通过运营商网络连接的NB ...
- Python使用JsAPI发起微信支付 Demo
Python使用JsAPI发起微信支付 Demo 这个是基于Django框架. 了解更多,可以关注公众号"轻松学编程" 1.公众号设置.微信商户号设置 这些都可以在官网查得到, 公 ...
- [Luogu P4215] 踩气球 (线段树)
题面 传送门:https://www.luogu.org/problemnew/show/P4215 Solution 这题十分有意思. 首先,我们可以先想想离线做法,因为在线做法可以从离线做法推出. ...
- IOCP三层结构
iocp三层架构服务器模型 分类: GameEngine专题之IOCP(完成端口)2010-04-06 14:44 2611人阅读 评论(0) 收藏 举报 服务器socket工作测试应用服务器性能优化 ...