簡體   English   中英

如何使用mongodb java driver 3.0.0從Secondary獲取配置文件狀態?

[英]How to get profile status from Secondary using mongodb java driver 3.0.0?

由於驅動程序正在循環並最終超時,我無法獲得輔助服務器(s132)的配置文件狀態:

2015-05-05 17:59:55,829 [main] INFO  org.mongodb.driver.cluster - No server chosen by PrimaryServerSelector from cluster description ClusterDescription{type=REPLICA_SET, connectionMode=SINGLE, all=[ServerDescription{address=s132:27017, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[2, 6, 4]}, minWireVersion=0, maxWireVersion=2, maxDocumentSize=16777216, roundTripTimeNanos=8836176, setName='offerStoreDE3', hosts=[s132:27017, s124:27017], passives=[], arbiters=[], primary='s124:27017', tagSet=TagSet{[]}}]}. Waiting for 30000 ms before timing out
2015-05-05 17:59:56,315 [cluster-ClusterId{value='5548e8fbf03cf20477e864a9', description='null'}-s132:27017] DEBUG org.mongodb.driver.cluster - Checking status of s132:27017
2015-05-05 17:59:56,324 [cluster-ClusterId{value='5548e8fbf03cf20477e864a9', description='null'}-s132:27017] DEBUG org.mongodb.driver.cluster - Updating cluster description to  {type=REPLICA_SET, servers=[{address=s132:27017, type=REPLICA_SET_SECONDARY, roundTripTime=8,8 ms, state=CONNECTED}]
2015-05-05 17:59:56,824 [cluster-ClusterId{value='5548e8fbf03cf20477e864a9', description='null'}-s132:27017] DEBUG org.mongodb.driver.cluster - Checking status of s132:27017
2015-05-05 17:59:56,834 [cluster-ClusterId{value='5548e8fbf03cf20477e864a9', description='null'}-s132:27017] DEBUG org.mongodb.driver.cluster - Updating cluster description to  {type=REPLICA_SET, servers=[{address=s132:27017, type=REPLICA_SET_SECONDARY, roundTripTime=8,9 ms, state=CONNECTED}]
2015-05-05 17:59:57,333 [cluster-ClusterId{value='5548e8fbf03cf20477e864a9', description='null'}-s132:27017] DEBUG org.mongodb.driver.cluster - Checking status of s132:27017
2015-05-05 17:59:57,343 [cluster-ClusterId{value='5548e8fbf03cf20477e864a9', description='null'}-s132:27017] DEBUG org.mongodb.driver.cluster - Updating cluster description to  {type=REPLICA_SET, servers=[{address=s132:27017, type=REPLICA_SET_SECONDARY, roundTripTime=8,8 ms, state=CONNECTED}]
2015-05-05 17:59:57,842 [cluster-ClusterId{value='5548e8fbf03cf20477e864a9', description='null'}-s132:27017] DEBUG org.mongodb.driver.cluster - Checking status of s132:27017

但是,詢問主數據庫(s124)的配置文件狀態很好。

我的Java代碼是這樣的:

MongoClientOptions options = MongoClientOptions.builder().
                    connectTimeout(2000).
                    socketTimeout(10000).
                    readPreference(ReadPreference.secondaryPreferred()).
                    build();
MongoCredential mc = MongoCredential.createCredential("user", "db", "XXXX".toCharArray());
MongoClient mongo = new MongoClient(new ServerAddress("s132:27017"), Lists.newArrayList(mc), options);
MongoDatabase myDB = mongo.getDatabase("myDB");

BsonDocument bd = BsonDocument.parse("{profile:1}");
Bson bson = (Bson)bd;
Document doc = myDB.runCommand(bson); //loops until timeout
Object obj = doc.get("slowms");

在mongo shell中,我可以做同樣的事情而不會出現問題:

offerStoreDE3:SECONDARY> db.runCommand({profile:1})
{ "was" : 0, "slowms" : 100, "ok" : 1 }

replSet的狀態如下:

offerStoreDE3:SECONDARY> rs.status()
{
    "set" : "offerStoreDE3",
    "date" : ISODate("2015-05-05T16:09:47Z"),
    "myState" : 2,
    "syncingTo" : "s124:27017",
    "members" : [
        {
            "_id" : 7,
            "name" : "s124:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 1400,
            "optime" : Timestamp(1430740008, 1),
            "optimeDate" : ISODate("2015-05-04T11:46:48Z"),
            "lastHeartbeat" : ISODate("2015-05-05T16:09:45Z"),
            "lastHeartbeatRecv" : ISODate("2015-05-05T16:09:47Z"),
            "pingMs" : 0,
            "electionTime" : Timestamp(1430840794, 1),
            "electionDate" : ISODate("2015-05-05T15:46:34Z")
        },
        {
            "_id" : 8,
            "name" : "s132:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 1740,
            "optime" : Timestamp(1430740008, 1),
            "optimeDate" : ISODate("2015-05-04T11:46:48Z"),
            "self" : true
        }
    ],
    "ok" : 1
}

runCommand(bson); 將始終將命令定向到主節點,因為它在其下執行寫命令。

對於顯式讀取命令,必須提供讀取首選項,例如:

Document doc = myDB.runCommand(bson, ReadPreference.secondaryPreferred());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM