2017-05-26 150 views
0

是否可以使用golang應用程序中的mgo驅動程序運行副本集命令,如rs.initiate()rs.add()是否可以使用mgo驅動程序運行mongo replicaset命令?

如果是的話,怎麼樣?

+0

當然上的命令。所有驅動程序都建立在向數據庫發送「命令結構」的基本原則上。對於mgo,它是['Run()'](https://godoc.org/gopkg.in/mgo.v2#Database.Run),以及[數據庫命令]的完整列表(https://docs.mongodb .com/manual/reference/command /)列在覈心文檔中。 –

+0

@NeilLunn你可以給我一個如何運行'rs,initiate()'和'rs.add()''命令的例子嗎? – Nithin

回答

2

感謝@ 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) 
} 

注意以下幾點:

  1. 連接字符串中?connect=direct

    如果未指定,則連接將超時,可能是因爲副本集尚未初始化。

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

    會話模式應該是monotonic如被MgO使用的默認會話是primary,其對主所有操作。由於副本集尚未初始化,並且不會有一所小學和操作(在這種情況下,replSetInitiate)只會在配置

    對於這項工作,蒙戈服務器將超時

  3. "_id": "my_replica_set"必須以副本集名稱my_replica_set開始。這樣做將是一個方法:

    mongod --replSet my_replica_set 
    
  4. Mgo docs使用session.Run()的「管理」數據庫
2

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 *助手。

相關問題