2016-04-01 81 views
0

我似乎無法將pymongo連接到我創建的副本集。我收到的消息似乎沒有太大意義,因爲它不是我所看到的。Pymongo將不會連接到Mongo副本集

我會先解釋我的配置。

基本上我有三臺機器10.141.0.156,10.141.0.158,10.141.0.159

我有3個的mongod實例中,不同的機器上的每個運行時,每個與運行:

mongod --configsvr --dbpath /mnt/sdb/ --port 27019

接下來,我已經添加了3臺mongod的機器副本集:

{ 
    "set" : "replSet", 
    "date" : ISODate("2016-04-01T12:23:12.552Z"), 
    "myState" : 2, 
    "term" : NumberLong(2), 
    "syncingTo" : "10.141.0.158:27017", 
    "configsvr" : true, 
    "heartbeatIntervalMillis" : NumberLong(2000), 
    "members" : [ 
     { 
      "_id" : 0, 
      "name" : "10.141.0.156:27017", 
      "health" : 1, 
      "state" : 2, 
      "stateStr" : "SECONDARY", 
      "uptime" : 2751, 
      "optime" : { 
       "ts" : Timestamp(1459513383, 6), 
       "t" : NumberLong(2) 
      }, 
      "optimeDate" : ISODate("2016-04-01T12:23:03Z"), 
      "syncingTo" : "10.141.0.158:27017", 
      "configVersion" : 2, 
      "self" : true 
     }, 
     { 
      "_id" : 1, 
      "name" : "10.141.0.158:27017", 
      "health" : 1, 
      "state" : 1, 
      "stateStr" : "PRIMARY", 
      "uptime" : 2749, 
      "optime" : { 
       "ts" : Timestamp(1459513383, 6), 
       "t" : NumberLong(2) 
      }, 
      "optimeDate" : ISODate("2016-04-01T12:23:03Z"), 
      "lastHeartbeat" : ISODate("2016-04-01T12:23:11.054Z"), 
      "lastHeartbeatRecv" : ISODate("2016-04-01T12:23:11.579Z"), 
      "pingMs" : NumberLong(0), 
      "electionTime" : Timestamp(1459510633, 1), 
      "electionDate" : ISODate("2016-04-01T11:37:13Z"), 
      "configVersion" : 2 
     }, 
     { 
      "_id" : 2, 
      "name" : "10.141.0.159:27017", 
      "health" : 1, 
      "state" : 2, 
      "stateStr" : "SECONDARY", 
      "uptime" : 2749, 
      "optime" : { 
       "ts" : Timestamp(1459513383, 6), 
       "t" : NumberLong(2) 
      }, 
      "optimeDate" : ISODate("2016-04-01T12:23:03Z"), 
      "lastHeartbeat" : ISODate("2016-04-01T12:23:11.261Z"), 
      "lastHeartbeatRecv" : ISODate("2016-04-01T12:23:12.240Z"), 
      "pingMs" : NumberLong(0), 
      "syncingTo" : "10.141.0.158:27017", 
      "configVersion" : 2 
     } 
    ], 
    "ok" : 1 
} 

接下來我第一臺機器上10.141.0.156啓動mongos:

mongos --configdb replSet/10.141.0.156:27017,10.141.0.158:27017,10.141.0.159:27017 --port 27077

在這一點上一切正常運行,我沒有得到任何錯誤。

然後我嘗試連接到與pymongo 3.2.1設置副本:

MongoClient("10.141.0.156", 27077, replicaSet='replSet') 

當我嘗試要麼閱讀所有的按鍵,或寫,我得到:

*** ServerSelectionTimeoutError: No replica set members available for replica set name "replSet"

儘管在mongo shell中看到了複製集。

+0

你是怎麼開始你的mongod實例爲replicaset? – Saleem

回答

1

對於replicaset,您需要啓動mongod將參與replicaset的實例;用--replSet標誌。

mongod --dbpath /mnt/sdb/ --port 27019 --replSet "your_replicaset_name" 

使用--configsvr選項,您正在啓動一個用於分片的配置服務器,而不是複製數據庫。有關詳細信息,請參閱https://docs.mongodb.org/manual/reference/program/mongod/#bin.mongod

請參見本教程有關如何安裝replicaset:https://docs.mongodb.org/manual/tutorial/deploy-replica-set/

+0

你是對的,我完全錯過了。它甚至可以在所有節點上運行mongod並將它們添加到相同的碎片中,而無需配置和mongos。 –