如何实现双机热备

简介:

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

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

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

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

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



本文转自夜&枫博客园博客,原文链接:http://www.cnblogs.com/newstart/archive/2012/08/30/2663994.html,如需转载请自行联系原作者

相关文章
|
移动开发 网络协议 NoSQL
.NET Core WebSocket实现简易、高性能、集群即时通讯组件
.NET Core WebSocket实现简易、高性能、集群即时通讯组件
545 0
|
Linux iOS开发 MacOS
brew - mac 下的 brew 切换为国内源
brew - mac 下的 brew 切换为国内源
4605 0
|
关系型数据库 MySQL 数据库
MySQL回滚工具:binlog 闪回工具 MyFlash工具
MySQL回滚工具:binlog 闪回工具 MyFlash工具
|
JavaScript 前端开发
如何将你的项目上传到 npm
如何将你的项目上传到 npm
774 0
|
SQL Java Apache
Flink内存问题之内存溢出如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
监控 数据可视化 Java
Elasticsearch JVM 堆内存使用率飙升,怎么办?
Elasticsearch JVM 堆内存使用率飙升,怎么办?
|
Rust 安全 Swift
新兴编程语言:未来开发者的新选择
新兴编程语言代表了技术的不断创新和发展。Rust 的安全性和性能、Kotlin的Android生态、Swift 的苹果生态等,都在各自领域取得了显著的成就。选择一门适合自己项目的新兴编程语言,可以提升开发效率、减少错误并保持创新。然而,也要考虑到学习成本和生态建设的挑战。无论怎样,新兴编程语言将继续在未来的软件开发中扮演重要角色。感谢您阅读本文,如果您对新兴编程语言有任何想法或疑问,请在评论区与我分享!让我们一起探索未来开发者的新选择。
463 0
新兴编程语言:未来开发者的新选择
|
对象存储 数据安全/隐私保护 开发者
.net core 阿里云接口之获取临时访问凭证
假设您是一个移动App开发者,希望使用阿里云OSS服务来保存App的终端用户数据,并且要保证每个App用户之间的数据隔离。此时,您可以使用STS授权用户直接访问OSS。 使用STS授权用户直接访问OSS的流程如下: ![image.png](https://ucc.alicdn.com/pic/developer-ecology/j2ygdazy447va_7d767aa1db4047778a7b5c568b5d7c11.png) ## 1、关于秘钥等信息的申请见如下链接 [使用STS临时访问凭证访问OSS](https://help.aliyun.com/zh/oss/developer
370 0
|
存储 负载均衡 网络协议
keepalived双机热备
keepalived双机热备
545 0
|
负载均衡 监控 应用服务中间件
Nginx极简入门(十)配置Nginx双机热备份,实现系统高可用解决方案!
之前讲了Nginx 如何实现负载均衡,以及如何实现动静分离。但是还确少Nginx 高可用的部分。因为Nginx 处于整个系统非常重要的位置,Nginx的高可用影响到整个系统的稳定性。如果nginx服务器宕机后端web服务将无法提供服务,影响严重。所以,接下来就来介绍Nginx + keepalived 实现高可用的方案。
Nginx极简入门(十)配置Nginx双机热备份,实现系统高可用解决方案!