2013-11-22 79 views
0

我正在使用C#驅動程序來使用MongoDB。我需要使用我的程序在執行過程中更新設置配置,然後允許程序的其他部分繼續使用驅動程序。MongoDB C#更改副本集配置

我目前的問題是重新配置驅動程序使用新的設置。

try 
{ 
    var res = Database.Admin.RunCommand(new CommandDocument("replSetReconfig", replicaSetConfig)); 
} 
catch (EndOfStreamException){} 
catch (Exception e) 
{ 
    Log.Exc("Problem updating replica set", e); 
    ranCommand = false; 
} 
if (ranCommand) 
{ 
HERE - I need to update the MongoClient or MongoServer to have the new servers 
    return; 
} 

我假設發生EndOfStreamException時,由於服務器已關閉/啓動了重新配置,所以命令已成功。

我想更新驅動程序,讓新的配置,以確保它肯定會重新連接到至少有一臺服務器,在任何邊緣的情況下,更改配置將阻止它連接回它的原始連接字符串。

有什麼辦法可以達到這個目的嗎?

作爲一個額外的問題,有沒有辦法從C#來確定當前的副本集配置版本?

感謝

回答

0

我可以回答你問題的第二部分 - 你可以查詢本地數據庫,以獲得當前副本集配置:

MongoServer server = client.GetServer(); 
var local = server.GetDatabase("local"); 
var collection = local.GetCollection("system.replset"); 
var cfg = collection.FindOne(); 
Console.WriteLine(cfg["version"]); 

我會想象,如果原來的連接字符串沒有有效期更長,您需要使用新的連接字符串創建一個新的MongoClient對象。

[稍後] 您還可以通過在管理數據庫上運行replSetGetStatus命令來獲取有關副本集的所有其他信息,包括其狀態。