因此,最近我們重新設計了我們的MongoDB數據庫集羣,以使用SSL和副本集以及我們已經實現的分片。 SSL並不太難以工作,我們只需要分離私鑰和證書,然後一切正常。然而,讓我的Node.js應用程序連接到兩個mongos實例證明比我預期的更困難。使用mongoose將node.js連接到MongoDB中的分片複製集羣的正確方法
之前,我們實現副本集,我們剛剛經歷了兩個碎片,它們中的每運行一個mongos路由器,並在貓鼬我給它下面的連接字符串:
mongodb://Host1:27017,Host2:27017/DatabaseName
然後,在選擇反對連接,我通過如下:
{mongos: true}
這似乎工作得很好。但是,在實現副本集之後,只要我傳遞了mongos選項,應用程序就不會連接。我們的集羣現在已經安裝完畢,因此有4個MongoDB服務器,每個服務器有2個副本,每個副本有2個服務器。每個副本集中的主節點也運行一個mongos路由器實例。我認爲我應該能夠像以前一樣連接,但它永遠不會連接。如果我只用1個分片創建連接而沒有任何選項,那麼應用程序連接就好了。然而,這並不理想,因爲整個問題是在路由器實例之間有冗餘。任何人都可以提供一些見解嗎?
這裏是sh.status的輸出():
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("57571fc5bfe098f05bbbe370")
}
shards:
{ "_id" : "rs0", "host" : "rs0/mongodb-2:27018,mongodb-3:27018" }
{ "_id" : "rs1", "host" : "rs1/mongodb-4:27018,mongodb-5:27018" }
active mongoses:
"3.2.7" : 4
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
databases:
{ "_id" : "Demo", "primary" : "rs0", "partitioned" : true }
我被要求輸出rs.config(),這裏是從第1主節點:
{
"_id" : "rs0",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "mongodb-2:27018",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "mongodb-3:27018",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("57571692c490a699f61e3784")
}
}
你可以轉儲rs.config()輸出嗎? – profesor79
所以我試圖從mongos shell運行rs.config(),但我得到這個: '2016-06-13T15:15:23.893 + 0000 E QUERY [thread1]錯誤:錯誤:{「$ err」:「不能使用'本地'數據庫通過mongos「,」代碼「:20}:' –
道歉 - rs是爲副本集.....你可以運行'sh.status()' – profesor79