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