好的我在linux服务器上安装了两个带有replicaset的节点。
在使用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);
}
答案 0 :(得分:0)
问题是某些数据库命令只能在主数据库上运行。如果在连接到没有主副本的副本集时发出一个,则会出现此错误。
在这种情况下,命令是server.GetDatabaseNames() - 它可能是一个疏忽,它无法在辅助节点上运行此命令,但目前就是这样。
我将检查维护MongoDB驱动程序的人员,看看是否应该在辅助驱动程序上允许此命令。
对于您的示例,我认为如果您的程序连接然后发出读取查询,您会发现它可以正常工作。