草庐IT

VMware环境下使用存储的快照(CDP)功能做数据备份

血灰 2023-05-05 原文

目前的IT环境中对数据安全性要求越来越高,核心业务系统的备份肯定是绝对必要的,可以说数据的备份在IT环境中越来越重要。

但是随着系统不断的发展备份上也会遇到一些问题,从我的角度大概遇到过这2种情况:

1.核心业务系统数据量巨大,就会遇到两个最明显的问题,一是一个备份窗口完成不了整个系统的备份,二是如果资金紧张很难找到对应大小的空间来存储备份。

2.不重要的业务系统角色尴尬,例如云桌面这种虚拟机,给他备份感觉没那么必要,不备份真的出现误删等情况也很恶心。

所以近几年感觉备份系统逻辑下沉了,好多场景下除了传统业务层面的备份以外,存储层面的备份应用也越来越多。这不是说传统的NBU、TSM还有数据库自身的RMAN等不重要了,但是随着存储技术的发展从存储层面解决备份问题可能更加高效。(单独存储本身进行备份的话可靠性目前感觉还是差点意思,现在存储厂商针对备份可靠性大多配合其他的产品或者插件进行的,这里就不具体展开说了)

话说回刚列举的两个场景现在从存储层面就比较容易解决。通过存储的快照或者CDP技术不但可以秒级(有的存储能实现写入流级别,就是每次数据写入都有记录)的备份,而且可以使用很少的空间进行大规模的备份,也就是只要写到这个存储的数据、虚拟机都可以实现存储级别的备份。

下面就举个例子:

首先我要声明,这个例子肯定有自己的局限性,主要是想说现在存储快照(CDP)+主机,存储快照(CDP)+VMware虚拟化环境比较容易实现存储级别简单的备份,其他的存储快照(CDP)+KVM或者其他的华为虚拟化等稍微麻烦点我会在另外帖子里边再说。再就是这种架构生产中用肯定是可行的,可以用来应急,但是不要把所有希望都寄托在这个架构上,毕竟数据无价,而且这个架构太简单不能保证100%数据都可用(比如一些数据库存储过程没有完成的情况下,存储做了快照这种数据可能就不可用)。

介绍一下环境,这里用的是两台华为 Oceanstor Dorado 6000做的双活,划分LUN到VMware的集群中,然后创建的Datastorage虚拟机创建在Datastorage上,LUN做的存储快照4小时一次,保留6次。比较简单传统的双活数据中心架构(当然这个实验和双活数据中心没关系)。逻辑架构如下图:

  1. 找到Datastorage,并把测试的虚拟机迁移到这个Datastorage上面。这里选的是datastore_compute_hb,可以看到目前只有一个测试用的虚拟机在这个Datastorage上面且没有其他的文件

 2.找到这个Datastorage对应的存储中的LUN

3.在测试虚拟机上新建个性文件

4.在存储中手动给这个LUN做个快照,圈起来的位置是快照的名称

5.在虚拟机中把个性文件删除

6.在存储中找到刚新建的快照执行新建副本

        这里要说明一下为啥要创建快照副本,每一个快照我们都可以把他看成一个可挂载的LUN,但是类似VMware环境下一般的一个LUN做成的Datastorage里边可能有多个虚拟机或者文件,如果我们直接去操作LUN的快照的话影响面会非常大,所以不建议直接去操作LUN的快照,建议在快照的基础上新建快照的副本,这样最大限度的保护原数据的完整性。

7.把创建好的快照副本挂载给ESXi主机(为了方便后续操作的安全性,我新建一个LUN组和挂载关系,这个操作一般没啥问题,所以如果时间紧急的话可以直接把快照副本加入到原有的LUN组中就可以映射到主机了)

8.在ESXi主机中扫描磁盘并恢复Datastorage

在主机配置里面先点重新扫描存储 

扫描完成后可以看到ESXi主机中已经能看到新给他映射的LUN(快照)了,虽然存储上我们知道他是快照,但是对于主机来说没有啥区别。

 

新起一个名字和原来的Datastorage做区别

这一定要选择分配新签名,否则在原Datastorage没有卸载的情况下会产生冲突

点击FINISH后系统会对集群里的主机进行重新扫描VMFS操作

扫描完成后新的Datastorage就可以看到并使用了

9.找回被删掉的文件

对于VMware虚拟机来说有两种方式,一种是重新注册虚拟机,把虚拟机启动起来,然后进行数据找回,这种要注意IP地址不要和原虚拟机冲突,再就是LUN快照的时候虚拟机是开机状态很容易造成磁盘锁文件导致新的虚拟机开不了机,另一种是直接在原虚拟机(或者其他的虚拟机)中挂载磁盘文件,这种方式就需要操作者对虚拟机的磁盘架构比较熟悉,不然很难找到具体的位置,尤其是LINUX上面在文件系统下会有LVM层,所以恢复起来还是稍微有点难度的。

其他的磁盘挂载方式基本就是操作系统基本的操作,需要操作系统层面进行处理,比如直接挂载给物理主机,或者刚提到的oracle RAC的ASM磁盘这种就需要专业人员处理,理论上磁盘数据肯定是不会丢的,操作系统中内存没有写入到硬盘的数据可能会丢失。

1)重新注册虚拟机方式

在新挂载的Datastorage中找到虚拟的VMX文件,点击注册虚拟机

注册完了以后发现刚标出的锁文件都被系统自动清除了,如果系统没有清除的话需要手动清除 

找到刚注册的虚拟机,一定要把配置里面的网络适配器的连接那点掉,要不然容易重新IP地址冲突

打开虚拟机电源,由于我们的操作相当于对虚拟机来说是强制断电的过程所以Windows会出现提示,Linux还容易出现文件系统损坏,这些都需要手动修复。

虚拟机开机成功后就可以找到刚手动删除的文件。

2)挂载磁盘文件方式

在原虚拟机上点击添加设备>现有硬盘

找到新的Datastorage中虚拟机磁盘的位置

进入操作系统中计算机右键>管理

扫描完成后可以看到新增加的磁盘

右键>联机

由于都是NTFS文件系统,操作系统自动给分区分了盘符,如果没有自动分配盘符的话需要手动分配一个盘符给对应的分区

到此就可以找回刚手动删除的个性文件了。

有关VMware环境下使用存储的快照(CDP)功能做数据备份的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  9. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  10. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

随机推荐