0

我在 EC2 上有三个实例,每个实例都有服务 mongo,设置有副本集,即主 (192.168.1.1)、辅助 (192.168.1.2) 和仲裁器 (192.168.1.3)。

我有几个与 mongo 连接的应用程序。

我的问题如下:

如果我在副本中添加另一个成员,我必须更改连接设置中的所有应用程序以包含新成员吗?

因为我问它。

假设最终 .1 的 ip 是主要的,.2 是次要的,然后将一个新成员添加到末尾 ip .4。而且我没有在应用程序数据库设置中包含这个新成员。并且主节点下降了,仲裁器选择 0.4 的 ip 作为新的主节点。所有应用程序都将开始抛出异常。

我怎样才能“修复”它,我总是必须添加一个新成员而不需要更改应用程序数据库的配置。想象一下,如果我必须添加“n”个成员。

你有什么方法可以配置应用程序,知道我的应用程序是在 PHP 中的,无需添加主机配置即可单独识别主节点?

4

1 回答 1

0

无需更改应用程序中的任何内容。您只需使用命令 rs.add("address:port") 将新节点添加到副本集。如果您有三个节点(主节点和 2 个辅助节点),那么如果所有这些节点都是投票成员,那么您不应该有任何仲裁者。(票数应始终为奇数)

您可以“选择”具有优先级值的主要遗产顺序。如果您设置 .1 节点优先级 f.ex. 到 3,.2 节点优先级为 2,并将最后一个辅助节点保持为优先级 1,如果可以,.1 保持主要,当它不能时,.2 被选为主... 重点是,您的应用程序连接到一个就足够了副本集的节点及其(应用程序)自动获取信息,该副本集的其他节点是什么以及“谁”是主要的。

对于三节点副本集,您必须始终有两个节点启动并运行(多数;2/3),否则您的最后一个节点将不会被选为主节点。

于 2016-09-28T20:15:33.347 回答