• 如何实现双机热备


    最近项目需要实现双机热备,大体情况是这样的

    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 = "主机监控中心站已关闭,备机中心站即将启动.....";

    实现主机监控软件断开备机监控软件自动打开

    下一步继续实现备机监控软件断开主机监控软件自动打开

    第三步主备机存储的数据相互备份还没思路求解!

  • 相关阅读:
    【链接】idea没有svn
    移动端适配解决方案
    项目中多个文件引入同一份公共样式less文件导致编译打包后有多份样式
    2020最新编辑器集成eslint、prettier、stylelint,git提交预检查代码配置
    eslint+prettier学习
    artTempate模版继承父模版之后再引入子模版不生效?
    iOS底层原理开篇
    iOS应用千万级架构:安全与加密
    使用RabbitMQ实现延迟任务
    JAVA三元运算符空指针引用的坑
  • 原文地址:https://www.cnblogs.com/newstart/p/2663994.html
Copyright © 2020-2023  润新知