如何實現雙機熱備


最近項目需要實現雙機熱備,大體情況是這樣的

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 = "主機監控中心站已關閉,備機中心站即將啟動.....";

實現主機監控軟件斷開備機監控軟件自動打開

下一步繼續實現備機監控軟件斷開主機監控軟件自動打開

第三步主備機存儲的數據相互備份還沒思路求解!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM