最近一段时间都在读HDFS关于Heartbeat(心跳检测)的源码,读的过程中忽然想到了以前在项目中用到的、为Nginx做HA的Keepalived,这两款高可用开源方案:Keepalived和Heartbeat很相像,但细想差别还是挺大的,所以梳理了一下,总结如下:
Heartbeat:
Heartbeat是Linux-HA工程的一个组件,它实现了一个高可用集群系统。heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运行在对方主机上的资源或者服务。-------百度百科
Heartbeat在分布式的架构中有着无可替代的重要作用。通过Heartbeat维持着master和slave之间,或者slave与slave之间的关系,让master了解slave的状态,让slave从master处获取最新命令,或者让各个slave了解其他slave的状态。
同样的,在hadoop中Heartbeat也有着重要的作用。Datanode通过定期的向Namenode发送心跳,告诉当前Datanode的状态信息,顺便告诉Namenode自己还活着,而Namenode通过对Datanode的心跳的答复发送一些命令信息,比如说哪些BLOCK可以删除了,哪些BLOCK损坏了,哪些块需要增加副本等等。
Keepalived:
Keepalived是一个基于VRRP协议来实现的WEB 服务高可用方案,可以利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服 务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
在一个VRRP虚拟路由器中,有多台物理的VRRP路由器,但是这多台的物理的机器并不能同时工作,而是由一台称为MASTER的负责路由工作,其它的都是BACKUP,MASTER并非一成不变,VRRP让每个VRRP路由器参与竞选,最终获胜的就是MASTER。在一个虚拟路由器中,不管谁是MASTER,对外都是相同的MAC和IP(称之为VIP)。MASTER拥有一些特权,比如拥有虚拟路由器的IP地址,我们的主机就是用这个IP地址作为静态路由的。拥有特权的MASTER要负责转发发送给网关地址的包和响应ARP请求。
二者区别:
1)Keepalived使用更简单:从安装、配置、使用、维护等角度上对比,Keepalived都比Heartbeat要简单得多;
2)Heartbeat功能更强大:Heartbeat虽然复杂,但功能更强大,配套工具更全,适合做大型集群管理,而Keepalived主要用于集群倒换,基本没有管理功能;
3)协议不同:Keepalived使用VRRP协议进行通信和选举,Heartbeat使用心跳进行通信和选举;Heartbeat除了走网络外,还可以通过串口通信,貌似更可靠;
4)使用方式基本类似:如果要基于两者设计高可用方案,最终都要根据业务需要写自定义的脚本,Keepalived的脚本没有任何约束,随便怎么写都可以;Heartbeat的脚本有约束,即要支持service start/stop/restart这种方式,而且Heartbeart提供了很多默认脚本,简单的绑定ip,启动apache等操作都已经有了。