`

心跳机制 heartbeat

    博客分类:
  • java
 
阅读更多

       心跳机制可以分为集中式和分散式,简单说集中式就是A通过心跳告诉B自己还活着,C通过B来获得或者的A,这里面的A,B,C可以是一个集群,可以认为B是个服务发现的功能。这种方式广泛应用于hadoop,NameServer来管理哪些DataNode时活的,客户端存储数据要从nameserver中获取存储的datanode的位置。这种方式有弊端就是B会存在单点故障,当然也有方式解决,譬如zookeeper来充当B的角色,实现相对复杂,但是监控等比较容易,而且A不需要关心C到底哪些活的,B(相对简单)告诉A那个可用即可。

分散式:A 和 C 通过心跳来告诉C,A是活的。这种方式简单,譬如A是server端,有两台机器,C是client端,有10台机器,那么C定时向A发送心跳,来看A是否还活着,决定向那一台机器发送数据,这种简单,但是存在弊端,就是譬如A有10台机器,C有30台机器,单位时间那么就存在300个心跳,也就是存在了信令风暴。各有利弊,要看实际需求。

       从实现机制上看有两种,第一种如果链接是TCP那么可以采用TCP自带的keepalive选项,第二种就是应用程序自己控制。

       第一中TCP的keepalive,从名字可以看出,可以用来保持tcp链接的alive,tcp的keepalive有三个参数,tcp_keepalive_time 链接闲置多久发送keepalive的包

tcp_keepalive_probes 发送几个ack 包不回复当作连接死亡

tcp_keepalive_intvl 两个ack包间隔多久

centos默认值7200秒(2个小时,要不要这么蛋疼啊!)、9次、75秒,连接就有了一个时间窗口,如果发送的ack连续不回复,那么这个时间窗口就会越来越小,当变为零时,则认为该连接不可用。这里有一篇非常详细的介绍文章: http://tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO ,很多网络设备,由于硬件的限制(cpu,内存),尤其时NAT(network address Translations),无法保持其上的所有连接,因此必要的时候,会在连接池上选择一些不活跃的链接踢掉,典型的算法LRU,把最久没有数据的链接踢掉,通过tcp的keepalive机制,可以让连接每隔一个小时产生一个ack包,降低被T掉的风险,当然代价就是额外的网络和cpu负担。

       第二种就是应用程序自己控制,判断方法有两种,时间差策略和简单标志。时间差标志,当前时间-上次心跳时间 > 某个时间差,则认为该连接不可用。简单标志,当发送心跳,对面没有返回,则认为对方不可用。

拿netty的长连接举例,客户端和服务器创建了长连接,我们可以把它们的连接存到一个列表,在netty的handler种,我们定义new IdleStateHandler(60, 15, 13,TimeUnit.SECONDS)然后在某个handler种定义连接http://www.oschina.net/question/139577_146101,@Override

    public void userEventTriggered(ChannelHandlerContext ctx, Object evt)
            throws Exception {
        if (evt instanceof IdleStateEvent) {
            IdleStateEvent event = (IdleStateEvent) evt;
            if (event.state().equals(IdleState.READER_IDLE)) {
                System.out.println("READER_IDLE");
                // 超时关闭channel
                ctx.close();
            } else if (event.state().equals(IdleState.WRITER_IDLE)) {
                System.out.println("WRITER_IDLE");
            } else if (event.state().equals(IdleState.ALL_IDLE)) {
                System.out.println("ALL_IDLE");
                // 发送心跳
                ctx.channel().write("ping\n");
            }
        }
        super.userEventTriggered(ctx, evt);
    }

这样来决定是否关闭channel,RocketMQ是这样做的。当下次在发送数据时,需要重新创建链接。

分享到:
评论

相关推荐

    Linux高可用集群心跳机制研究.pdf

    "Linux 高可用集群心跳机制研究" ...心跳机制是高可用集群的重要技术之一,Heartbeat 集群软件提供了两种类型的心跳机制:环形心跳和广播心跳。它们可以根据不同的需求选择合适的心跳机制,以提高系统的可用性。

    心跳机制原理及其实现

    ### 心跳机制原理及其实现 #### 一、引言 在计算机网络通信中,尤其是在采用TCP连接的客户端/服务器(Client/Server, C/S)架构的系统中,确保网络连接的有效性和稳定性至关重要。当一方正常关闭连接时,另一方可以...

    C# 实现 TCP服务端+客户端 带心跳机制.zip

    本项目“C#实现TCP服务端+客户端带心跳机制”旨在教你如何构建一个具备心跳检查功能的TCP服务器和客户端系统,确保连接的稳定性和数据的可靠性。 TCP服务端和客户端是任何基于TCP的应用程序的两个基本组成部分。...

    JAVA WEB心跳机制简单实现代码

    在Java Web开发中,心跳机制是一种用于检测网络连接状态或者服务端是否在线的重要技术。它通常应用于客户端和服务端之间保持连接活跃,确保数据传输的可靠性和及时性。本篇文章将详细解析如何在Java Web中实现一个...

    Heartbeat 心跳检测 Linux 中设置

    Heartbeat通过在集群内的各节点间发送心跳信号来监测系统状态。正常情况下,主服务器(active server)拥有资源,并向备份服务器(passive server)定期发送心跳信号。如果备份服务器在预设时间内未收到心跳信号,则...

    VMware双机热备配置(Heartbeat)

    VMware双机热备配置是一种确保高可用性的重要技术,通过Heartbeat机制实现两台服务器之间的实时监控和切换,以保证关键业务的连续运行。在VMware环境下,双机热备能够有效避免单一服务器故障导致的服务中断,提高...

    QT_HeartBeat.rar

    QT_HeartBeat.rar 是一个关于QT库中实现TCP网络通信心跳机制和客户端断线重连功能的示例项目。这个项目包含两个文件:haveHeart_Client(客户端)和haveHead_Server(服务器端),它们旨在帮助初级程序员更好地理解...

    heartbeat12个安装包官网下载

    - `heartbeat-stonith-2.1.3-3.el5.centos.i386.rpm`:STONITH(Shoot The Other Node In The Head)是高可用性集群中的一个机制,用于强制关闭故障节点,防止其对整个系统造成影响。 - `heartbeat-gui-2.1.3-3....

    heartbeat心跳检测(CS)

    利用I/O复用机制撰写的简单心跳客户端和服务器。主要包括以下工作: 设计客户端和服务器之间交互的报文格式; 设计客户端,具有发送心跳和超时重发的功能; 设计服务器,具有接收心跳和其他程序的能力,具有超时重发...

    Netty HelloWorld + HeartBeat Demo

    在这个“Netty HelloWorld + HeartBeat Demo”中,我们将深入理解Netty的基本用法以及如何实现心跳机制。 首先,让我们从Netty HelloWorld Demo开始。这个Demo通常用于展示如何使用Netty创建一个简单的TCP服务器和...

    TCP协议的KeepAlive机制与HeartBeat心跳包.docx

    KeepAlive

    Debian Heartbeat 管理手册

    - **Heartbeat的组成**:Heartbeat主要包括三个主要部分:心跳检测(Heartbeats),状态传递(State Passing)和资源管理(Resource Management)。心跳检测用于检查节点的活动,状态传递则负责在节点间交换信息,...

    Linux-HA开源软件Heartbeat(安装篇)

    如果在一个预设时间内未收到对方的心跳信息,Heartbeat将启动资源接管机制,将运行在故障节点上的服务转移到其他正常节点上。 在安装Heartbeat前,首先需要准备以下硬件设备: 1. **节点服务器**:至少需要两台主机...

    双机HA源代码---heartbeat_2.1.4.tar.gz

    1. **网络通信**:Heartbeat通过心跳机制在主、备服务器之间发送周期性的数据包,用于检测对方是否在线。如果心跳停止,系统将判定主节点故障并启动备节点。 2. **资源管理**:Heartbeat可以管理各种系统资源,如IP...

    centos linux heartbeat 安装包和配置文件

    在IT行业中,Linux系统是广泛应用于服务器环境的操作系统,尤其在集群系统中,心跳机制(Heartbeat)扮演着至关重要的角色。本主题聚焦于CentOS Linux操作系统中的Heartbeat配置,这是一个用于实现高可用性集群的...

    heartbeat安装包

    这些扩展可能提供了额外的监控功能、日志处理、报警机制或其他定制化的服务,以增强Heartbeat的监控能力。 再者,`heartbeat-stonish-*.rpm`可能是针对特定环境或协议的组件,"stonish"可能是一个专有名词,用于...

    Disk Heartbeat

    在HACMP v5.1版本中引入了一种新的心跳机制——Disk Heartbeat,这是一种非IP基础的心跳检测方式,为集群的节点间通信提供了另一种选择。 Disk Heartbeat的主要目的是通过共享存储设备来监控集群中各节点的状态。它...

    Heartbeat-3-0-STABLE-3.0.6.tar.gz

    如果心跳停止,意味着服务可能已经中断,此时,Heartbeat 将触发预设的故障恢复机制。此外,Heartbeat 支持多种通信协议,包括 TCP/IP 和 UDP,可以适应各种网络环境。 在解压 "Heartbeat-3-0-STABLE-3.0.6.tar.gz...

    利用Heartbeat实现双机热备配置

    Heartbeat通过心跳机制监测集群内各节点的状态,当检测到主节点故障时,自动将服务切换至备用节点,保证业务连续性。 - **心跳通信**:两台主机之间通过专用的心跳网络进行通信,定期发送心跳信号。 - **故障检测与...

    LVS环境搭建及图形化管理(Pacemaker管理+heartbeat心跳+ldirector健康检查及转发)

    本文将详细介绍如何搭建LVS环境,并利用Pacemaker进行图形化管理,同时结合heartbeat心跳机制和ldirector进行健康检查及流量转发。 首先,LVS的核心是IP负载均衡技术,它通过调度器将请求分发到后端的真实服务器,...

Global site tag (gtag.js) - Google Analytics