【问题标题】:Need to change storage db path in mongo secondary node of replica set需要更改副本集的mongodb辅助节点中的存储dbpath
【发布时间】:2022-01-22 18:05:17
【问题描述】:

我们有 3 个成员的 mongo db 副本集(MongoDB 服务器版本:4.2.9)。其中一个成员(辅助)正在默认存储数据库路径上运行,并且该存储几乎已满。我们需要更改 3 成员副本集的特定辅助节点的路径。我是 mongodb 的新手。我需要你的专业知识来完成这项任务。

MongoDB 服务器版本:4.2.9 操作系统版本:CentOS Linux release 7.8.2003 (Core)。

问候,

【问题讨论】:

标签: mongodb replicaset


【解决方案1】:

选项1:(保留当前已经同步的数据)

  1. 停止mongod服务:

    mongo --host xxxx --port yyyy  
    use admin
    db.shutdownServer()
    
  2. 将数据从旧位置复制到新位置:

    cp -R /oldPath/ /newPath/
    
  3. 在 /etc/mongodb.conf 中更改 dbPath 以指向新位置。

  4. 启动mongodb服务。


选项 2) 初始化从其他成员同步成员。

与选项 1) 相同,只是省略第 2) 点,只是您需要等待直到成员初始化同步(复制数据)从其他成员,这取决于数据大小和压缩。


选项 3) 更好的高可用性:

  1. 从 PRIMARY 成员中添加另一个将使用新路径的成员:

    rs.add("newMember:XXXX")
    
  2. 等到新成员初始化同步。

  3. 删除旧的 SECONDARY 成员:

    rs.remove("oldMember:YYYY")
    
  4. 清理旧文件和配置。 (此选项的小缺点是,如果在同一主机上,您需要更改新成员的端口)

选项 2) 似乎最适合您的情况...

【讨论】:

  • 感谢您提供的解决方案。关于使用选项# 2 的另一个问题。init.sync 进程是否会自动启动以进行同步,或者我们必须以任何方式启动它。如果我们必须通过设置任何参数或执行任何命令手动启动 init.sync,请与我们分享步骤/文档。
  • mongo 会识别出 data 文件夹是空的,并会自动启动 init 进程,所以你不需要做任何事情来触发进程...,你可以通过 rs.status( ) 不时查看会员何时再次成为 SECONDARY ...
  • 非常感谢。您提供的解决方案工作正常,除了一件事。当我们应用选项#2 中提供的解决方案时,PRIMARY 角色被分配给剩余的 SECONDARY,而 PRIMARY 成为 SECONDARY。能否请您为我们解释一下。
  • 啊,在停止 PRIMARY 成员以使用 rs.stepDown() 将它们切换到 SECONDARY 之前更安全,以避免在关闭期间进行选举,所以如果你的成员是 PRIMARY,那么当你停止它时,另一个成员将触发选举过程并投票给新的 PRIMARY(接受写入的成员),即使您将成员切换为 HIDDEN 也是最好的,这样应用程序在维护活动期间根本看不到它......,但一般来说你做的很好......
猜你喜欢
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多