1

好的,我在 linux 服务器上设置了两个带有副本集的节点。

在使用 1.8.1.20 驱动程序的 c# 应用程序中,我有

client = new MongoClient("mongodb://54.244.162.21,54.234.244.182/rs0?connect=replicaset;replicaSet=rs0;slaveOk=true;readPreference=primaryPreferred");

- 当我将 mongo 连接到每个节点时,主节点和从节点的更新和查找语句都可以正常工作。

-当我尝试关闭任何主节点或辅助节点时,我得到:无法连接到与读取首选项主节点匹配的副本集的成员

- 当两个节点都启动时,我没有收到任何错误,一切正常。

- 我试图将 readPreference 更改为每个可能的值,因为我想看看冗余是如何工作的。

我是不是搞错了什么。我假设您应该能够连接到任何一个,并且至少可以读取工作。以下代码是我在首次建立连接时明显发生异常的代码。

        server = client.GetServer();

        foreach (string db in server.GetDatabaseNames())
        {
            Debug.WriteLine(db);
        }
4

1 回答 1

0

问题是某些数据库命令只能在主数据库上运行。如果您在连接到没有主副本的副本集时发出一个,那么您会收到此错误。

在这种情况下,命令是 server.GetDatabaseNames() - 可能是疏忽,它无法在辅助服务器上运行此命令,但目前情况确实如此。

我将与维护 MongoDB 驱动程序的人员核实,看看是否应该在辅助设备上允许此命令。

对于您的示例,我认为您会发现如果您的程序连接然后发出读取查询,那么它会正常工作。

于 2013-04-18T15:51:15.750 回答