前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Ceph基于快照的备份容灾方案

Ceph基于快照的备份容灾方案

作者头像
段立功
发布于 2022-06-13 03:14:07
发布于 2022-06-13 03:14:07
2K0
举报
文章被收录于专栏:云计算之道云计算之道

Ceph的快照技术本来只是用来进行RBD或者Pool的回滚,但管理员可以利用快照进行Image的异地备份容灾。本文首先介绍Ceph的快照技术的使用方法,然后提出一种初级的异地备份方案,管理员可以以此为基础,创造更自动更智能的备份容灾方案。

Snapshot(快照)

Ceph中可以支持2个级别的快照功能:Pool, RBD。这两种级别的快照基本上采用了Copy On Write机制,在进行快照创建时,不做任何复制的操作,而只是通知服务器将所有相关的磁盘区块保留起来,不被写覆盖。而当写操作和删除操作时,原本数据所在的磁盘区块不会被修改,而将修改部分写入其他可用的磁盘区块。

1)RBD

//基于当前的image状态创建快照

#rbd create <image-name>–size 1024 -p <pool-name>

//实际上librbd只是创建了该image的相关的metadata,实际上并没有向Ceph申请空间。

//基于当前的image状态创建卷

#rbd snap create<pool-name/image-name> -snap <snap-name>

//将Image恢复到快照创建时的状态

#rbd snaprollback <pool-name/image-name> -snap <snap-name>

RBD快照创建,Ceph主要做如下事情:

a) 向ceph-monitor发送请求,获取一个最新的快照序号snap_seq;

b) 把相关image的snap_name和snap_seq保存到RBD元数据中。

2)Pool

Pool可以认为是Ceph存储数据时的逻辑分区,类似于namespace。一个Ceph可以有多个Pool,每个Pool可以有一定数量的PG,PG里的对象被映射到不同的OSD上。

不同的Pool,可以设置各自的副本数,数据清洗次数,快大小,Ownership等。

//创建快照

#rados mksnap <snap_name> -p<pool_name>

#rados lssnap –p <pool_name>

//恢复Pool到快照创建时的状态

#rados rollback pool <pool_name> tosnapshot <snap_name>

值得注意的是,这两种级别的快照是相互排斥的,一个CephCluster中只能使用其中一个。因此,如果pool中曾经创建了rbd对象(即使当前删除了所有的image实例)就不能再对这个pool做快照了。反之,如果对一个pool做了快照,就不能创建rbd image的快照了。

另外,Ceph也支持对RBD进行增量快照的导入和导出,具体如下:

导出增量镜像:

a) 导出导入某个image从创建时到现在的变化

//将<pool-name/image-name>从创建时到现在的增量变化保存到<image_diff>文件

#rbd export-diff<pool-name/image-name> <image_diff>

//导入image从创建到某一时刻的diff

#rbdimport-diff <image-diff> <pool-name/image-name>

//执行该命令后,<image-name>变成<image-diff>生成时<image-name>的状态

b) 导出image从创建时到某快照时刻的变化

//将<pool-name/image-name>从创建时到创建<snap_name>时的变化导出到<image_diff>文件

#rbd export-diff <pool-name/image-name>@<snap-name><image-diff>

c) 导出image现在和某快照时刻的变化

//将<pool-name/image-name>现在的状态和<snap_name>创建时的状态的变化保存到<image-diff>文件

#rbd export-diff <pool-name/image-name> --from-snap<snap_name> <image-diff>

导入增量镜像

a) 导入从创建到某一时刻的diff

#rbd import-diff <image-diff> <pool-name/image-name>

基于快照的异地灾备方案

假设现有2个数据中心,master_dc和backup_dc, 分别各有一套ceph存储系统。

初次备份:

1) 在backup_dc创建一个img_bak,作为backup_dc的初始镜像

#rbd create <img_bak>–size 1024 -p <pool-bak>

2) 在master_dc创建image快照

#rbd snap create<pool-mas /image-mas> -snap <snap-mas>

3) 导出image和快照之间的增量

#rbd export-diff<pool-mas/image-mas>@<snap-mas> <image-snap-diff>

4) 导出的增量文件<image-snap-diff> scp或其他方式传送到backup_dc

5) 将增量快照文件导入到backup_dc的image

#rbd import-diff<image-snap-diff> <pool-bak/image-bak>

后续备份:

假设master_dc和backup_dc均存在的最近的快照为snap-1

1) 在主数据中心master_dc创建image的快照

#rbd create <pool-mas/image-mas> -snap <snap-2>

2) 导出snap-1和最新的snap-2的增量

#rbd export-diff –from-snap <snap-1><pool-mas/image-mas@snap2> image-snap1-snap2-diff

3) 把导出的增量文件传送到backup_dc

4) 把增量文件导入到backup_DC的image

#rbd import-diff <image-snap1-snap2-diff><pool-bak/image-bak>

上述只是介绍了基于快照技术的备份方案的要点,管理员可以基于上述介绍编写自己的自动备份和恢复脚本,从而实现一个更完整更智能的两中心备份方案。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云计算之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
b代码构成2-标识符
用户7865723
2023/10/18
2430
《Java从入门到失业》第三章:基础语法及基本程序结构(3.2-3.5):标识符、关键字、注释、变量及常量
       上面我们知道我们自定义一个类,需要一个类名。在Java中,还有很多需要命名的组成部分,例如方法名,变量名等。标识符的命名需要遵循Java的规范,总结如下:
