mongodb - 是否可以使用 mgo 驱动程序运行 mongo replicaset 命令?

标签 mongodb go mgo

是否可以使用来自 golang 应用程序的 mgo 驱动程序运行副本集命令,例如 rs.initiate()rs.add()

如果是,怎么做?

最佳答案

感谢@alex-blex 的回答让我开始了。但这最终对我有用:

session, err := mgo.Dial("rs1.example.net?connect=direct")
if err != nil {
    panic(err)
}
defer session.Close()
session.SetMode(mgo.Monotonic, true)

config := bson.M{
    "_id": "my_replica_set",
    "members": []bson.M{
        {"_id": 0, "host": "rs1.example.net:27017"},
        {"_id": 1, "host": "rs2.example.net:27017", "priority": 2},
        {"_id": 2, "host": "rs3.example.net", "arbiterOnly": true},
    },
}
result := bson.M{}
if err := session.Run(bson.M{"replSetInitiate": config}, &result); err != nil {
    panic(err)
}

注意以下几点:

  1. ?connect=direct 在连接字符串中。

    如果不指定,连接会超时,可能是因为副本集还没有初始化。

  2. session.SetMode(mgo.Monotonic, true)

    session 模式应该是monotonic,因为 mgo 使用的默认 session 是 primary,它在 primary 上执行所有操作。由于副本集尚未初始化,因此不会有主节点,操作(在本例中为 replSetInitiate)将超时

  3. "_id": "my_replica_set" 在配置中

    为此,mongo 服务器必须以副本集名称 my_replica_set 启动。一种方法是:

    mongod --replSet my_replica_set
    
  4. 根据 Mgo docs将 session.Run() 用于“admin”数据库上的命令

关于mongodb - 是否可以使用 mgo 驱动程序运行 mongo replicaset 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44196113/

相关文章:

angularjs - Nodejs通过id获取用户

arrays - 将数组元素从一个数组位置移动到另一个数组位置 (mongo)

go - 使用额外参数实现分段文件上传

戈朗 : Processing 5 huge files concurrently

mongodb - mgo API - mgo、mgo/bson、mgo/txn 之间的区别

ruby-on-rails - Rails 和 Mongoid::将字符串转换为数组

javascript - $regex 在 MongoDB 中不起作用

smtp - Gmail:530 5.5.1 需要身份验证。了解更多信息

mongodb - 使用 Golang 和 mgo 从 Collection MongoDB 中获取元素

go - mgo:查询 ObjectId 的时间值范围