是否可以使用来自 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)
}
注意以下几点:
?connect=direct
在连接字符串中。如果不指定,连接会超时,可能是因为副本集还没有初始化。
session.SetMode(mgo.Monotonic, true)
session 模式应该是
monotonic
,因为 mgo 使用的默认 session 是primary
,它在 primary 上执行所有操作。由于副本集尚未初始化,因此不会有主节点,操作(在本例中为replSetInitiate
)将超时"_id": "my_replica_set"
在配置中为此,mongo 服务器必须以副本集名称
my_replica_set
启动。一种方法是:mongod --replSet my_replica_set
- 根据 Mgo docs将 session.Run() 用于“admin”数据库上的命令
关于mongodb - 是否可以使用 mgo 驱动程序运行 mongo replicaset 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44196113/