在版本5.0中进行了更改。
db.shutdownServer()安全彻底地关闭当前的
mongod或mongos进程。您必须对管理员数据库发出db.shutdownServer()操作。db.shutdownServer()采用以下语法:db.shutdownServer({ force: <boolean>, timeoutSecs: <int> }) 该方法采用以下字段:
字段说明可选。指定
true以强制关闭mongod或mongos。强制关闭会中断mongod或mongos上正在进行的任何操作,并可能导致意外行为。您可以使用
force暂停和恢复正在进行的索引构建。有关更多信息,请参阅有关副本集节点的db.shutdownServer()。可选。
从 MongoDB 5.0 开始,
mongod和mongos进入静默期,以允许所有正在进行的数据库操作在关闭之前完成。进入静默期。
结束所有剩余的数据库操作。
关闭。
对于
mongod从节点或mongos关闭请求,在请求关闭之后进入静默期。静止期由以下各项指定:
shutdownTimeoutMillisForSignaledShutdown服务器参数(如果SIGTERM信号已发送到mongod),或者mongosShutdownTimeoutMillisForSignaledShutdown服务器参数(如果将SIGTERM信号发送到mongos)。
mongod或mongos关闭时,客户端无法新建相关连接。timeoutSecs 指定一个时间段(以秒为单位)。默认为:
从 MongoDB 5.0 开始为 15 秒。
在 MongoDB 5.0 以前的版本中为 10 秒。
如果当前节点是副本集的主节点 (primary node in the replica set)节点,则
mongod会等待 timeoutSecs字段指定的秒数,让可选举节点赶上主节点,然后再降级主节点 (primary node in the replica set)节点。有关追赶时间的详细信息,请参阅复制延迟。如果当前节点在退出主节点 (primary node in the replica set)后处于
SECONDARY状态,则 timeoutSecs 中指定的任何剩余时间将用于静默期,以便完成现有操作。新操作将发送到其他副本集节点。
从MongoDB 5.0 开始,
mongos使用 timeoutSecs 作为静默期,以允许完成现有操作。新操作将发送到其他mongos节点。在 5.0 之前的MongoDB版本中,mongos会立即关闭并且不使用 timeoutSecs。
该操作为 shutdown 命令提供一个包装器。
兼容性
此方法可用于以下环境中托管的部署:
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
行为
对于在自管理部署上使用身份验证启动的 mongod,您必须通过经过身份验证的连接运行db.shutdownServer()。有关详细信息,请参阅访问控制。
对于在自管理部署上启动但未进行身份验证的mongod,您必须从连接到本地主机接口的客户端运行db.shutdownServer()。示例,在与mongod 相同的托管上运行带有 --host "127.0.0.1" 选项的 mongosh。
db.shutdownServer() (针对副本集节点)
如果 mongod副本集节点正在运行某些操作(例如索引构建),db.shutdownServer() 则会失败。您可以指定 force: true 将索引构建进度保存到磁盘。 mongod 在重新启动时恢复索引构建,并从保存的检查点继续。
关闭副本集主节点、从节点或 mongos
从 MongoDB 5.0 开始,mongod 和 mongos 进入静默期,以允许所有正在进行的数据库操作在关闭之前完成。
进入静默期。
结束所有剩余的数据库操作。
关闭。
对于 mongod 从节点或 mongos 关闭请求,在请求关闭之后进入静默期。
静止期由以下各项指定:
shutdownTimeoutMillisForSignaledShutdown服务器参数(如果SIGTERM信号已发送到mongod),或者mongosShutdownTimeoutMillisForSignaledShutdown服务器参数(如果将SIGTERM信号发送到mongos)。
mongod 或 mongos 关闭时,客户端无法新建相关连接。
timeoutSecs 指定一个时间段(以秒为单位)。默认为:
从 MongoDB 5.0 开始为 15 秒。
在 MongoDB 5.0 以前的版本中为 10 秒。
如果当前节点是副本集的主节点 (primary node in the replica set)节点,则
mongod会等待 timeoutSecs字段指定的秒数,让可选举节点赶上主节点,然后再降级主节点 (primary node in the replica set)节点。有关追赶时间的详细信息,请参阅复制延迟。如果当前节点在退出主节点 (primary node in the replica set)后处于
SECONDARY状态,则 timeoutSecs 中指定的任何剩余时间将用于静默期,以便完成现有操作。新操作将发送到其他副本集节点。
从MongoDB 5.0 开始,mongos 使用 timeoutSecs 作为静默期,以允许完成现有操作。新操作将发送到其他 mongos 节点。在 5.0 之前的MongoDB版本中,mongos 会立即关闭并且不使用 timeoutSecs。
警告
强制关闭主节点可能会导致所有尚未复制到从节点的写入操作发生回滚。
访问控制
要在 mongod 上运行db.shutdownServer() 以对自托管部署实施身份验证,经过身份验证的用户必须具有db.shutdownServer()权限。示例,具有内置角色hostManager 的用户就拥有相应的权限。
示例
关闭 mongod
db.getSiblingDB("admin").shutdownServer()
强制关闭 mongod
db.getSiblingDB("admin").shutdownServer({ "force" : true })
关闭超时时间较长的主节点 mongod
db.getSiblingDB("admin").shutdownServer({ "timeoutSecs": 60 })