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

Nit*_*hin 0 go mongodb mgo

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

如果是,如何?

Nit*_*hin 5

感谢@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)
}
Run Code Online (Sandbox Code Playgroud)

请注意以下几点:

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

    如果未指定,连接将超时,可能是因为副本集尚未初始化。

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

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

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

    为此,必须使用副本集名称启动 mongo 服务器my_replica_set。这样做的一种方法是:

    mongod --replSet my_replica_set
    
    Run Code Online (Sandbox Code Playgroud)
  4. 根据Mgo 文档,对“admin”数据库上的命令使用 session.Run()