用户7801119
2020/09/27
3970
Java学习之基础语法
任何一种计算机语言都离不开标识符和关键字,因此下面将详细介绍 Java 的标识符、关键字和保留字。
李小白是一只喵
2022/03/21
5240
Java学习之基础语法
Java基础-标识符Identifier
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/11/12
5420
java标识符与关键字_4、Java标识符和关键字
标识符:Java对各种变量,方法和类等要素命名时使用的字符序列称为标识符。(凡是自己可以起名的地方都叫标识符,都遵循标识符的规则)
全栈程序员站长
2022/09/08
3100
java标记符_java标识符的书写规则
1.可以由字母,数字,下划线,美元符号组成,但是不能包含@,%,空格等其它特殊字符,不能以数字开头。
全栈程序员站长
2022/09/08
6490
【C语言】标识符大通关!
标识符是编程语言中的基本元素之一。在C语言中,标识符用于命名变量、函数、类型、标签等。正确理解和使用标识符对于编写可读性强、易维护的代码至关重要。
LuckiBit
2024/12/11
2370
Java 基础教学:基础语法 - 注释、标识符与关键字
Java是一种广泛使用的编程语言,它的语法规则和结构为编程提供了清晰的框架。为了编写出易于理解和维护的代码,必须掌握Java的基本语法元素,包括注释、标识符和关键字。本文档将详细介绍这些概念,并提供示例以帮助初学者了解和应用。
世间万物皆对象
2024/10/22
1640
java语言基础(关键字,标识符,命名规则)
Java标识符定义(标识符:凡是直接可以命名的地方) 1、 包名、类名、方法名、参数名、变量名等,这些符号被称为标识符。 2、 标识符可以由字母、数字、下划线(_)和美元符号($)组成 3、 标识符不能以数字开头,不能是java中的关键字。例如:
一个风轻云淡
2022/11/13
1.1K0
java语言基础(关键字,标识符,命名规则)
Java程序设计(基础)- 基本语法
标识符:给接口(interface)、变量(variables)、类(class)和方法(method)命名。
全栈程序员站长
2022/06/30
3420
Java程序设计(基础)- 基本语法
JAVA合法标识符
Java语言中,对于变量,常量,函数,语句块均有名字,我们统统称之为Java标识符.
全栈程序员站长
2022/09/08
1.2K0
Java基础入门篇(二)——Java注释、关键字和标识符
前面几篇文章用Java带大家一起了解了几个游戏小项目,感兴趣的小伙伴可以点击文章观摩下,手把手教你用Java打造一款简单故事书(上篇)、手把手教你用Java打造一款简单故事书(下篇)、手把手教你用Java打造一款简单考试系统(上篇)、手把手教你用Java打造一款简单考试系统(下篇)接下来的几篇文章是关于Java基础的,希望对大家的学习有帮助,欢迎大家在讨论区留言。
Java进阶者
2021/01/22
5420
java 标识符,分隔符,关键字[通俗易懂]
Java语言中,对于变量,常量,函数,语句块也有名字,我们统统称之为Java标识符. 标识符是用来给类、对象、方法、变量、接口和自定义数据类型命名的。
全栈程序员站长
2022/09/08
8040
JavaNote[001] - 注释、标识符、关键字、变量
Java学习的基础知识,因为之前学习过了就2倍速快速过了一下,下面是一些简单的笔记?,顺手就记录下来了。 1 注释 注释不会出现在字节码中,也就是说Java编译器编译的时候会忽略我们的注释内容,这样子
Sam Gor
2020/05/28
5360
【Java学习笔记之二】java标识符命名规范
什么是标识符 就是程序员在定义java程序时,自定义的一些名字。标识符可以应用在类名、变量、函数名、包名上。 标识符必须遵循以下规则 标识符由26个英文字符大小写(a~zA~Z)、数字(0~9)、下划线(_)和美元符号($)组成。 不能以数字开头,不能是关键字 严格区分大小写 标识符的可以为任意长度 Java中的标识符命名规范 1.  包名 多个单词组成时所有字母小写(例:package  com.baidu) 2.  类名和接口 多个单词组成时所有单词的首字母大写(例:HelloWorld) 3.   变
Angel_Kitty
2018/04/09
7270
java标识符是什么_Java 标识符「建议收藏」
标识符就是程序员在编写 Java 程序时,自定义的一些名字。例如第一个Java 程序里关键字 class 后跟的 HelloWorld,就是我们自定义的类名。类名就属于标识符的一种。
全栈程序员站长
2022/09/08
8680
【Python】标识符 ( Python 标识符命名规则 - 强制性 | 内容限定 | 大小写敏感 | 非关键字 | Python 标识符命名规范 - 建议性 | 下划线命名法 | 英文字母全小写 )
关键字大小写敏感 , 如果改变了关键字的大小写 , 就变成了标识符 , 不再是关键字了 ;
韩曙亮
2023/04/07
1.5K0
【Python】标识符 ( Python 标识符命名规则 - 强制性 | 内容限定 | 大小写敏感 | 非关键字 | Python 标识符命名规范 - 建议性 | 下划线命名法 | 英文字母全小写 )
上手python之数据类型转换和标识符
数据类型之间,在特定的场景下,是可以相互转换的,如字符串转数字、数字转字符串等 那么,我们为什么要转换它们呢?
一个风轻云淡
2022/11/15
8050
上手python之数据类型转换和标识符
JAVA自学-标识符、变量的来源
文章开始前,先问大家一个问题,你觉得什么方式能够让你更快接受、学习一门新的语言?
IT学习日记
2022/09/13
5770
JAVA自学-标识符、变量的来源
1.2 标识符与命名规则
小驼峰命名法:方法名、参数名、成员变量、局部变量;(receiptMessage)
ha_lydms
2023/08/09
3300
1.2 标识符与命名规则
推荐阅读
相关推荐
b代码构成2-标识符
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档