【问题标题】:Failover sharding mongodb. Autoreconnect doesnt work故障转移分片 mongodb。自动重新连接不起作用
【发布时间】:2020-03-09 13:01:28
【问题描述】:

我已经为 MongoDB 配置了 Sharding。我的设置如下所示:

  • 3 个配置服务器
  • 2 个 Shard 服务器(Shard1 和 Shard2),每个都有 3 个 ReplicaSet 节点
  • 1 个 mongos 实例

我当前的集合具有主分片 Shard 1。我的所有数据现在都存储在 Shard 1 上。我是否正确,一旦我的 Shard 1 变满,数据就会存储在 Shard 2 上?

我现在正在测试故障转移方案,当我的 Shard 1 服务器关闭时,数据应该转到 Shard 2 但它没有发生?它应该会自动重新连接到 Shard 1 对吧?

【问题讨论】:

  • 听起来你分片错误。除非您选择了错误的分片键,否则两个分片应始终具有大致相同的数据量。错误的分片键,例如不断增加的时间戳,将首先填充分片 1,据我所知,除非达到分片键的特定值,否则永远不会填充分片 2,这可能永远不会发生。将在随机生成的密钥上进行正确的分片,例如用户 ID。这样一来,如果有 1000 个用户,大约 500 个用户最终会在 Shard 1 上,其余的在 Shard 2 上。
  • 分片不适用于故障转移。这就是复制品的用途。分片用于扩展。
  • 好的,我选择了一些不断增加的 ID 作为分片键,看起来只有一个分片获取所有数据。因此,如果我选择其他分片键,例如 someID + randomString,它的行为应该会有所不同,对吧?
  • 如果someID 连续增加“00001”、“00002”并且this+randromString 会产生“00001-scnkg”、“00002-qeiov”,那么您仍然会遇到问题。如果您使用someID 的散列,您将获得相当均匀的分片平衡。阅读docs.mongodb.com/manual/core/sharding-shard-key/…docs.mongodb.com/manual/sharding/#sharding-strategy
  • 阅读文档似乎 MongoDB 正在自动散列密钥。看起来你遇到的事情不应该发生。多么奇怪。除非你使用远程分片?

标签: mongodb replication sharding


【解决方案1】:

我当前的集合具有主分片 Shard 1。我的所有数据 现在存储在 Shard 1 上。我说的对吗?数据将被存储 一旦我的 Shard 1 满了就在 Shard 2 上?

分片是关于在分片之间分布集合中的数据。分片在数据库级别启用,但分片上的实际数据分布是在集合级别。因此,分片数据库可以具有分片和非分片集合。所有未分片的集合都驻留在主分片上。分片集合数据分布在多个分片上(基于分片键)。对分片数据库的所有查询(无论是分片还是非分片集合)都通过 mongos 路由器。

对于分片集合,初始数据可能全部存储在一个分片上。后来随着数据的增长,它被分发到下一个分片。见data partitioning with chunks


我现在正在测试我的 Shard 1 服务器关闭时的故障转移方案 那么数据应该去 Shard 2 但它没有发生?这应该 自动自动重新连接到 Shard 1 对吗?

故障转移是与复制相关的过程,而不是分片。一个副本集有多个节点(在您的分片配置中指定,每个分片都是一个副本集)。当副本集中的主节点发生故障(或宕机)时,剩余的两个辅助节点将举行选举并选举一个新的主节点。客户端应用程序将自动连接到新的主节点。之前的primary节点再上来,就变成seconday了。

replication failover

【讨论】:

  • 我减小了 Shard 1 的块大小,现在数据分布在多个 shard 上。但是一旦我的一个 Shard 出现故障,Shard 2 就会停止获取数据。我写了一些小应用程序,它在分片 mongoDB 中插入数据,如果其中一个分片不可用,它就会停止。我不明白为什么?
  • 您正在使用副本集作为分片节点。 “我的一个碎片掉了”是什么意思?分片上的节点(服务器)分片上的所有节点(完整副本集)?
  • 如果分片(完整的副本集)不可用,应用程序仍然可以使用可用分片进行读取更新操作。只是,无法访问分片上不可用的数据(直到它出现)。
  • 我的分片副本集有 3 个成员,如果其中 2 个成员关闭,则完整的副本集不可用。我的意思是“碎片掉下来”。
  • shard-key 和 chunks 之间的关系在其中起作用。一个分片键总是在一个块上。因此,如果您尝试使用其块在已关闭的分片上的 shard-key 写入数据,则不会发生写入。但是,您仍然可以写入具有数据的其他分片(具有其他分片键的块)。
猜你喜欢
  • 1970-01-01
  • 2014-01-21
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 2017-01-27
  • 2014-02-02
  • 2018-12-26
相关资源
最近更新 更多