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事务的知识,在我们数据库中最重要的就是数据了,所以数据的备份就显的特别的重要! 为什么要备份数据? 在生产环境中我们数据库可能会遭遇各种各样的不测从而导致数据丢失, 大 ...
随机推荐
- MFC下拉框
在函数OnInitDialog()中添加一下语句可以添加选项到下拉框中 m_comboBox.AddString(_T("ALKATIP Basma Tom")); m_combo ...
- apache下虚拟域名配置
在我们开发中通过虚拟域名来访问一个指定的项目确实很方便,接下来教大家如何通过手动的方式去配置虚拟域名(已apache服务器为例) 一.首页我们得找到host文件.windows下这个文件在c盘中WIN ...
- CSAPP学习笔记—虚拟内存
CSAPP学习笔记—虚拟内存 符号说明 虚拟内存地址寻址 图9-12展示了MMU如何利用页表来实现这种映射.CPU中的一个控制寄存器,页表基址寄存器(Page Table Base Register, ...
- 一堆Offer怎么选?这样做就不纠结了
有个朋友,工作了10年左右,春节后换工作,拿了三个Offer(西安): 通信行业的一家研究所,软件开发工程师,月薪7K,承诺有月奖金.年终奖金 一家做大数据的公司,软件开发工程师,月薪15K,13薪 ...
- xmpp 与服务器连接并身份验证成功
* XMPP的特点,所有的请求都是通过代理的方式实现的 * * 因为xmpp是经由网络服务器进行数据通讯的,因此所有的,因此所有的请求都是提交给服务器处理 * * 服务器处理完毕止呕,以代理的方 ...
- BZOJ 2882 工艺 ——后缀自动机 最小表示法
先说后缀自动机的做法. 直接把S串复制一遍成SS,然后建立后缀自动机,go边相当于在当前字符的后面插入,而son边可以看作在字符串前面加一个字符. 所以贪心的走字典序最小的边即可,而且根据后缀自动机的 ...
- 【二叉搜索树】hdu 3791
http://acm.hdu.edu.cn/showproblem.php?pid=3791 [注意] 是看树的形态是否一样,而不是中序遍历的结果 [Accepted] #include<ios ...
- C/C++ 程序中调用命令行命令并获取命令行输出结果
在 c/c++ 程序中,可以使用 system()函数运行命令行命令,但是只能得到该命令行的 int 型返回值,并不能获得显示结果.例如system(“ls”)只能得到0或非0,如果要获得ls的执行结 ...
- gulp 环境搭建
wind+r弹出cmd命令窗口 要先安装node及npm,检查是否安装成功,node -v,npm -v可查看nod及npm的版本号. 安装gulp之前我们需要安装nodejs的环境,检测能够正常使用 ...
- 虚拟机centos 里tomcat的端口映射到主机 Windows里面