1、keepalived

keepalived高可用之间是通过vrrp通信的;vrrp通过竞选机制确定主备,主的优先级高于备,因此在工作时主优先获得资源,备节点处于等待状态,当备节点无法接收到主节点的心跳信息时,备节点就回接管主节点的所有资源,顶替主节点对外服务。
vrrp:虚拟路由冗余协议,主要是解决静态路由的单点故障问题;
vrrp是通过一种竞选协议机制将路由交给某台vrrp路由器的;
vrrp是用IP多播的方式实现高可用对之间的通信
主节点发包,备节点接包,当备节点接收不到主节点发送的数据包时,就启动接管程序接管主节点的资源。备节点有多个,也是通过竞选机制接管主节点的资源
vrrp使用了加密协议加密数,但是keepalived官方依然使用的是明文方式进行认证配置的;

2、heartbeat

1)、Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件; 通过修改heartbeat的配置文件,可以指定一台heartbeat服务器作为主服务器,另一台自动成为热备服务器。在热备服务器上面配置heartbeat守护程序来监听来自主服务器的心跳信息。如果在规定时间内,无法监听到心跳信息,那么就启动故障转移,取得主服务器上的相关资源的所有权,接替主服务器继续不间断的提供服务,从而达到资源以及服务高可用的目的。
heartbeat还支持主主模式,及两台服务器互为主备。一般故障切换时间在5~20s之间。
另外:和keepalived的服务一样,heartbeat高可用是服务器级别的,不是服务级别的。

服务器宕机
heartbeat软件故障
心跳连接线故障)
服务故障不会导致切换,可以通过服务宕机把heartbeat服务停掉。

2)、 心跳连接:
至少需要两台主机才可以实现高可用服务。
两台heartbeat服务之间通信:
穿行电缆,所谓的串口(首先,缺点是距离不能太远)
一根以太网电缆两网卡直连(常用方式)
以太网电缆,通过交换机等网络设备连接。(交换机可能出现问题等)

3、对比

1)Keepalived使用更简单:从安装、配置、使用、维护等角度上对比,Keepalived都比Heartbeat要简单得多,尤其是Heartbeat 2.1.4后拆分成3个子项目,安装、配置、使用都比较复杂,尤其是出问题的时候,都不知道具体是哪个子系统出问题了;而Keepalived只有1个安装文件、1个配置文件,配置文件也简单很多;
2)Heartbeat功能更强大:Heartbeat虽然复杂,但功能更强大,配套工具更全,适合做大型集群管理,而Keepalived主要用于集群倒换,基本没有管理功能;
3)协议不同:Keepalived使用VRRP协议进行通信和选举,Heartbeat使用心跳进行通信和选举;Heartbeat除了走网络外,还可以通过串口通信,貌似更可靠;
4)使用方式基本类似:如果要基于两者设计高可用方案,最终都要根据业务需要写自定义的脚本,Keepalived的脚本没有任何约束,随便怎么写都可以;Heartbeat的脚本有约束,即要支持service start/stop/restart这种方式,而且Heartbeart提供了很多默认脚本,简单的绑定ip,启动apache等操作都已经有了;

4、总结:

web的高可用采用keepalived,如果数据库之间做高可用,也可以使用keepalived,但是推荐采用heartbeat;