qq_29297637 2016-03-12 11:38 采纳率: 0%
浏览 1217

mongodb 分片集群 使用 新的服务器代替原有的 mongos 和config 服务

目前有已搭好的mongodb 分片集群 状况为:三台 服务器 每台上运行 一个路由进程(mongos) 一个config_sever 和三个分片,其中三台服务器上的每一个相同shard搭建了副本集 栗子:
config = { _id:"shard1", members:[
{_id:0,host:"192.168.30.136:22001"},
{_id:1,host:"192.168.30.137:22001"},
{_id:2,host:"192.168.30.138:22001",arbiterOnly:true}
]
}
--集群架构如下 根据 http://www.lanceyan.com/tech/arch/mongodb_shard1.html 搭建

sever1 server2 sever3

mongos mongos mongos

config_sever config_sever config_sever

shard1 shard1 shard1

shard2 shard2 shard2

shard3 shard3 shard3

现在 我想要把mongos(路由) 和config 分离出来 成为三台单独的服务器 即 每台上面 一个mongos 一个config 原本的三台作为分片 重新接入 新的服务器

问题一: 新的在串联新路由和已有的分片时 出现错误 我只能串联 三台服务器中的一个副本集,例如我串联了shard1 那么串联shard2时就会出现

"errmsg" : "can't add shard 'shard2/172.31.6.3:22002,172.31.14.250:22002,172.31.14.252:22002' because a local database 'lycamplus' exists in another shard1"

问题二: 在上述情况下 我有选择了拷贝 原有的config_server 文件 到新的config 服务器 这样我就不用去串联副本集了 但是却出现了字符串冲突的问题 即 在配置文件中 mongos 的新旧IP冲突

好吧今天一天都躺 这两坑上了 ---mongodb 半路出家 如果出现常识性问题 高手请见谅

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-05 01:33
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要解决这两个问题,你需要按照以下步骤操作:

    1. 解决问题一:无法串联副本集

    解决方案:

    • 将当前集群中的所有副本集迁移到其他服务器上。
    • 对于每个需要迁移到的新服务器,创建一个新的副本集。

    示例代码:

    // 获取所有需要迁移的副本集
    const shards = [
        { name: 'shard1', hosts: [{ host: '192.168.30.136:22001', role: 'mongos' }, { host: '192.168.30.137:22001', role: 'mongos' }] },
        // 其他副本集...
    ];
    
    // 创建新的副本集
    const newShards = [];
    
    for (const shard of shards) {
        const newHosts = [];
        for (const { host } of shard.hosts) {
            newHosts.push({ host, role: shard.role });
        }
        newShards.push(new Host(shard.name, newHosts));
    }
    
    // 将副本集迁移到新服务器
    newShards.forEach((shard, index) => {
        console.log(`Moving shard ${index + 1} to new server...`);
        const newServer = createNewServer(index);
        shard.mongos = newServer;
    });
    

    2. 解决问题二:字符串冲突问题

    解决方案:

    • 在新服务器上创建一个名为config.shard的文件,并将config.shard.json复制到该文件中。
    • 更新config.shard.json以包含新的主机信息。

    示例代码:

    {
      "_id": "shard",
      "members": [
        {
          "name": "mongos",
          "host": "192.168.30.136:22001"
        },
        {
          "name": "mongos",
          "host": "192.168.30.137:22001"
        },
        {
          "name": "mongos",
          "host": "192.168.30.138:22001"
        }
      ]
    }
    

    注意:这个示例假设你已经在新服务器上安装并配置了mongod。如果你还没有安装mongod,请参考MongoDB官方文档来设置环境。

    希望这些解决方案能够帮助你解决问题!如果还有其他疑问或需要进一步的帮助,请随时提问。

    评论

报告相同问题?