如何连接到MongoDB分片群集

如何连接到MongoDB分片群集,mongodb,parse-platform,parse-server,mongodb-replica-set,Mongodb,Parse Platform,Parse Server,Mongodb Replica Set,我在aws上设置了一个集群,如下所示 - mycluster --- shard0 ----- node0 : P ----- node1 : S ----- node2 : S --- shard1 ----- node0: P ----- node1: S ----- node2: S --- shard2 ----- node0: P ----- node1: S ----- node2: S 我想通过连接字符串URI连接到它 我的连接字符串当前如下所示: mongodb://host0

我在aws上设置了一个集群,如下所示

- mycluster
--- shard0
----- node0 : P
----- node1 : S
----- node2 : S
--- shard1
----- node0: P
----- node1: S
----- node2: S
--- shard2
----- node0: P
----- node1: S
----- node2: S
我想通过连接字符串URI连接到它

我的连接字符串当前如下所示:

mongodb://host0:portX,...,host9:portZ/test-database?replicaSet=mycluster
但是由于某种原因,当我尝试连接时,我得到了无法到达的错误

但是,我可以连接到一个单独的碎片

mongodb://host0:portX,...,host3:portZ/test-database?replicaSet=shard0

我在这里遗漏了什么阻止我连接到整个集群?

在一个碎片中,你连接到碎片路由器,即mongos进程。您并没有连接到每个单独的碎片。只有mongos可以做到这一点。

在碎片中,您连接到碎片路由器,即mongos进程。您并没有连接到每个单独的碎片。只有mongos能做到这一点。

我想补充一点,当直接连接到碎片时,它会严重破坏数据的一致性。@MarkusWMahlberg我甚至没有意识到你可以从客户端连接到一个碎片。你可以,因为每个碎片都不知道它是碎片。从它自己的角度来看,它是一个独立的或复制集。现在想象一下你混淆了关键范围…@MarkusWMahlberg奇怪的是,副本集成员知道他们是副本集成员,但碎片不知道。你知道的越多…想想看。副本集成员必须知道它是replset的一部分,以便进行投票和健康检查。但为了保存数据,它不必知道它是分片集群的一部分。这使得分片逻辑无限期地变得不那么复杂。我想补充一点,当直接连接到分片时,它会严重破坏数据的一致性。@MarkusWMahlberg我甚至没有意识到你可以从客户端连接到一个分片。你可以,因为每个分片都不知道它是一个分片。从它自己的角度来看,它是一个独立的或复制集。现在想象一下你混淆了关键范围…@MarkusWMahlberg奇怪的是,副本集成员知道他们是副本集成员,但碎片不知道。你知道的越多…想想看。副本集成员必须知道它是replset的一部分,以便进行投票和健康检查。但为了保存数据,它不必知道它是分片集群的一部分。这使得分片逻辑不那么复杂。