为自管理部署配置日志
在此页面上
MongoDB使用预写入式记录到磁盘上的日志来保证写入操作的持久性。
WiredTiger 存储引擎崩溃后不需要通过记录日志来保证一致状态。在恢复期间,数据库将恢复到最后一个一致的检查点。但是,如果 MongoDB 在检查点之间意外退出,则需要记录日志来恢复最后一个检查点之后发生的写入操作。
注意
您不能为使用WiredTiger存储引擎的副本集成员指定 --nojournal
选项或storage.journal.enabled: false
。
启用日志功能后,如果mongod
意外停止,该程序可以恢复写入日志的所有内容。 MongoDB将在重启时重新应用写入操作并保持一致的状态。 默认,最大的丢失写入(即未对日志进行的写入)是最后100毫秒内进行的写入,加上执行实际日志写入所需的时间。 有关默认的更多信息,请参阅commitIntervalMs
。
步骤
禁用日志
警告
不要在生产系统上禁用日志功能。
您不能为使用WiredTiger存储引擎的副本集成员指定
--nojournal
选项或storage.journal.enabled: false
。
要为独立运行运行的部署禁用日志功能,请使用 命令行选项启动mongod
--nojournal
。
获取提交确认
监控日志状态
serverStatus
命令/ db.serverStatus()
方法返回 wiredTiger.log
,其中包含日志的统计信息。
意外关闭后恢复数据
崩溃后重新启动时,MongoDB 会在服务器可用之前播放位于日志目录中的所有日志文件。如果 MongoDB 必须重新播放日志文件,mongod
会在日志输出中记录这些事件。
没有理由运行 --repair
。
更改 WiredTiger 日志压缩器
对于 WiredTiger 存储引擎,MongoDB 默认使用snappy
压缩器作为日志。为mongod
实例指定不同的压缩算法或不进行压缩:
提示
如果在此过程中遇到 mongod
非正常关机,则必须使用旧的压缩器设置来使用日志文件进行恢复。恢复后,您可以重试该过程。
使用以下步骤更改独立 mongod
实例的日志压缩器:
将
storage.wiredTiger.engineConfig.journalCompressor
设置更新为新值。如果使用命令行选项而不是配置文件,则必须在下面的重启过程中更新
--wiredTigerJournalCompressor
命令行选项。干净关闭
mongod
实例。 示例,将mongosh
连接到实例并发出db.shutdownServer()
:db.getSiblingDB('admin').shutdownServer() 确认该进程停止运行后,重新启动
mongod
实例:如果您在使用配置文件:
mongod -f <path/to/myconfig.conf> 如果使用命令行选项而不是配置文件,请更新
--wiredTigerJournalCompressor
选项。mongod --wiredTigerJournalCompressor <differentCompressor|none> ...
使用以下过程更改副本集成员的日志压缩器:
注意
以下过程涉及在没有日志的情况下将副本成员作为独立节点重新启动。
干净关闭
mongod
实例。 示例,将mongosh
连接到实例并发出db.shutdownServer()
:db.getSiblingDB('admin').shutdownServer() 更新配置文件以准备以独立运行的实例重新启动:
将
storage.journal.enabled
设置为false
。注释掉部署的复制设置。
在
setParameter
部分中将参数disableLogicalSessionCacheRefresh
设置为true
。
例如:
storage: journal: enabled: false #replication: # replSetName: replA setParameter: disableLogicalSessionCacheRefresh: true 如果使用命令行选项而不是配置文件,则必须在重启期间更新命令行选项。
重新启动
mongod
实例:如果您在使用配置文件:
mongod -f <path/to/myconfig.conf> 如果使用命令行选项而不是配置文件,
包含
--nojournal
选项在
--setParameter
选项中将参数disableLogicalSessionCacheRefresh
设置为true
。mongod --nojournal --setParameter disableLogicalSessionCacheRefresh=true ...
干净关闭
mongod
实例:db.getSiblingDB('admin').shutdownServer() 确认该进程不再运行。
更新配置文件,以准备使用新的日志压缩器作为副本集成员重新启动:
取消对部署的复制设置的注释。
删除
disableLogicalSessionCacheRefresh
参数。删除
storage.wiredTiger.engineConfig.journalCompressor
设置以使用默认日志压缩器或指定新值。
例如:
storage: wiredTiger: engineConfig: journalCompressor: <newValue> replication: replSetName: replA 如果使用命令行选项而不是配置文件,则必须在下面的重启过程中更新命令行选项。
以副本集成员身份重新启动
mongod
实例:如果您在使用配置文件:
mongod -f <path/to/myconfig.conf> 如果使用命令行选项而不是配置文件:
删除
--nojournal
选项。删除
--wiredTigerJournalCompressor
命令行选项以使用默认日志压缩器或更新为新值。包括复制命令行选项以及副本集成员的任何其他选项。
删除
disableLogicalSessionCacheRefresh
参数。
mongod --wiredTigerJournalCompressor <differentCompressor|none> --replSet ...
使用以下过程更改分分片副本集或配置服务器副本集成员的日志压缩器:
注意
以下过程涉及在没有日志的情况下将副本成员作为独立节点重新启动。
干净关闭
mongod
实例。 示例,将mongosh
连接到实例并发出db.shutdownServer()
:db.getSiblingDB('admin').shutdownServer() 更新配置文件以准备以独立运行的实例重新启动:
将
storage.journal.enabled
设置为false
。将参数
skipShardingConfigurationChecks
设置为 true。在
setParameter
部分中将参数disableLogicalSessionCacheRefresh
设置为true
。注释掉部署的复制设置。
注释掉
sharding.clusterRole
设置。如果未显式设置,则将
net.port
设置为成员的当前端口。
例如:
storage: journal: enabled: false setParameter: skipShardingConfigurationChecks: true disableLogicalSessionCacheRefresh: true #replication: # replSetName: shardA #sharding: # clusterRole: shardsvr net: port: 27218 如果使用命令行选项而不是配置文件,则必须在重启期间更新命令行选项。
重新启动
mongod
实例:如果您在使用配置文件:
mongod -f <path/to/myconfig.conf> 如果使用命令行选项而不是配置文件:
包括
--nojournal
选项。将参数
skipShardingConfigurationChecks
设置为 true。在
--setParameter
选项中将参数disableLogicalSessionCacheRefresh
设置为true
。删除
--shardsvr
/--configsvr
选项。显式将
--port
设为实例的当前端口。
mongod --nojournal --setParameter skipShardingConfigurationChecks=true --setParameter disableLogicalSessionCacheRefresh=true --port <samePort> ...
干净关闭
mongod
实例:db.getSiblingDB('admin').shutdownServer() 确认该进程不再运行。
更新配置文件以准备使用新的日志压缩器重新启动:
删除
disableLogicalSessionCacheRefresh
参数设置。取消对部署的复制设置的注释。
取消对
sharding.clusterRole
设置的注释。删除
storage.wiredTiger.engineConfig.journalCompressor
设置以使用默认日志压缩器或指定新值。
例如:
storage: wiredTiger: engineConfig: journalCompressor: <newValue> replication: replSetName: shardA sharding: clusterRole: shardsvr net: port: 27218 如果使用命令行选项而不是配置文件,则必须在下面的重启过程中更新命令行选项。
以副本集成员身份重新启动
mongod
实例:如果您在使用配置文件:
mongod -f <path/to/myconfig.conf> 如果使用命令行选项而不是配置文件:
删除
--nojournal
选项。删除
disableLogicalSessionCacheRefresh
参数。删除
--wiredTigerJournalCompressor
命令行选项以使用默认日志压缩器或更新为新值。包括
--shardsvr
/--configsvr
选项。包括复制命令行选项以及副本集成员的任何其他选项。
mongod --shardsvr --wiredTigerJournalCompressor <differentCompressor|none> --replSet ...