Golang mgo驅動指定Mongo服務器讀取

Replica Sets搭建

服務器採用Replica Sets搭建,可參考Deploy a Replica Setjavascript

讀模式

Mongod的讀模式共有五種:java

  • primary. 在主節點上進行全部的讀操做
  • primaryPreferred. 優先在主節點上進行讀操做,若是主節點不可用,再從從節點操做。
  • secondary.全部的讀操做在從節點上進行。
  • secondaryPreferred.優先在從節點進行讀操做,若是全部從節點都不可用,再從主節點操做。
  • nearest. 根據網絡延遲時間 ,就近進行讀操做,不考慮節點類型。

配置節點Tags Sets

Tag sets 容許指定一個replica set進行讀操做,其中Mongod的讀模式必須是如下四種之一:
primaryPreferredsecondarysecondaryPreferrednearest
Tags Sets配置參考:Configure Replica Set Tag Sets
主要操做以下:mongodb

conf = rs.conf()
conf.members[0].tags = { "dc": "east", "use": "production"  }
conf.members[1].tags = { "dc": "east", "use": "reporting"  }
conf.members[2].tags = { "use": "production"  }
rs.reconfig(conf)

mgo代碼示例

根據以上的配置,若是須要指定從members 1中進行數據庫讀操做,可採起如下代碼:數據庫

session, err := mgo.Dial("localhost")
if err != nil {
    log.Fatalln(err)
}
defer session.Close()
session.SetMode(mgo.Eventual, true) //須要指定爲Eventual
session.SelectServers(bson.D{{"dc", "east"}, {"use", "reporting"}}) // 指定從1中讀取
db := session.DB("test")
col := db.C("tbl")
data := make([]interface{}, 10)
col.Find(nil).Limit(10).All(&data)
log.Println(data)
相關文章
相關標籤/搜索