【问题标题】:how does mongo select primary shard in cluster?mongo如何选择集群中的主分片?
【发布时间】:2017-04-17 18:47:34
【问题描述】:
 i have created 3 mongod , 2 mongos and a single config server.
 While i look in to  sh.printShardingStatus(). 
 it says some node as primary one.

mongoDb 如何选择它的主分片来保存非分片集合,我可以更改主分片吗?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    新集群中的主分片始终是第一个分片。见manual

    【讨论】:

    • 我可以更改主分片吗??
    • @Sidharthan 是的,但正如我在答案中的链接中提到的那样,这是一项昂贵的操作。
    • 更具体地说,它将始终使用配置服务器来了解集群的布局
    • 这个答案不正确。集群没有主分片。主分片一词仅适用于数据库。
    • 我并不是想学究气,但我本可以更好地表达我的批评。我来这里是因为我有同样的问题。手册和这个答案都无法回答这个问题,“MongoDB 如何为新数据库选择主分片?”你的答案是“第一个碎片”,但“第一个”甚至没有很好的定义。您是指添加到集群中的第一个分片吗?还是分片列表中的第一个?
    【解决方案2】:

    您可以使用 movePrimary 命令。详细信息在这里。它要求您在运行此命令之前排空其他分片。

    http://docs.mongodb.org/manual/reference/command/movePrimary/

    【讨论】:

    • 我不会使用 movePrimary - 它会使您的集群处于不一致的状态。在 movePrimary 之后,mongoses 将不同意数据库数据的存储位置。有关 movePrimary 的完整错误集,请参阅 jira.mongodb.org...
    【解决方案3】:

    根据the manual,“[在集群部署后] 创建的数据库可能驻留在集群中的任何分片上。”当您在分片集群中创建数据库时,它将被分配一个主数据库,但它选择该主数据库的机制没有记录。我邀请其他人深入了解the source 以追踪并记录所使用的实际机制。

    在商业支持工单中,MongoDB 已确认将在“最可用”分片上为新数据库分配一个主数据库,其中最可用意味着其上数据量最少的分片。

    【讨论】:

      【解决方案4】:

      主分片

      分片集群中的每个数据库都有一个主分片,用于保存该数据库的所有非分片集合。每个数据库都有自己的主分片。主分片与副本集中的主分片没有关系。

      mongos 在创建新数据库时通过选择集群中数据量最少的分片来选择主分片。 mongos 使用 listDatabase 命令返回的 totalSize 字段作为选择标准的一部分。

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-03
      • 1970-01-01
      • 2016-10-10
      • 1970-01-01
      • 2021-02-27
      相关资源
      最近更新 更多