Можно ли запускать команды набора реплик, такие как rs.initiate()
и rs.add()
, с помощью драйвера mgo из приложения golang?
Если да, то как ??
Можно ли запускать команды набора реплик, такие как rs.initiate()
и rs.add()
, с помощью драйвера mgo из приложения golang?
Если да, то как ??
Благодаря ответу @ 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"
в конфиге
Чтобы это работало, серверы mongo должны быть запущены с именем набора реплик 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. * помощники.
Run()
и полный список Команды базы данных перечислены в основной документации. - person Neil Lunn   schedule 26.05.2017rs,initiate()
иrs.add()
? - person Nithin   schedule 26.05.2017