LVM+NBD实现VM数据备份和迁移
在云系统的高可用性中,VM层的高可用性尤为关键,其中又涉及到了VM本身数据的备份和迁移的问题。在现有的平台上,每一个VM的数据放在一个单独的LV(逻辑卷)上,VM数据的备份可通过备份其所在的LV来完成,迁移则需要其他的物理服务器可以访问到该VM的数据,也即LV的内容。对于备份,可利用LVM(Logical Volume Manager)的快照功能来完成,远程访问则可通过NBD(Network Block Device)来实现。
LVM属于软件层,管理着底下的硬盘分区,其好处是可以动态调整LV的大小、动态增加PV(物理卷)到VG(卷组)以增大VG容量、创建LV快照等,使得用户在LV容量不够用的情况下能够直接调整LV大小来满足,而不需要重新对底下的物理硬盘进行分区。我们这里主要用到LVM的快照功能来备份VM数据,具体如下:
假设物理服务器名为Server1,其上某一虚拟机名为VM1,VM1数据存放在LV-VM1逻辑卷上,该逻辑卷隶属于名为VgVm的卷组。在某一时刻,VM1数据是完好的,我们需要将这一时刻的数据进行备份,以防VM1数据在将来某一时刻被破坏时能恢复到这一时刻的状态。首先创建一个逻辑卷快照,命令如下:
lvcreate –L 1G –s –n LV-VM1Snapshot /dev/VgVm/LV-VM1
其中“1G”为要创建的快照的大小,这个大小根据需要制定。需要注意的是,如果指定的值太小,快照在其生命周期内发生溢出的话,该快照将无效,因此创建时需要对将要写入快照的数据量有一个合理的预估。“LV-VM1Snapshot”为快照名称,其他参数可参看相应的帮助文档。
LVM快照使用的是Copy-on-write(写时复制)机制,在快照创建之后,当有数据要往LV-VM1卷上某一位置写入时,LVM会将这一位置的数据拷贝到LV-VM1Snapshot快照逻辑卷上,然后再将新数据写入LV-VM1,这样就起到了备份旧数据的作用。而在实际的实现中,LVM可能根本不会去拷贝数据,而是开辟新的位置写入新数据,然后调整指向数据块的指针值来达到目的,所以速度会很快。在这里,我们只需要了解写时复制就够了,不必深究实现细节。
以上快照创建之后,我们需要一种方法来远程访问这个快照,于是NBD派上用场了。NBD作为网络块设备,其内容来源为网络上的服务器,其组成为Server/Client模型。Client机器像访问本地磁盘一样访问数据,而真正的内容存储在Server上。Client机器上需要安装NBD内核模块,当Client要访问Server上的数据时,该内核模块将请求发往Server,Server端有一个守护进程叫nbd-server,负责解析接收到的请求并读取数据然后返回给Client。
这里需要两台物理服务器,其中一台为上面提到的Server1,我们把它当作NBD的Server端,另一台当作NBD的Client端,假设名为Server2。现在需要在Server1和Server2上安装NBD,分别在两台服务器上进行以下步骤进行安装:
下载最新的安装包:nbd-3.2.tar.bz2,进入到安装包所在目录,执行以下命令:
tar jxf nbd-3.2.tar.bz2
该命令会解压生成目录nbd-3.2。接着执行命令:
cd nbd-3.2
./configure //这一步若提示“missing glib”,需要先执行apt-get install libglib2.0-dev
make && make install
到此,Server1和Server2上都安装好了NBD服务。
在Server1上执行命令:
nbd-server 1234 /dev/VgVm/ LV-VM1Snapshot
其中1234为端口号,可灵活指定,后面是要通过NBD导出的逻辑卷名,这里为上面创建的快照卷。
Server2作为NBD的Client端,需要安装内核模块,执行以下命令安装:
insmod /lib/modules/xxx/kernel/drivers/block/nbd.ko
其中的xxx因系统而异。
安装完内核模块后,若执行命令“ls /dev”,则可看到/dev目录下多了nbd0、nbd1等设备。
在Server2上执行命令:
nbd-client /dev/nbd0
其中为端口号,/dev/nbd0表示镜像设备,访问/dev/nbd0等同于访问Server1上的快照卷“/dev/VgVm/ LV-VM1Snapshot”。如果需要将快照内容拷贝到Server2上,只需要对/dev/nbd0进行dd即可,也可mount设备/dev/nbd0然后访问其中的文件。
LVM+NBD实现VM数据备份和迁移的更多相关文章
- Linux文件系统应用---系统数据备份和迁移(用户角度)
1 前言 首先承诺:对于从Windows系统迁移过来的用户,困扰大家的 “Linux系统下是否可以把系统文件和用户文件分开到C盘和D盘中” 的问题也可以得到完满解决. 之前的文章对Linux的文 ...
- Serv-U 的升级及数据备份和迁移【转】
Serv-U 配置备份 在serv-u7.x及以上版本安装目录下,有一个文件Serv-U.Archive是serv-u的配置文件,有一个users文件夹是Serv-U的域和用户的信息,那么我们只需 ...
- mysql 数据备份及数据迁移
一.使用mysql数据导出进行备份时,会备份整个表的数据,有时候只想备份一部分数据,这个时候可以使用如下方法: 1. 使用insert into 和 select结合: insert into tal ...
- velero 备份、迁移 kubernetes 应用以及持久化数据卷
velero 是heptio 团队开源的kubernetes 应用以及持久化数据卷备份以及迁移的解决方案,以前的名字为ark 包含以下特性: 备份集群以及恢复 copy 当前集群的资源到其他集群 复制 ...
- elasticsearch1.0 升级2.2的数据备份和恢复
近期由于elasticsearch的版本升级,需要研究下elasticsearch的快照(snapshot)和恢复(restore)功能. 先说下背景,目前环境采用的是elasticsearch1 ...
- MySQL基础之第16章 数据备份与还原
16.1.数据备份 16.1.1.使用 mysqldump 命令备份 mysqldump [OPTIONS] database [tables]mysqldump [OPTIONS] --databa ...
- ocp11g培训内部教材_053课堂笔记(043)_数据备份
053:数据库高级管理: 目录 第一部分:数据库备份与恢复... 4 第一章:备份恢复概述... 4 1.1 备份的意义: 4 1.2 数据库故障的类型:... 4 1.3 制定你的备份和恢复的计划. ...
- MySQL数据备份和恢复
1.数据备份 mysqldump -uroot -p databasename > file.sql 2.数据还原 mysql -u root -p databasename < file ...
- MySQL(十四)之数据备份与还原
前言 上一篇分享了关于MySQL事务的知识,在我们数据库中最重要的就是数据了,所以数据的备份就显的特别的重要! 为什么要备份数据? 在生产环境中我们数据库可能会遭遇各种各样的不测从而导致数据丢失, 大 ...
随机推荐
- iphone数据库(sqlite3)的用法操作oc,xcode
首先你在用之前要在项目中加入libsqlite3.dylib 1.定义模型 [cpp] #import <Foundation/Foundation.h> #import " ...
- Etree方式解析xml知识积累
movies.xml: <collection shelf="New Arrivals"> <movie title="Enemy Behind&quo ...
- Convolution Fundamental I
Convolution Fundamental I Foundations of CNNs Learning to implement the foundational layers of CNN's ...
- BZOJ 4589 Hard Nim ——FWT
[题目分析] 位运算下的卷积问题. FWT直接做. 但还是不太民白,发明者要承担泽任的. [代码] #include <cstdio> #include <cstring> # ...
- 雅礼培训 Problem B 【图论 + 贪心】
题意 A和B在树上轮流选点,记A的联通块个数为\(x\),B的联通块个数为\(y\) A使\(x - y\)最大,B使\(x - y\) 二人采取最优策略,求\(x-y\) 题解 树联通块个数 = 点 ...
- P1122 最大子树和 (树形DP)
题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题.于是当日课后,小明 ...
- 空指针问题(java.lang.NullPointerException)
在Java中对值为null的指针调用任何方法,就会引发空指针异常(java.lang.NullPointerException).空指针异常绝对是Java中最难查找和调试的一种异常,你永远无法得到任何 ...
- AXMLPrinter2.jar反编译xml文件
apk里的AndroidManifest.xml 为二进制文件,可通过AXMLPrinter2.jar包反编译出来 cmd命令行运行一下命令: java -jar AXMLPrinter2.jar A ...
- *Codeforces961G. Partitions
$k \leq n \leq 100000$,求式子$Ans=\sum_{i=1}^n w_i\sum_{j=1}^n j\binom{n-1}{n-j} \{ ^{n-j}_{k-1} \}$. 题 ...
- Jsp中路径问题
${pageContext.request.contextPath}”的作用是取出部署的应用程序名,这样不管如何部署,所用路径都是正确的. <!--使用绝对路径的方式引入CSS文件-->& ...