shutdown
更改在版本5.0.
兼容性
此命令在以下环境中托管的应用程序中可用
MongoDB Atlas:云中MongoDB部署的完全托管服务
重要
此命令不支持M0、M2、M5和M10+集群。有关更多信息,请参阅不支持命令。
MongoDB企业版:基于订阅的自托管MongoDB版本
MongoDB Community:MongoDB的源代码开放、免费使用且可自行管理的版本
语法
该命令具有以下语法
db.adminCommand( { shutdown: 1, force: <boolean> timeoutSecs: <int>, comment: <any> } )
命令字段
该命令接受以下字段
字段 | 描述 |
---|---|
指定 | |
可选。指定 您可以使用 | |
可选。 从 MongoDB 5.0 开始,
对于 静默期由以下
客户端无法打开到正在关闭的 timeoutSecs 指定了一个时间长度,单位为秒。从 MongoDB 5.0 开始,默认值为
从 MongoDB 5.0 开始, | |
注释 | 可选。用户提供的注释,附加到此命令。一旦设置,此注释将出现在以下位置的此命令记录旁边
注释可以是任何有效的 BSON 类型(字符串、整数、对象、数组等)。 |
行为
对于使用 自管理部署的身份验证 启动的 mongod
,您必须通过认证连接运行 shutdown
。有关更多信息,请参阅 访问控制。
对于未开启身份验证的 mongod
,您必须从连接到本地接口的客户端运行 shutdown
。例如,可以在与 mongod
相同的主机机器上运行带有 --host "127.0.0.1"
选项的 mongosh
。
shutdown
在副本集成员上
如果副本集成员正在运行某些操作,如 索引构建,则 shutdown
将失败。您可以使用 force: true 来强制成员将索引构建进度保存到磁盘。当 mongod
重新启动时,它将恢复索引构建并从已保存的检查点继续。
关闭副本集主节点、副节点或 mongos
从 MongoDB 5.0 开始,mongod
和 mongos
进入静默期,以便在关闭之前允许任何正在进行的数据库操作完成。
尝试降至 副节点。
如果降级失败并且一个
执行了
shutdown
或db.shutdownServer()
命令,如果 force 字段为 true,或者
进入静默期。
结束所有剩余的数据库操作。
关闭。
对于 mongod
或 mongos
的关闭请求,静默期是在请求关闭后进入的。
静默期由以下
timeoutSecs 字段指定,如果执行了
shutdown
或db.shutdownServer()
命令,或者shutdownTimeoutMillisForSignaledShutdown
服务器参数,如果在mongod
上发送了SIGTERM
信号,或者mongosShutdownTimeoutMillisForSignaledShutdown
服务器参数,如果在mongos
上发送了SIGTERM
信号。
客户端无法打开到正在关闭的 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。
警告
强制关闭主节点可能会导致尚未复制到副节点的任何写入操作 回滚。
访问控制
要在强制shutdown
认证的 mongod
上运行 shutdown
,认证用户 必须 拥有 shutdown
权限。例如,具有内置角色 hostManager
的用户拥有适当的权限。
示例
关闭一个 mongod
db.adminCommand({ "shutdown" : 1 })
强制关闭 mongod
db.adminCommand({ "shutdown" : 1, "force" : true })
使用较长的超时时间关闭主节点 mongod
db.adminCommand({ "shutdown" : 1, timeoutSecs: 60 })