![如何将副本集成员的 MongoDB 存储引擎从 MMAPv1 更改为 WiredTiger](https://linux22.com/image/1596943/%E5%A6%82%E4%BD%95%E5%B0%86%E5%89%AF%E6%9C%AC%E9%9B%86%E6%88%90%E5%91%98%E7%9A%84%20MongoDB%20%E5%AD%98%E5%82%A8%E5%BC%95%E6%93%8E%E4%BB%8E%20MMAPv1%20%E6%9B%B4%E6%94%B9%E4%B8%BA%20WiredTiger.png)
我在副本集环境中(在 AWS 上的所有 3 个不同系统中)运行 Mongodb-3.4x 版本,即一个主服务器、一个辅助服务器(副本)和一个仲裁服务器。
我看到的问题是由于某种原因;主节点在“mmapv1”上运行,但副本节点(辅助节点)在“wiredTiger”存储引擎上运行。
现在,我如何将 Primary 更改为使用“WiredTiger”存储引擎而不是“MMAPv1”?
在这种情况下,任何帮助/建议都将非常感激。
谢谢
答案1
由于 WiredTiger 是 MongoDB 3.2+ 中的默认存储引擎,我猜您的部署是从早期版本的 MongoDB 升级而来的,其中 MMAPv1 是默认(并且在大多数情况下是唯一的)存储引擎。升级不会更改现有的存储引擎dbPath
。
要更改存储引擎,您需要重新同步该副本集成员的数据。有几种可能的方法,但无论哪种情况,我都建议进行完整备份作为预防措施,然后再继续。
替换当前主
由于您具有主从仲裁器配置,因此您可能希望在添加另一个运行 WiredTiger 的成员时保持数据冗余。添加具有默认配置的新副本集成员还可以减少确定任何现有配置参数是否特定于 MMAPv1 的工作量。
- 配置新主机和 MongoDB 3.4 副本集成员。理想情况下,您应该对所有副本集成员使用相同的 3.4.x 版本,并且这也应该是最新的 3.4.x(当前为 3.4.21)。
- 配置适当的
dbPath
,复制和安全的选项mongod
。 - 将此成员添加到副本集作为隐&列席(或者,用这个成员替换你的仲裁者)。因为你的副本集中已经有 3 个投票成员,所以你不想将总投票数更改为 4。
- 该新成员将执行初始同步并使用默认存储引擎(WiredTiger)
- 初始同步完成后,重新配置你的副本集将这个新成员改为非隐藏并具有投票权,并删除前任主要成员
- 关闭并淘汰前一个主要机构。
升级当前主节点
如果配置新的副本集成员不是一个合理的选择,您可以升级现有的副本集成员。主从仲裁器配置的一个重要警告是,在初始同步完成之前,您将只有一个完整的数据副本(备份之外)。
- 检查你的 MongoDB 服务器配置并注释掉或删除任何特定于 MMAPv1 的内容
storage
选项。例如,storage.engine
不应明确设置。 - 关闭当前主服务器。
- 移动(或删除)的内容
dbPath
。 - 重新启动主服务器以执行初始同步。
MongoDB 手册中对此过程进行了更详细的描述:将副本集更改为WiredTiger。