Mongo ReplicaSet - 连接字符串中的仲裁器

Shl*_*omi 7 replication mongodb

我将 ReplicaSet 与 Mongo 一起使用,当我构建连接字符串时,我拥有所有服务器主机和端口 - 以逗号分隔。

我的问题是,我应该在那里添加仲裁地址还是只添加主服务器和辅助服务器?

谢谢!

Mar*_*erg 13

连接到副本集

据我所知,大多数司机会表现出以下行为

  1. 如果只给出一个节点,驱动程序将简单地连接到这个节点。
  2. 如果replicaSet连接字符串中给出了该选项,则驱动程序将开始探索所述副本集以识别所有非隐藏成员,而不管连接字符串中给出的节点数量如何。
  3. 当在连接字符串中给出多个节点时,会触发相同的行为。由于这比上述更依赖驱动程序(例如,您也可以提供多个mongos),我个人不会太依赖它。

我应该在连接字符串中包含一个仲裁器吗?

您应该始终在连接字符串中提供副本集的至少两个成员的原因是,这使驱动程序能够连接到副本集,即使一个节点已关闭。这可以是任何节点(我想除了隐藏的节点,但我从未尝试过),因为每个节点都完全了解副本集。

在具有两个数据承载成员的三节点副本集中,将仲裁器包含在连接字符串中没有多大意义。如果你给两个承载数据的节点,都无法访问,那么你的副本集就无法访问了。

但是,在五节点副本集中,您可以在连接字符串中包含一个仲裁器,因为您可能想要总共添加 3 个节点以确保您可以连接到其中一个节点,或者可以安全地假设副本集不可用.

翻译:博士

在连接字符串中包含一个仲裁器并没有什么坏处,尽管在由两个数据承载节点和一个仲裁器组成的最小副本集中意义不大。

为了安全起见,您几乎总是将大多数投票成员包含在您的连接字符串中。对于副本集发现的目的,单个成员属于哪种类型的成员并不重要。

我建议始终将replicaSet选项添加到连接字符串中,并且只是为了明确预期目的。


Ati*_*ish 2

副本集中的有效和活动成员将自动检测副本集中但未在连接中指定的仲裁者。

驱动程序会将请求重定向到仅主节点和辅助节点,因为知道仲裁器不会处理任何请求。它有助于在故障转移时进行投票。

但是,添加所有连接成员始终是个好主意。