首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 IBM Spectrum Protect for Linux on Power 备份和还原 MongoDB 数据的方法-4

使用 IBM Spectrum Protect for Linux on Power 备份和还原 MongoDB 数据的方法-4

关于备份流程IBM Spectrum Protect 有一个名为 backup                    imagedev/vg/logical_volume 的内置方法。在 Linux                系统上,此方法运行一个备份过程,该过程涉及使用 Linux 的内置 LVM 来备份指定的逻辑卷。具体来讲,LVM 创建了一个逻辑卷快照,IBM                Spectrum Protect 创建了该快照的备份,并将其上传到 IBM Spectrum Protect 服务器。
LVM 快照的工作方式是,在卷组的空闲空间中创建逻辑卷的写时拷贝克隆。这实际上意味着,通过在卷组的空闲空间中创建一个虚拟驱动器,LVM                创建了实际的逻辑卷的虚拟副本。它在虚拟快照驱动器中存储硬链接,这些链接指向真实逻辑卷上的数据。这意味着一个静态数据集上的快照几乎不占(或完全不占)存储空间(硬链接的存储空间可忽略不计)。有数据要写入原始副本时,会将原始数据复制到该快照,然后才会将新数据写入实际磁盘。也就是说,在运行该命令的时刻开始执行时间点备份,与此同时,可以保持实例正常运行,并对数据库执行新的写入操作。快照始终包含您启动快照时在逻辑卷上包含的准确数据。
一定要注意的是,MongoDB 自动创建的日志文件也包含在此快照中。日志文件是 MongoDB                跟踪在写入磁盘之前执行的最新更改的方法。这在备份流程中特别重要,因为 MongoDB                将在内存中存储一些数据,然后将其批量写入磁盘中。通过备份日志,我们拥有了已在数据库上发生但还未完全写入磁盘的所有事务的记录。快照功能可以在完全相同的时间捕获数据库和日志文件的状态,以确保该过程中不会丢失任何数据。MongoDB                将在还原时读取日志文件并应用所有待处理或未完成的更新。
当然,还需要注意一些存储考虑因素,而且各个实例的考虑因素可能有所不同。从逻辑上讲,实时备份期间更改的所有数据都会写入磁盘。这个快照空间来自逻辑卷所属的卷组的空闲空间。卷组中需要有足够的空闲空间,以存储备份期间可能发生的所有更改。在最糟糕的情况下,卷组中的空闲空间量需要与逻辑卷占用的空间相等。但是,根据数据库在备份时的重写比例,通常不会出现这种情况。此外,可向卷组添加用于备份的空间,以后再删除它。
尽管需要额外的磁盘空间,但它提供了执行实时备份的能力。我们在备份时不需要停止任何数据库服务器。所以,在执行备份的过程中不会有显著的性能影响。分片中的主服务器仍将全速运行,只有备份服务器正在处理的查询的读取时间有所减少。也可以通过一些特殊副本服务器模式消除此影响,比如                    Hidden 可以预防在备份服务器上发生读操作。
另外值得注意的是,这是 MongoDB 目前推荐的备份方法,而且许多云备份公司目前在采用该方法。MongoDB 提供了一些备份和转储工具,但 IBM                Spectrum Protect 提供了一种实施 LVM 快照备份的更简洁方式,而且它在后端服务器上存储和保护文件。
实际的 IBM Spectrum Protect                命令非常简单。在所有备份服务器上同时发出以下命令:
dsmc backup image /dev/volumeGroup/data
这是通过客户端服务器上的命令行启动备份的基本命令,但您应了解其中的某些部分和选项。
首先,dsmc 是 Linux 命令行上的 IBM Spectrum Protect 命令,程序需要响应该命令。我们从                shell 运行的所有 IBM Spectrum Protect 命令都以 dsmc 开头。
backup image 命令告诉 IBM Spectrum Protect 要执行的操作                (backup),以及要使用的技术 (image)。
此命令的最后一部分是需要备份的逻辑卷名称。一定要注意的是,必须使用设备路径                (/dev/volume_group/volume),而不是仅使用挂载点的名称(比如 /data)。IBM Spectrum                Protect 对使用文件系统挂载点(比如 /data)有不同的解释,而且它将尝试执行文件系统备份,而不是 LVM 逻辑卷快照。
还有另外几个很有用并值得了解的命令。
第一个是 snapshotcahesize。这是一个选项,允许您设置 IBM Spectrum Protect                在卷组中保留的空间占逻辑卷总大小的比例。所以,如果 /data 目录为 100 GB,将 10 传递给此选项会导致 LVM                在卷组中为快照保留 10 GB 的空间。如果在备份期间,最初的 100 GB 中有超过 10 GB 的内容发生更改,IBM Spectrum                Protect 代理会返回错误,备份将失败。在任务关键型、时间非常敏感的备份中,您可能希望卷组中的所有逻辑卷空间都是空闲且未分配(在本例中,总空间为                100                GB)。
dsmc backup image -snapshotcachesize=10 /dev/volumeGroup/data
请记住,默认值为 100%。因此,如果不使用此标志,卷组空闲空间必须大于或等于正使用的逻辑卷的实际大小。在我们的测试中,我们使用的值约为                25,而且绝不会耗尽空间。应该逐个案例地监控和设置此值。您还会注意到,该标志通过一个等号与该值连接,这与 Linux 标准不同。
指定 55%                的缓存大小时,该命令如下所示:
dsmc backup image-snapshotcachesize=55 /dev/volumeGroup/data
最后一个重要命令行选项是 compression。此选项允许您压缩此备份,然后再将它上传到 IBM Spectrum Protect                服务器。稍后我们将详细介绍压缩。该命令如下所示:
dsmc backup image -compressi=yes /dev/volumeGroup/data
剩下的所有工作就是备份我们的 MongoDB 集群了。借助正确设计的 LVM 布局和精心规划的配置,IBM Spectrum Protect                可用一条命令完成备份。
您应该知道这是一个时间点备份。此备份的目的是在启动备份流程时捕获数据库的完美副本。尽管 MongoDB                数据服务器正在运行,而且正在执行读写操作,但备份的数据是启动备份那一刻位于磁盘上的数据。在启动到完成备份流程的过程中传入或删除的所有数据,都会在服务器的当前状态中反映出来,而不是反映在备份数据中。
运行命令可采用一些不同的命令运行方式来执行备份流程。您需要向 MongoDB 发出一些不同的命令,还要发出一个 IBM Spectrum Protect                命令。对这些命令编写脚本的确切方法取决于数据库管理员的脚本偏好和技能集。编写脚本过程中的一个非常重要的因素是,所有 IBM Spectrum                Protect                备份流程几乎都需要同时启动。为了顺利获得时间点快照,您可能不希望将任何数据传入到无法在配置服务器中识别的任何数据服务器中。此数据将孤立地保存在数据库中,配置数据库中没有它的引用,所以它毫无意义!要尽量避免这种情况,需要一种可靠的同步机制。我们相信一些方法可以满足此要求:
  • cron 和 shell 脚本-用 shell 脚本将此任务编写为脚本,然后在所有备份系统上运行一次同步的                    cron,这是执行 Linux 管理的典型方式。您可能需要观察 IBM Spectrum Protect                    服务的状态,以确保同时在所有系统上执行备份,并确保备份相对不容易出错。
  • MongoDB                    命令-向正在运行的数据库发出关闭和启动命令可能有点棘手。但是可通过许多方式完成此任务。可以用                    JavaScript(mongos 原生语言)实际编写关闭命令,并通过 bash 将该 JavaScript 文件传递给 MongoDB                    shell。还有一些 Python 驱动程序(比如 PyMongo),如果这是您首选的脚本编写方法。可以从您管理 MongoDB 所需的                    PyMongo 驱动程序执行任何操作。您能使用的每种语言都有驱动程序。
  • 自动化软件-这包括 Chef、Puppet、Ansible 和 SaltStack                    等软件。许多公司已在使用这些服务来管理其基础架构,而且对 MongoDB 使用这些服务有很多好处。可通过添加新系统、分片和副本来扩展                    MongoDB。集群可能很快变复杂,而且您不希望手动管理它。但具体来讲,在备份方面,可使用这些服务从单一控制点管理备份。这使您能通过自动化软件同步所有服务器。在本文中,我们选择使用                    ansible 来构建和备份我们的 MongoDB 集群。它不仅灵活,而且易于使用。
返回列表