簡體   English   中英

無法使用Node.js從MongoDB從站讀取

[英]Unable to read from MongoDB slave using Node.js

我在相同的方面看到了很多問題,但不知怎的,我仍然無法成功連接到MongoDB Slave。

我使用mongo-k8s-sidecar在Kubernetes上運行我的集群,將我的應用程序直接連接到master工作正常,但是每當我嘗試連接到slave時,我似乎無法讀取,這里是錯誤代碼:

MongoError: not master and slaveOk=false

我在我的應用程序中使用Node.js,這就是我連接的方式:

var mongodb = require('mongodb').Db;
var Server = require('mongodb').Server
var db = new mongodb('dbname', new Server("localhost",27017,{slaveOk: true}));

        db.open(function(err, conn){
             if (err){
                callback(err);
             }else {
             client=conn;
             client.createIndex("tablename", {field:1}
             , {background:true}, function(err, i) {
                 logger.info(err);
             });
//The rest of the code is trimmed

我在這里錯過了什么?

即使您正在使用slaveOk / ReadPreference.SECONDARY,也無法在輔助成員上運行createIndex()

如果你在沒有createIndex()調用的情況下測試代碼,你可能會發現它正如你所期望的那樣工作。

有關更多詳細信息,請參閱在副本集上構建索引 基本上,如果要在輔助節點上構建索引,則需要停止mongod實例,將其作為獨立實例啟動(不使用replSet選項),然后構建索引。

或者您只能在主節點上創建索引,並且索引創建將復制到輔助節點。

假設您正在使用驅動程序的v1.x, slaveOk: true是db的選項,而不是服務器:

var db = new mongodb('dbname', new Server("localhost",27017), {slaveOk: true});

DocRef

對於v2.x驅動程序,選項為readPreference=ReadPreference.SECONDARY

DocRef

暫無
暫無

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

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