最近項目需要實現雙機熱備,大體情況是這樣的
1、2台監控主機一個做主機一個做備機
2、系統是window server 2008 環境.net4.0
3、2台監控主機上面都有同一款監控軟件(c#開發),但只有一個軟件在運行,另一個軟件不啟動
4、我想要實現的是主機的監控軟件關閉后,備機可以自動檢測然后判斷主機監控軟件已經關閉,備機監控軟件啟動運行
5、同樣備機監控軟件啟動后,主機的監控軟件也可以自動檢測,主備機可以相互切換
6、存儲數據保存是以文件的形式保存,如何互相備份
我在網上找了很久,發現很多window下面的雙機熱備軟件都需要錢買,倒是liunx下面有開源的軟件,
window下面雙機熱備軟件有開源的可以留個言啊。。。
既然不想花錢買又要實現這個功能,下面我談談我自己的思路,還請各位批評指正:
1、既然要實現主備機相互檢測是否軟件在運行,那么必須要用的socket,我的想法是在window上面建立一個
window服務程序,不停的在發心跳包檢測對方電腦上的軟件是否啟動
2、設置3個IP地址,主機一個IP備機一個IP還需要一個公共IP地址,當2台主機切換到備機的時候,清除主機公共IP
(虛擬IP)在備機新建公共IP(虛擬IP),這樣不影響通信
3、監控軟件和window服務程序進行交互
4、2台電腦存儲的數據如何相互備份?
以上是我的想法,請各位大俠給支個招。。。。
非常感謝!!!
第一步創建window服務程序代碼如下
protected override void OnStart(string[] args)
{
timer1 = new System.Timers.Timer();
timer1.Interval = 3000; //設置計時器事件間隔執行時間
timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);
timer1.Enabled = true;
}
protected override void OnStop()
{
this.timer1.Enabled = false;
}
public static System.Threading.Thread m_NetSendThread;//數據發送線程
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//打開數據發送線程
m_NetSendThread = new System.Threading.Thread(new System.Threading.ThreadStart(NetSendThread));
m_NetSendThread.Priority = ThreadPriority.Lowest;
m_NetSendThread.Start();
}
//雙擊監測發送線程
private static void NetSendThread()
{
int port=23701;
string ip="172.16.62.34", localIP="172.16.62.34";
bool bsjrb, bzbj, bstart;//雙擊熱備,主備機
int tick = System.Environment.TickCount;
byte[] sendbuf = new byte[4];
UdpClient udpsend; //發送端udp
sendbuf[0] = 0x7e;
try
{
bsjrb = true;
udpsend = new UdpClient(new IPEndPoint(IPAddress.Parse(localIP), port));
IPEndPoint groupEP = new IPEndPoint(IPAddress.Parse(ip), port);
while (true)
{
try
{
#region 使用雙擊熱備,向外發送運行狀態廣播
if (bsjrb)
{
sendbuf[2] = 0x1;
try
{
udpsend.Send(sendbuf, sendbuf.Length, groupEP);
}
catch (System.Exception ex)
{
}
}
#endregion
}
catch (System.Exception ex1)
{
}
Thread.Sleep(1000);
}
}
catch (System.Exception ex)
{
}
}
安裝window服務程序
安裝成功點擊電腦右鍵查看服務--winservice1存在並已經啟動服務
說明安裝成功。
第二步監控軟件接收window服務程序數據判斷是否斷開
listener = new UdpClient(new IPEndPoint(IPAddress.Parse(localIP), port));//本地監聽主機IP及通訊端口
IPEndPoint groupEP = new IPEndPoint(IPAddress.Parse(srcip), port);//遠端主機IP及通訊端口
if (bZbj)
lb_title.Text = "主機監控中心站已關閉,備機中心站即將啟動.....";
實現主機監控軟件斷開備機監控軟件自動打開
下一步繼續實現備機監控軟件斷開主機監控軟件自動打開
第三步主備機存儲的數據相互備份還沒思路求解!