【发布时间】:2013-10-07 17:01:13
【问题描述】:
我有一个 3 个完整实例 Mongo 副本集,设置在 3 个单独的 AWS EC2 Linux 实例上(所有相同的可用区但不同的子网)。我可以从同一可用区中的另一个 EC2 机器上读取和写入副本集,但是,从远程机器(我的本地机器),我只能读取。尝试插入或查找并修改会返回错误“无法连接到与读取首选项 Primary 匹配的副本集的成员”。
如果我将连接字符串更改为仅连接到主服务器,则写入正常,但显然不会复制到其他框。
我尝试允许本地盒子和三个 Mongo 盒子之间的所有流量,但没有任何变化。我还读到它可能是解析其他框的 dns 的问题,所以我添加了主机条目,但这也没有帮助。当我打开所有流量时,我可以 ping 所有 3 个盒子。
驱动和副本盒之间是否需要其他配置?
我正在使用 c# Mongo 1.8.1 驱动程序。我的连接字符串看起来像
mongodb://mongobox1,mongobox2,mongobox3/dbname?replicaSet=replicasetname&readpreference=primaryPreferred
更新:
我还发现,有时(不确定条件),当我取下主机时,我可以从本地正常写入,当我将机器备份时,它会正确同步。但是一旦我把机器恢复过来,我就不能再从本地写了。
谢谢,
马特
【问题讨论】:
-
我会说这是配置错误而不是设置错误,我会说您的防火墙可能有问题,您的应用的读取偏好是什么?
-
它在连接字符串中设置为primaryPreferred。如果它与防火墙或连接有关,为什么设置为单个节点时它对主节点写得很好?
-
嗯,这确实让我感到困惑,但是如果您将其设置为仅主要的,您也会收到读取错误吗?我想知道这是否与 c# 驱动程序有关
标签: mongodb amazon-ec2