Golang mgo驱动指定Mongo服务器读取

前端之家收集整理的这篇文章主要介绍了Golang mgo驱动指定Mongo服务器读取前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Replica Sets搭建

服务器采用Replica Sets搭建,可参考Deploy a Replica Set

读模式

Mongod的读模式共有五种:

  • primary. 在主节点上进行所有的读操作
  • primaryPreferred. 优先在主节点上进行读操作,如果主节点不可用,再从从节点操作。
  • secondary.所有的读操作在从节点上进行。
  • secondaryPreferred.优先在从节点进行读操作,如果所有从节点都不可用,再从主节点操作。
  • nearest. 根据网络延迟时间 ,就近进行读操作,不考虑节点类型。

配置节点Tags Sets

Tag sets 允许指定一个replica set进行读操作,其中Mongod的读模式必须是以下四种之一:
primaryPreferredsecondarysecondaryPreferrednearest
Tags Sets配置参考:Configure Replica Set Tag Sets
主要操作如下:

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

mgo代码示例

根据以上的配置,如果需要指定从members 1中进行数据库读操作,可采取以下代码

  1. session,err := mgo.Dial("localhost")
  2. if err != nil {
  3. log.Fatalln(err)
  4. }
  5. defer session.Close()
  6. session.SetMode(mgo.Eventual,true) //需要指定为Eventual
  7. session.SelectServers(bson.D{{"dc","east"},{"use","reporting"}}) // 指定从1中读取
  8. db := session.DB("test")
  9. col := db.C("tbl")
  10. data := make([]interface{},10)
  11. col.Find(nil).Limit(10).All(&data)
  12. log.Println(data)

猜你在找的Go相关文章