参考 > 管理 > MongoDB备份方法 > 备份和还原分片群集 > 还原分片群集
此过程从现有的备份快照(例如LVM快照)还原分片群集。源和目标分片群集必须具有相同数量的分片。有关为分片群集的所有组件创建LVM快照的信息,请参阅使用文件系统快照备份分片群集。
注意
mongodump
并且不能作为正在进行分片事务的4.2+分片群集的备份策略的一部分,因为使用创建的备份
不能保持分片事务的原子性保证。mongorestore
mongodump
对于具有正在进行中的分片事务的4.2+分片群集,请使用以下协调的备份和还原过程之一,该过程 确实维护了跨分片事务的原子性保证:
对于MongoDB 4.0和更早的部署,请参考手册的相应版本。例如:
对于使用加密模式的加密存储引擎AES256-GCM
,AES256-GCM
要求每个进程都使用唯一的计数器块值和密钥。
对于
配置了密码的加密存储引擎AES256-GCM
:
从4.2开始,如果您从通过“热”备份(即mongod
正在运行)获取的文件中还原,则MongoDB可以在启动时检测到“脏”密钥并自动翻转数据库密钥以避免IV(初始化向量)重用。
但是,如果您从通过“冷”备份获取的文件中恢复(即mongod
未运行),则MongoDB无法在启动时检测到“脏”密钥,并且IV的重用会使机密性和完整性保证无效。
从4.2开始,为避免从冷文件系统快照还原后重新使用密钥,MongoDB添加了一个新的命令行选项--eseDatabaseKeyRollover
。使用该--eseDatabaseKeyRollover
选项启动后
,mongod
实例将滚动使用AES256-GCM
密码配置的数据库密钥
并退出。
小费
AES256-GCM
加密模式,请不要复制数据文件或从文件系统快照(“热”或“冷”)还原。此过程使用默认配置为配置服务器副本集(CSRS)和每个分片副本集启动一个新副本集。要为还原的CSRS和分片使用不同的副本集配置,必须重新配置副本集。
如果您的源群集正常且可访问,请将mongo
外壳连接
到每个副本集中的主副本集成员,然后运行rs.conf()
以查看副本配置文档。
如果您无法访问源分片群集的一个或多个组件,请参考任何现有的内部文档,以重构每个分片副本集和配置服务器副本集的配置要求。
确保目标主机和源主机具有相同的MongoDB Server版本。要检查主机上可用的MongoDB版本,请从终端或外壳程序运行。mongod --version
有关安装的完整文档,请参阅 安装MongoDB。
如果要还原到现有群集,请关闭
目标主机上的mongod
或mongos
进程。
对于正在运行的主机mongos
,将mongo
外壳连接
到mongos
并db.shutdownServer()
从admin
数据库运行:
对于运行a的主机mongod
,将mongo
shell 连接
到mongod
并运行db.isMaster()
:
如果ismaster
为false,mongod
则为副本集的
辅助成员。您可以通过db.shutdownServer()
从admin
数据库运行将其关闭。
如果ismaster
为true,则mongod
是副本集的
主要成员。关闭设置的副本的次要构件第一。使用
rs.status()
标识副本集的其他成员。
主服务器在检测到大多数成员脱机后会自动降级。退出(db.isMaster
返回
)后,您可以安全地关闭ismaster: false
mongod
在目标主机上为还原的数据库文件创建目录。确保运行的用户
mongod
对该目录中的所有文件和子文件夹具有读取,写入和执行权限:
/path/to/mongodb
用您创建的数据目录的路径代替。在RHEL / CentOS,Amazon Linux和SUSE上,默认用户名是mongod
。
在目标主机上为mongod
日志文件创建目录
。确保运行的用户mongod
对该目录中的所有文件和子文件夹具有读取,写入和执行权限:
/path/to/mongodb/logs
用您创建的日志目录的路径代替。在RHEL / CentOS,Amazon Linux和SUSE上,默认用户名是mongod
。
在您的首选位置中创建配置文件。确保运行的用户mongod
对配置文件具有读写权限:
在RHEL / CentOS,Amazon Linux和SUSE上,默认用户名是mongod
。
在首选的文本编辑器中打开配置文件,并根据部署要求对其进行修改。或者,如果您有权访问的原始配置文件,请将其
mongod
复制到目标主机上的首选位置。
重要
验证您的配置文件是否包含以下设置:
storage.dbPath
必须设置为首选数据目录的路径。systemLog.path
必须设置为首选日志目录的路径net.bindIp
必须包含主机的IP地址。replication.replSetName
每个给定副本集中每个成员的值都相同。sharding.clusterRole
每个给定副本集中每个成员的值都相同。mongod
数据文件。¶选择与您的首选备份方法相对应的选项卡:
将LVM快照安装在目标主机上。挂载LVM快照的具体步骤取决于您的LVM配置。
以下示例假定使用“使用文件系统快照备份和还原” 过程中的“ 创建快照”步骤 创建的LVM快照。
此示例可能不适用于所有可能的LVM配置。请参阅系统的LVM文档,以获取有关LVM还原的更完整指南。
将mongod
数据文件从快照安装复制到B中创建的数据目录中
。准备要还原的目标主机:
该-a
选项以递归方式将源路径的内容复制到目标路径,同时保留文件夹和文件权限。
注释掉或忽略以下 配置文件设置:
要开始mongod
使用配置文件,请
--config
在命令行中指定选项,以指定配置文件的完整路径:
如果已mongod
配置为作为系统服务运行,请使用针对系统服务管理器的建议过程启动它。
使存储在所选备份介质中的数据文件可在主机上访问。这可能需要安装备份卷,在软件实用程序中打开备份,或使用其他工具将数据提取到磁盘。有关访问备份中包含的数据的说明,请参阅首选备份工具的文档。
将mongod
数据文件从备份数据位置复制到B中创建的数据目录
。准备要还原的目标主机:
该-a
选项以递归方式将源路径的内容复制到目标路径,同时保留文件夹和文件权限。
注释掉或忽略以下 配置文件设置:
要开始mongod
使用配置文件,请
--config
在命令行中指定选项,以指定配置文件的完整路径:
仅限Cloud Manager或Ops Manager
如果要手动还原Cloud Manager或Ops Manager备份,则必须disableLogicalSessionCacheRefresh
在启动之前指定
服务器参数。
如果已mongod
配置为作为系统服务运行,请使用针对系统服务管理器的建议过程启动它。
local
数据库。¶使用db.dropDatabase()
下降的local
数据库:
config.shards
。¶如果满足以下所有条件,则可以跳过此步骤:
在Config数据库中find()
的shards
集合上发出以下方法
。用分片的名称替换。默认情况下,分片名称是其副本集名称。如果使用命令添加了分片并指定了自定义
,则必须将其指定为。<shardName>
addShard
name
name
<shardName>
此操作返回类似于以下内容的文档:
重要
该_id
值必须与相应分片上文档中的shardName
值
匹配。在此过程后面的还原分片时,请验证中的字段是否与分片上的值匹配
。_id : "shardIdentity"
_id
shards
shardName
使用该updateOne()
方法更新
hosts
字符串,以反映计划的分片集名称和主机名列表。例如,以下操作使用来更新分片的 host
连接字符串:"_id" : "shard1"
重复此过程,直到所有分片元数据准确反映集群中每个分片的计划副本集名称和主机名列表。
对于CSRS中的每个副本集成员,mongod
在其主机上启动
。成功启动群集的所有其余成员后,将mongo
外壳连接到主副本集成员。在主要数据库中,使用rs.add()
方法添加副本集的每个成员。包括副本集名称作为前缀,后跟成员mongod
进程的主机名和端口
:
如果要添加具有特定副本member
配置设置的成员
,则可以将文档传递到rs.add()
,以定义成员主机名和members[n]
部署所需的任何设置。
每个新成员执行一次 初始同步以赶上主要成员。根据要同步的数据量,网络拓扑和运行状况以及每台主机的功能等因素,完成初始同步可能会花费较长的时间。
当您添加其他成员时,副本集可能会选择一个新的主副本。使用rs.status()
以识别构件是当前的主。您只能rs.add()
从主服务器运行。
该rs.reconfig()
方法基于作为参数传入的配置文档更新副本集配置。您必须reconfig()
针对副本集的主要成员运行。
参考步骤A中标识的副本集的原始配置文件输出。查看副本集配置 并根据需要应用设置。
mongod
数据文件。¶选择与您的首选备份方法相对应的选项卡:
将LVM快照安装在目标主机上。挂载LVM快照的具体步骤取决于您的LVM配置。
以下示例假定使用“使用文件系统快照备份和还原” 过程中的“ 创建快照”步骤 创建的LVM快照。
此示例可能不适用于所有可能的LVM配置。请参阅系统的LVM文档,以获取有关LVM还原的更完整指南。
将mongod
数据文件从快照安装复制到B中创建的数据目录中
。准备要还原的目标主机:
该-a
选项以递归方式将源路径的内容复制到目标路径,同时保留文件夹和文件权限。
注释掉或忽略以下 配置文件设置:
要开始mongod
使用配置文件,请
--config
在命令行中指定选项,以指定配置文件的完整路径:
如果已mongod
配置为作为系统服务运行,请使用针对系统服务管理器的建议过程启动它。
使存储在所选备份介质中的数据文件可在主机上访问。这可能需要安装备份卷,在软件实用程序中打开备份,或使用其他工具将数据提取到磁盘。有关访问备份中包含的数据的说明,请参阅首选备份工具的文档。
将mongod
数据文件从备份数据位置复制到B中创建的数据目录
。准备要还原的目标主机:
该-a
选项以递归方式将源路径的内容复制到目标路径,同时保留文件夹和文件权限。
注释掉或忽略以下 配置文件设置:
要开始mongod
使用配置文件,请
--config
在命令行中指定选项,以指定配置文件的完整路径:
仅限Cloud Manager或Ops Manager
如果执行Cloud Manager或Ops Manager备份的手动还原,则必须disableLogicalSessionCacheRefresh
在启动之前指定
服务器参数:
如果已mongod
配置为作为系统服务运行,请使用针对系统服务管理器的建议过程启动它。
__system
角色的临时用户。¶在此过程中,您将修改admin.system.version
集合中的文档
。对于执行身份验证的群集
,只有__system
角色会授予修改此集合的权限。如果群集不强制执行身份验证,则可以跳过此步骤。
警告
该__system
角色使其所有者有权对数据库中的任何对象执行任何操作。此过程包括有关删除在此步骤中创建的用户的说明。不要
让此用户超出此过程的范围。
考虑使用
配置的clientSource
身份验证限制来创建该用户,以便只有指定的主机才能作为特权用户进行身份验证。
作为身份验证与用户userAdmin
的角色上的
admin
数据库或
userAdminAnyDatabase
角色: