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
关闭请求,在请求关闭之后进入静默期。静止期由以下各项指定:
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。
该操作为 shutdown
命令提供一个包装器。
行为
对于通过身份验证启动的 mongod
,您必须通过经过身份验证的连接运行 db.shutdownServer()
。有关详细信息,请参阅访问控制。
对于在没有身份验证的情况下启动的 mongod
,必须从连接到 localhost 接口的客户端运行 db.shutdownServer()
。例如,在与 mongod
相同的主机上运行 mongosh
并指定 --host "127.0.0.1"
选项。
db.shutdownServer()
(针对副本集节点)
如果mongod
副本集节点正在运行某些操作(例如索引构建),db.shutdownServer()
将失败。您可以指定 force: true 来将索引构建进度保存到磁盘。mongod
在重新启动时会恢复索引构建,并从保存的检查点继续运行。
关闭副本集主节点、从节点或 mongos
从 MongoDB 5.0 开始,mongod
和 mongos
进入静默期,以允许所有正在进行的数据库操作在关闭之前完成。
尝试降级到从节点。
如果降级失败,并且:
进入静默期。
结束所有剩余的数据库操作。
关闭。
对于 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。
警告
强制关闭主节点可能会导致所有尚未复制到从节点的写入操作发生回滚。
访问控制
要在实施身份验证的 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 })