心跳机制

Oracle RAC 实例管理(Cluster Group Service)

匿名 (未验证) 提交于 2019-12-03 00:40:02
CGS是Oracle RAC 实例管理的实现方法,负责实现如下功能 1)实例之间的心跳机制 2)当实例离开或者加入集群时完成数据库集群的重新配置 3)解决数据库层面出现的脑裂 1,网络心跳 数据库层面的网络心跳是通过LMON进程实现的,每个实例的LMON进程会定期通过数据库的私网与所有远程实例进行通信,以确认其他实例的状态,如果,某一个实例一段时间之内不能够响应其他节点发送的网络心跳信息,那么数据库集群就需要进行重新配置,用户能够看到的最直观的信息就是ora-29740错误。 2,磁盘心跳 数据库层面的磁盘心跳和GI层面的磁盘心跳实现的功能基本相同,但是,由于数据库层面并没有VF存在,所以,实现方式会有所不同,对应RAC数据库,LMON进程会将网络心跳中包含的远程节点的状态信息发送给CKPT进程,CKPT进程默认每3s向数据库的控制文件写入本地实例能够访问的其他实例信息,从而完成数据库实例的磁盘心跳。如果数据库实例的磁盘心跳出现了问题,用户能够看到的最直观的信息就是ora-494错误。 3,本地心跳 LMHB进程会定期监控LMON,LMS,LMD,LCK0等于cache fusion相关的重要后台进程,如果LMHB进程发送某一个重要的后台进程在一段时间之内没有更新自己的状态信息,就会进行分析,如果有必要通过重启本地节点的方式来解决问题 重新配置的阶段 阶段1

dubbo心跳检测机制

