是否可以从 golang 应用程序运行副本集命令,例如rs.initiate()并rs.add()使用 mgo 驱动程序?
如果是,如何?
感谢@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)
请注意以下几点:
?connect=direct 在连接字符串中。
如果未指定,连接将超时,可能是因为副本集尚未初始化。
session.SetMode(mgo.Monotonic, true)
会话模式应该是monotonicmgo 使用的默认会话,primary它在主服务器上执行所有操作。由于副本集尚未初始化,因此不会有主节点并且操作(在本例中为replSetInitiate)将超时
"_id": "my_replica_set" 在配置中
为此,必须使用副本集名称启动 mongo 服务器my_replica_set。这样做的一种方法是:
mongod --replSet my_replica_set
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1227 次 |
| 最近记录: |