我们在 AWS 上部署了一个带有 3 个分片的 MongoDB 分片集群。每个分片都有一个包含 3 个成员、1 个配置服务器和 3 个 mongos 的副本集。
[ shard 1 ] [ shard 2 ] [ shard 3 ]
[ mongos0 ] [ mongos1 ] [ mongos2 ]
[ config0 ] [ config1 ] [ config2 ]
[ (p) md0 ] [ (s) md0 ] [ (s) md0 ]
[ (s) md1 ] [ (p) md1 ] [ (s) md1 ]
[ (s) md2 ] [ (s) md2 ] [ (p) md2 ]
以及分片在 3 个 EC2 实例上的分布方式
[ md0 ][ md1 ][ md2 ]
[ shard 1 ][ shard 1 ][ shard 1 ]
[ shard 2 ][ shard 2 ][ shard 2 ]
[ shard 3 ][ shard 3 ][ shard 3 ]
[ mongos0 ][ mongos1 ][ mongos2 ]
[ config0 ][ config1 ][ config2 ]
您可以看到 replicaSet 成员不在同一个实例上。
但是当例如md0
宕机时,我们的 API(Parse Server)与集群的连接松散,尽管md1
仍然md2
存在并且已经选择了一个新的主节点。由于复制,所有 EC2 实例都拥有所有集合的副本,包括分片集合。
连接字符串看起来像这样
mongodb://user:password@mongos0:27017,mongos1:27017,mongos2:27017/mydb
您认为这是集群/分片配置的问题,还是与 API 相关的问题,它保持连接而不是尝试连接到其他 mongos?