mongodb - MongoDB集群时间与挂钟时间相差太远
问题描述
我正在维护一个内部依赖于 Mongo DB 的火箭聊天服务器。最近 linux 机器的日期被意外更改为 2022 年,由于我将其更改回来,mongo 实例拒绝启动,声称“新集群时间 1666775701 与此节点挂钟时间 1603715107 太远”
如何从 mongo shell 将 mongo 的时钟设置回正确的时间?
解决方案
tldr
使用足够大的maxAcceptableLogicalClockDriftSecs来启动您的实例以覆盖该时间段。从错误消息看来 63060594 应该足够了,但要慷慨,例如 94608000(3 年)。服务器启动后备份数据。如果您负担得起,请核对数据库并从备份中恢复它。使用正常/默认 maxAcceptableLogicalClockDriftSecs 重新启动 mongo
解释
Mongo 因果一致性模型基于Lamport 逻辑时钟。它在 oplog 内部使用,所有复制逻辑都依赖它。
当您不小心将系统日期更改为未来时,时间戳会相应地提前。当您将系统日期回滚到基于 ntp 的时间时,您还需要重置时间戳。默认 maxAcceptableLogicalClockDriftSecs 为您提供 1 年的时间,这对于正常操作来说绰绰有余。
调整这个值可以让你启动 mongo 并恢复它的状态。它不会修复用户空间中的任何日期 - 这完全是您的责任。Mongo 知道从您的应用程序角度注意日期的含义。
您不需要使用自定义命令行参数启动火箭服务器 - 手动启动 mongo、备份数据、核对数据库、恢复数据、停止 mongod、启动火箭服务器。
推荐阅读
- angular-material - 如何在角度材料对话框中关闭 matdialog 时管理发送的内容
- vba - 只想刷新数据透视表而不刷新查询
- mysql - 如何根据不运行差异对记录进行分类?
- java - Spring Batch PathMatchingResourcePatternResolver.getResources() 不适用于 https url
- asp.net-core-mvc - 将授权策略应用于整个控制器时忽略消费属性
- javascript - Nuxt/Vue - 缩放内容以适应父 div
- flutter - 颤振标题不会改变
- python-3.x - 将多个文件从云存储加载到不同表中的大查询
- vba - PowerPoint vba 使用形状对象而不是形状名称对形状进行分组
- sql - 尝试通过 EntityManager 执行具有多个 CREATE VIEW 语句的脚本时出现 SQL 语法错误