簡體   English   中英

pymongo MongoClient連接到ReplicaSet

[英]pymongo MongoClient connect to ReplicaSet

我采用了pymongo的MongoClient類連接到一個復制集,它有三個節點,1個主要2個輔助節點。 代碼段如下:

c = MongoClient([secondary1_hostname, secondary2_hostname], replicaSet='rs0')

當檢查三個mongod的日志時,我發現始終與主要主機建立了連接,但是其他2個從未接收到來自客戶端的連接請求或者連接立即斷開連接。 似乎客戶端首先到達一個二級獲得主要地址然后刪除連接並創建與主要的長期連接。

但是,當我使用MongoReplicaSetClient類時,使用以下代碼:sinppet:

c = MongoReplicaSetClient(secondary1_name, replicaSet='rs0')

每個副本集成員始終創建3個連接,從mongod的日志文件中獲取。

那么,為什么MongoClient的行為總是只創建與主要的連接? 我閱讀了PyMongo的手冊,但沒有找到答案。 任何建議表示贊賞。

目前的pymongo(= 3.2):

c = pymongo.MongoClient('mongodb://user:passwd@node1:p1,node2:p2/?replicaSet=rsname')
time.sleep(2)
print c.nodes
frozenset([(u'node1', p1), (u'node2', p2)])

正如pymongo高可用性文檔中所述

傳遞給MongoClient()的地址稱為種子。 只要至少有一個種子在線,MongoClient就會發現副本集中的所有成員,並確定哪個是當前主節點,哪個是副節點或仲裁節點。

MongoClient僅用於單個連接,當與MongoD ,它將選擇數據庫列表中的最后一個。 添加replicaSet pymongo時,它將驗證它連接的副本集是否與此名稱匹配。 意味着指定的主機是種子列表,pymongo應該嘗試查找該集的所有成員 ,然后它將連接到主節點。

MongoClient接受多個主機的另一個原因是處理Mongos和高可用性: http: MongoClient還處理復制時配置通過Mongos的replicaSet。

MongoReplicaSetClient專門用於復制集連接,它試圖查找集合的所有成員 它還會啟動副本集監視器,以便快速響應副本集配置中的更改。

MongoClient類僅連接到單個主機,文檔( http://api.mongodb.org/python/current/api/pymongo/mongo_client.html )說:

在host:port創建與單個MongoDB實例的新連接。

您需要使用已經發現的MongoReplicaSetClient類來處理副本集。

暫無
暫無

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

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