Board logo

标题: 使用 IBM Spectrum Protect for Linux on Power 备份和还原 MongoDB 数据的方法-2 [打印本页]

作者: look_w    时间: 2017-12-19 19:53     标题: 使用 IBM Spectrum Protect for Linux on Power 备份和还原 MongoDB 数据的方法-2

MongoDB 环境设置依据最佳实践,为复制的 MongoDB 服务器设置副本和分片。
按照文章“”中的说明,将                MongoDB 安装在 IBM POWER8® 服务器上。
确保备份环境满足以下最低要求:
备份 MongoDB 的过程是本文的主要主题。本文不会介绍创建或维护生产 MongoDB 实例的整个过程。要获得关于该主题和其他 MongoDB                    配置的更多信息,请参考官方文档:http://docs.mongodb.org/manual/
IBM Spectrum Protect 资源和设置需要执行以下步骤来设置 IBM Spectrum Protect 服务器和客户端。
本文将重点介绍 IBM Spectrum Protect 的用法。要获得如何执行安装和设置的示例,请参考
实现我们的 IBM Spectrum Protect 代理备份的目标是,为 MongoDB                环境提供一个可完全在本地实施的稳固且可靠的备份解决方案。对于已在使用稳固的 IBM Spectrum Protect                软件的客户,或者要备份的内容不只是 MongoDB                的客户,这提供了一个统一的解决方案。此示例将展示多个分片,但也可以通过单个分片实现该示例。
捕获时间点备份的最佳方法是,跨所有已备份的服务器同时创建 LVM                快照。这些服务器继续在集群中运行,快照仅冻结正在备份的数据。完成备份后,服务器继续正常运行。所以,在这种备份方法中,任何 MongoDB                实例都不会宕机。本节将概述整个备份过程,具体命令会在测试部分给出。
IBM Spectrum Protect 按以下方式备份数据:
执行以下步骤来还原备份:
跟踪环境的主机名和配置文件可能变成一项日益复杂的任务。我们的解决方法是,使用通过 Ansible                生成的动态配置文件和主机名。无论采用哪种方法,设置和配置元数据都值得备份,因为所采用的方法可能导致系统恢复延迟。
测试方案AcmeAir 是一个示例应用程序,可用来验证 Spectrum Protect 如何实现 MongoDB 备份过程。可以在 上找到这个驱动程序的源代码和文档。
AcmeAir                是一个开源应用程序,用于模仿一个包含航班查询和订票系统的航空公司网站。一些客户将数据附加到他们的登录帐户,可以包括待预订的航班信息、多段预订信息、航班预订人信息和当前的客户在线会话。这需要使用                Node.js 环境来运行一个 Web 程序,该程序通过一个 JMeter 自动化驱动程序针对该环境来驱动流量。流量通过 API                发送到网页,而应用程序使用 Node.js 驱动程序针对我们的 MongoDB                系统来运行流量。“到底如何对数据进行分片?”的问题仍然存在。在此领域,MongoDB                主要利用动态分片值所带来的改进。现在,我们将介绍 AcmeAir 数据库的索引分片。
AcmeAir 数据库包含 5 个集合,每个集合在某个点上进行分片(例如                booking、flight、flightSegment)。对该数据库启用分片,然后 5                个集合中的每个集合都应获得自己的分片索引,而且每个集合都将独立地分片。
首先,我们需要在数据库中加载一些初始数据,并运行几次该驱动程序来获得一些测试数据。该数据库会为分片做好准备,但不会主动进行分片。我们这么做是因为我们不知道这些集合中将包含哪些值,也不知道值的分布情况。如果提前知道预期的分布,就可以在将数据添加到集合之前进行分片。然后,可以使用以下命令访问主服务器的                MongoDB shell:
mongo ipaddress:port
其中 port 是数据库的主要副本正在运行的端口。
然后,您将进入 MongoDB shell。接下来,键入以下命令:
use acmeair
这会将焦点切换到我们正在使用的正确数据库。
接下来,我们需要使用以下命令获取数据库中的所有集合:
db.getCollectionInfos()
这会提供数据库中存在的集合列表。在我们的 AcmeAir 示例中,来自此命令的输出如下所示:
rs1RIMARY> db.getCollectionInfos()

[
        {
                "name" : "airportCodeMapping",
                "options" : {
                }
        },
        {
                "name" : "booking",
                "options" : {
                }
        },
        {
                "name" : "customer",
                "options" : {
                }
        },
        {
                "name" : "customerSession",
                "options" : {
                }
        },
        {
                "name" : "flight",
                "options" : {
                }
        },
        {
                "name" : "flightSegment",
                "options" : {
                }
        }
]




也可以使用以下命令获得集合名称的压缩列表:
db.getCollectionNames()
获得的输出如下所示:
[
        "airportCodeMapping",
        "booking",
        "customer",
        "customerSession",
        "flight",
        "flightSegment"
]




拥有集合的名称后,可以使用以下命令找到组成它们的字段:
                                        db.collectionName.find()
其中 collectionName 是集合的实际名称,比如 airportCodeMapping。
以下是该命令的示例输出:
rs1RIMARY> db.airportCodeMapping.find()
{ "_id" : "BOM", "airportName" : "Mumbai" }
{ "_id" : "DEL", "airportName" : "Delhi" }
{ "_id" : "FRA", "airportName" : "Frankfurt" }
{ "_id" : "HKG", "airportName" : "Hong Kong" }
{ "_id" : "LHR", "airportName" : "London" }
{ "_id" : "YUL", "airportName" : "Montreal" }
{ "_id" : "SVO", "airportName" : "Moscow" }
{ "_id" : "JFK", "airportName" : "New York" }
{ "_id" : "CDG", "airportName" : "aris" }
{ "_id" : "FCO", "airportName" : "Rome" }
{ "_id" : "SIN", "airportName" : "Singapore" }
{ "_id" : "SYD", "airportName" : "Sydney" }
{ "_id" : "IKA", "airportName" : "Tehran" }
{ "_id" : "NRT", "airportName" : "Tokyo" }




Mongo 要求手动选择分片字段,在本例中,我们将选择 airportName 字段。
确定想要分片的字段后,是时候执行分片了。该过程的第一步是进入 mongos admin shell,您在上一步中应该已进入其中。
然后需要发出 use dataBaseName,将焦点切换到您选择的数据库。
对数据库中的每个集合重复接下来的步骤。请记住,正要分片的数据库是由这些集合组成的(大致等效于传统关系 SQL                数据库中的表)。基本上讲,分片过程就是基于集合的一个字段为集合建立索引,然后在该索引的中间点拆分该集合。
以下是操作步骤。





欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0