[英]MongoDB Replica Set Failover
我們有一個mongodb副本集,其中有兩個實例(127.0.0.1:27017-主節點,127.0.0.1:27018-輔助節點)和一個仲裁器(127.0.0.1:27019)。 當我通過使用rs.stepDown(60)從主節點降級時,它應成為輔助節點,而輔助節點應成為主實例,並且所有寫操作都應在輔助實例中執行(降級后為主實例)。 但是,在卸任后,我得到了一個異常“無法將數據寫入傳輸連接:遠程主機強行關閉了現有連接”。
App.Config具有以下鍵:
<appSettings>
<add key="mongoServerIP" value="127.0.0.1" />
<add key="mongoServerPort" value="27017"/>
<!--<add key="dbname" value="PSLRatingEngine"/>-->
<add key="MongoDbDatabaseName" value="PSLRatingEngine" />
<add key="testcollectionname" value="Test"/>
</appSettings>
C#代碼:
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ReplicaSetTest
{
class Program
{
static void Main(string[] args)
{
string mongoserverip = ConfigurationManager.AppSettings["mongoServerIP"].ToString();
int port = Convert.ToInt32(ConfigurationManager.AppSettings["mongoServerPort"].ToString());
string dbname = ConfigurationManager.AppSettings["MongoDbDatabaseName"].ToString();
string customercollectionname = ConfigurationManager.AppSettings["testcollectionname"].ToString();
try
{
MongoServerSettings settings = new MongoServerSettings();
settings.Server = new MongoServerAddress(mongoserverip, port);
// Create server object to communicate with our server
MongoServer server = new MongoServer(settings);
// Get our database instance to reach collections and data
var db = server.GetDatabase(dbname);
// Get user collection reference
var collection = db.GetCollection(customercollectionname);
int i = 0;
while(true)
{
Employee emp = new Employee();
emp.EmpId = i + 1000;
Random r = new Random();
emp.Age = r.Next(20, 70);
emp.Salary = r.NextDouble() * 100000;
emp.Name = "emp" + i;
emp.Dept = "Engineering";
collection.Insert<Employee>(emp);
i++;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
請讓我知道如果副本集的主實例發生任何問題,如何通過C#代碼自動從主服務器切換到輔助服務器。
假設您向主數據庫發送了確認寫入,然后在部分完成寫入之后但在完成並確認寫入完成之前,用軌道離子大炮炸了主寫入。 在這種情況下,您應該如何“自動從主要切換到次要”? 這種連接和操作意味着什么?
選舉需要花費幾秒鍾的時間,在此期間沒有要發送寫入內容的主對象。 沒有主駕駛員時駕駛員會做什么? 當連接轉到不再可用的節點時,如何保持相同的連接?
關鍵是,故障轉移期間應用程序中的錯誤是預料之中的,您的應用程序需要能夠處理它們。 當主數據庫發生故障時,MongoDB /驅動程序無法神奇地使一切正常運行,就像在所有情況下都沒有發生任何事情一樣。 選擇新的主驅動程序后,驅動程序將自動切換到新的主驅動程序,然后好像什么也沒發生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.