匿名 (未验证) 提交于 2019-12-03 00:26:01
目的: 维持provider和consumer之间的长连接 实现: dubbo心跳时间heartbeat默认是60s,超过heartbeat时间没有收到消息,就发送心跳消息(provider,consumer一样),如果连着3次(heartbeatTimeout为heartbeat*3)没有收到心跳响应,provider会关闭channel,而consumer会进行重连;不论是provider还是consumer的心跳检测都是通过启动定时任务的方式实现; provider绑定和consumer连接的入口: public class HeaderExchanger implements Exchanger { public static final String NAME = "header" ; @Override public ExchangeClient connect ( URL url , ExchangeHandler handler ) throws RemotingException { return new HeaderExchangeClient ( Transporters . connect ( url , new DecodeHandler ( new HeaderExchangeHandler ( handler ))), true ); }

heartbeat的双机互备

末鹿安然 提交于 2019-12-02 17:57:37
heartbeat快速部署: 高可用服务————将资源(IP及程序服务等资源)从一台已经故障的主机上快速转移到另一台正常运转的主机上继续提供服务 配置heartbeat软件的配置文件,指定哪一台heartbeat服务器作为主服务器,另一台作为热备服务器,在热备上配置heartbeat守护程序监听主服务器的心跳信息。(主备模式) 上面是主备模式,另外还可以做主主模式,即两台服务器互为主备,这时他们之间会相互发送报文来告诉对方自己当前的状态 如果在规定的时间内没有收到对方发送过来的心跳报文,就会认为对方挂了,此时就会启动程序接管运行在对方机器上的资源或服务。 heartbeat故障切换时间为5-20s 和keepalived一样。heartbeat也是服务器级别的,不是服务级别。 切换条件: 1、服务器宕机 2、heartbeat服务本身故障 3、心跳线故障 服务故障不会导致切换,但是可以通过服务故障,把heartbeat服务停掉,这样就符合切换条件了 heartbeat心跳连接: 1、串行线缆,即所谓的串口(缺点是两台主机之间不能距离太远) 2、以太网线两台主机上的网卡直连(推荐,但是需要在两台主机上各自做路由) 3、以太网电缆,通过交换机等网络设备连接(次选) 生产环境使用第二种或第一种,或是两种同时使用 脑裂: 两台高可用服务器对在指定的时间内

netty5心跳与业务消息分发实例

馋奶兔 提交于 2019-12-02 13:10:45
  继续基于我们之前的demo(参见 netty5自定义私有协议实例 ),这次我们加上连接校验和心跳机制:      只要校验通过,客户端发送心跳和业务消息是两个不同的事件发送的,彼此互不干扰。针对以上流程,我们需要增加4个handler:客户端请求handler、心跳handler ,服务端校验handler、心跳处理handler。当然,引导类也得添加上面对应的handler。上代码:   新增客户端首次连接handler: package com.wlf.netty.nettyclient.handler; import com.wlf.netty.nettyapi.javabean.Header; import com.wlf.netty.nettyapi.javabean.NettyMessage; import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; @Slf4j public class ControlClientHandler extends ChannelHandlerAdapter { @Override public void channelActive

golang+sse+angular的心跳机制、angullar的轮询机制、time.Duration和time.NewTicker的学习

半世苍凉 提交于 2019-12-02 13:02:33
长连接断开的原因 连接超时,浏览器自动断开连接 进程被杀死 不可抗拒因素 根据不同情况,高效保活的方式 连接超时:心跳机制 进程保活 断线重连 重点心跳机制 产物 心跳包 心跳应答 轮询与心跳区别 轮询一次相当于:建立一次TCP连接+断开连接 心跳:在已有的连接上进行保活 心跳设计要点 心跳包的规格(内容&大小) 心跳发送间隔时间(按照项目的特性进行判断) 断线重连机制(核心= 如何判断长连接的有效性) 心跳具体实现(基于sse的长连接) 客户端做心跳机制:客户端长时间没有反应,使用心跳机制,证明客户端的存在 服务端做心跳机制:服务端长时间没有反应,使用心跳机制,证明服务端还存在 服务端做心跳机制 思考点: 如何判断连接 中断信号 (单独的思考,在本次的代码中,没有用于跟心跳机制有关,以后有想法,会补上) notify := w.(http.CloseNotifier).CloseNotify() // log.Println("notify:",<- notify) 会直接堵住的,因为notify它接收连接中断信号 go func(){ // 太迷了,正确想法就是:只能接收异常的信号,就是网络中断的信号 fmt.Println("接收连接中断信号") <-notify userData[r.RemoteAddr] = r.RemoteAddr offUser <- r

WebSocket断开原因、心跳机制防止自动断开连接

爱⌒轻易说出口 提交于 2019-12-02 08:10:43
1、断开原因 WebSocket断开的原因有很多,最好在WebSocket断开时,将错误打印出来。 ws.onclose = function (e) { console.log('websocket 断开: ' + e.code + ' ' + e.reason + ' ' + e.wasClean) console.log(e) } 错误状态码: WebSocket断开时,会触发 CloseEvent , CloseEvent会在连接关闭时发送给使用 WebSockets 的客户端. 它在 WebSocket 对象的 onclose 事件监听器中使用。CloseEvent的code字段表示了WebSocket断开的原因。可以从该字段中分析断开的原因。 CloseEvent有三个字段需要注意, 通过分析这三个字段,一般就可以找到断开原因 CloseEvent.code : code是错误码,是整数类型 CloseEvent.reason : reason是断开原因,是字符串 CloseEvent.wasClean : wasClean表示是否正常断开,是布尔值。一般异常断开时,该值为false 状态码 名称 描述 0–999 保留段, 未使用. 1000 CLOSE_NORMAL 正常关闭; 无论为何目的而创建, 该链接都已成功完成任务. 1001 CLOSE_GOING

Netty检查连接断开的几种方法

↘锁芯ラ 提交于 2019-12-02 07:00:56
最近项目中需要判定客户端是否还在线,需要用到心跳检测机制。这里做个笔记总结一下。 心跳检测机制: 网络中接收和发送数据都是通过操作系统的socket实现的。但是如果套接字已经断开,那发送和接收数据就会出问题。 但如何判断套接字是否断开了呢?这就需要建立一种机制,能够检测通信对方是否还存活。如果已经断开,就要释放资源。这种机制通常采用心跳检测实现。 所谓的“心跳”就是定时发送一个自定义的结构体(心跳包或心跳帧),让对方知道自己“在线”,以确保链接的有效性。心跳检测规定定时发送心跳检测数据包,接收方接心跳包后回复,否则认为连接断开。 一、Netty心跳检测方式 1、pipeline加入IdleStateHandler Netty提供了心跳检测类IdleStateHandler,它有三个参数,分别是读超时时间、写超时时间、读写超时时间。 1)readerIdleTime:读超时时间; 2)writerIdleTime:写超时时间; 3)allIdleTime:所有类型超时时间; 这里最重要是的readerIdleTime,当设置了readerIdleTime以后,服务端server会每隔readerIdleTime时间去检查一次channelRead方法被调用的情况,如果在readerIdleTime时间内该channel上的channelRead()方法没有被触发

