是否可以使用golang應用程序中的mgo驅動程序運行副本集命令,如rs.initiate()
和rs.add()
?是否可以使用mgo驅動程序運行mongo replicaset命令?
如果是的話,怎麼樣?
是否可以使用golang應用程序中的mgo驅動程序運行副本集命令,如rs.initiate()
和rs.add()
?是否可以使用mgo驅動程序運行mongo replicaset命令?
如果是的話,怎麼樣?
感謝@ 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)
會話模式應該是monotonic
如被MgO使用的默認會話是primary
,其對主所有操作。由於副本集尚未初始化,並且不會有一所小學和操作(在這種情況下,replSetInitiate
)只會在配置
對於這項工作,蒙戈服務器將超時
"_id": "my_replica_set"
必須以副本集名稱my_replica_set
開始。這樣做將是一個方法:
mongod --replSet my_replica_set
爲rs.initiate命令的一個示例:
session, err := mgo.Dial("rs1.example.net")
if err != nil {
panic(err)
}
defer session.Close()
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.DB("admin").Run(bson.M{"replSetInitiate": config}, &result); err != nil {
panic(err)
}
同樣爲rs.add和任何其他RS *助手。
當然上的命令。所有驅動程序都建立在向數據庫發送「命令結構」的基本原則上。對於mgo,它是['Run()'](https://godoc.org/gopkg.in/mgo.v2#Database.Run),以及[數據庫命令]的完整列表(https://docs.mongodb .com/manual/reference/command /)列在覈心文檔中。 –
@NeilLunn你可以給我一個如何運行'rs,initiate()'和'rs.add()''命令的例子嗎? – Nithin