副本集连接问题 - MongoDB WritableServerSelector

时间:2016-07-20 05:12:28

标签: mongodb mongodb-java

我在连接到远程环境中的副本集的java驱动程序中遇到了令人讨厌的问题。

我使用以下代码通过Mongo DB Java Async API 3.2.2连接到服务器。

  MongoClient mongoClusterClient = MongoClients.create(MongoClientSettings.builder()
                                .clusterSettings(ClusterSettings.builder()
                                      .applyConnectionString(hrvuConnectionString)
                                                                                .serverSelectionTimeout(120, TimeUnit.SECONDS)
                                                                               .build())
                                      .connectionPoolSettings(ConnectionPoolSettings.builder()
                                                    .applyConnectionString(hrvuConnectionString)
                                                    .build())
                                                    .serverSettings(ServerSettings.builder().build())
                                                    .credentialList(getMongoConnectionString().getCredentialList())
                                                    .sslSettings(SslSettings.builder()
                                                        .applyConnectionString(hrvuConnectionString)
                                                        .build())
                                                        .socketSettings(SocketSettings.builder()
                                                            .applyConnectionString(hrvuConnectionString)
                                                            .build())
                                                            .build());
  return mongoClusterClient;

我的连接字符串采用以下格式。

mongodb://node-a.singlenode-mongodb.qa.shared.eu.qa.aws.app.io:27017,node-b.singlenode-mongodb.qa.shared.eu.qa.aws.app.io:27017,node-c.singlenode-mongodb.qa.shared.eu.qa.aws.app.io:27017/?replicaSet=rst-app-shared-qa&w=0&readPreference=secondaryPreferred&maxPoolSize=30&minpoolsize=5&maxidletimems=60000

我尝试在客户端创建中使用不同的选项(提供主机而不是ClusterSettings的连接字符串)但总是遇到以下问题:

2016-07-14 06:54:28.797 [I] [                                ] [org.mongodb.driver.cluster] | No server chosen by WritableServerSelector from cluster description ClusterDescription{type=UNKNOWN, connectionMode=MULTIPLE, all=[ServerDescription{address=node-a.singlenode-mongodb.qa.shared.eu.qa.aws.app.io:27017, type=UNKNOWN, state=CONNECTING}, ServerDescription{address=node-b.singlenode-mongodb.qa.shared.eu.qa.aws.app.io:27017, type=UNKNOWN, state=CONNECTING}, ServerDescription{address=node-c.singlenode-mongodb.qa.shared.eu.qa.aws.app.io:27017, type=UNKNOWN, state=CONNECTING}]}. Waiting for 30000 ms before timing out

更有趣的是报告此后,应用程序正在独立获取连接。在我的本地环境中安装的单个数据库服务器没有问题。应用程序在本地设置中按预期运行。

我看到它需要获取db写入的主节点(在这种情况下为node-a.singlenode-mongodb.qa.shared.eu.qa.aws.app.io)。

有没有办法在连接时告诉驱动程序主节点?我在最近3天内遇到此错误,我们非常感谢您的帮助。

谢谢你, 钱德拉。

0 个答案:

没有答案