基于心跳的socket长连接

末鹿安然 提交于 2019-12-02 05:09:48
案例: 心跳: socket模拟网页的报文连接某个网站,创建tcp的socket后,当我socket.connect后,如果在5到7秒钟不socket.send,那么这个链接就失效了。 请问如何长时间的保持这个链接 这是在服务器端的设置的,客户端没法设置,可以发送心跳包。 socket.connect后,每3-4秒用socket.send发送一字节数据(内容随便),然后观查这个连接是否保持。 lientSocket=serverSocket.accept(); OutputStream os = clientSocket.getOutputStream(); ObjectOutputStream oos=new ObjectOutputStream(os); oos.writeObject(al); oos.flush(); oos.close()//socket会关闭 实现: 长连接的维持,是要客户端程序,定时向服务端程序,发送一个维持连接包的。 如果,长时间未发送维持连接包,服务端程序将断开连接。 客户端: 通过持有Client对象,可以随时(使用sendObject方法)发送Object给服务端。 如果keepAliveDelay毫秒(程序中是2秒)内未发送任何数据,则,自动发送一个KeepAlive对象给服务端, 用于维持连接。 由于,我们向服务端,可以发送很多不同的对象

【笔记】vue中websocket心跳机制

僤鯓⒐⒋嵵緔 提交于 2019-12-01 22:09:23
data () { return { ws: null,//建立的连接 lockReconnect: false,//是否真正建立连接 timeout: 28*1000,//30秒一次心跳 timeoutObj: null,//心跳心跳倒计时 serverTimeoutObj: null,//心跳倒计时 timeoutnum: null,//断开 重连倒计时 } }, created() { this.initWebpack(); }, methods: { initWebpack(){ this.ws = new WebSocket(process.env.SOCKET_OTC); this.ws.onopen = this.onopen; this.ws.onmessage = this.onmessage; this.ws.onclose = this.onclose; this.ws.onerror = this.onerror; }, reconnect() {//重新连接 var that = this; if(that.lockReconnect) { return; }; that.lockReconnect = true; //没连接上会一直重连,设置延迟避免请求过多 that.timeoutnum && clearTimeout(that.timeoutnum)

基于Netty的IdleStateHandler实现Mqtt心跳

末鹿安然 提交于 2019-11-30 15:04:56
基于Netty的IdleStateHandler实现Mqtt心跳 IdleStateHandler 解析 最近研究 jetlinks 编写的基于 Netty 的 mqtt-client ( https://github.com/jetlinks/netty-mqtt-client ),总结若干知识点. Netty 中,实现心跳机制较为简单,主要依赖于 IdleStateHandler 判断 channel 的读写超时. /** * Creates a new instance firing {@link IdleStateEvent}s. * * @param readerIdleTimeSeconds * an {@link IdleStateEvent} whose state is {@link IdleState#READER_IDLE} * will be triggered when no read was performed for the specified * period of time. Specify {@code 0} to disable. * @param writerIdleTimeSeconds * an {@link IdleStateEvent} whose state is {@link IdleState#WRITER_IDLE} *