转载:http://23live.cn/server/lvs-keepalived-haproxy-heartbeat/
最近一直在看一些高可用性的负载均衡方案,当然那些f5之类的硬件设备是玩不起也接触不到了。只能看这些for free的开源方案。
目前使用比较多的就是标题中提到的这两者,其实lvs和haproxy都是实现的负载均衡的作用,keepalived和heartbeat都是提高高可用性的,避免单点故障。那么他们为什么这么搭配,而又有什么区别呢?
经过一番google,大体明白了两者的区别:
lvs的是通过vrrp协议进行数据包转发的,提供的是4层的负载均衡。特点是效率高,只要你机器网卡抗的住就不是问题。
haproxy可以提供4层或7层的数据转发服务,能做到7层的好处是可以根据服务所处的状态等进行负载。
以上两者只是实现了负载均衡,但是他们本身是明显的单点故障,因此需要使用双机软件做热备,来保证高可用性。keepalived可以通过检测vrrp数据包来切换,因此更适合与lvs搭配。而heartbeat更适于和haproxy搭配。这样就出现了这两个应用比较多也比较经典的负载均衡的高可用性方案了。
原来一直想学习下这两个方案,学会这4个软件的配置,可又觉得永远用不到吧?或者用到的时候说不定又出现了新的技术了。就是自己能用到了,反向代理一类的软件足够用了,squid偶是实在没有心情学习了。对nginx的感觉还不错,性能好是大家公认的,即可以做反向代理实现负载均衡,又通过geo模块实现流量分离做全局(不同地域)的负载均衡,加上配置简单,绝对是个人的首选,可以考虑搭配heartbeat实现高可用。
Keepalived介绍
Keepalived是一个基于VRRP协议来实现的WEB 服务高可用方案,可以利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服 务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
1 | +-------------VIP(192.168.0.7)------------------+ |
2 | | | | |
3 | | | | |
4 | server(MASTER) <----keepalived----> server(BACKUP) |
5 | (192.168.0.1) (192.168.0.2) |
keepalived是VRRP的完美实现,因此在介绍keepalived之前,先介绍一下VRRP的原理。
VRRP协议简介
在现实的网络环境中,两台需要通信的主机大多数情况下并没有直接的物理连接。对于这样的情况,它们之间路由怎样选择?主机如何选定到达目的主机的下一跳路由,这个问题通常的解决方法有二种:
· 在主机上使用动态路由协议(RIP、OSPF等)
· 在主机上配置静态路由
很明显,在主机上配置路态路由是非常不切实际的,因为管理、维护成本以及是否支持等诸多问题。配置静态路由就变得十分流行,但路由器(或者说默认网关default gateway)却经常成为单点。
VRRP的目的就是为了解决静态路由单点故障问题。
VRRP通过一竞选(election)协议来动态的将路由任务交给LAN中虚拟路由器中的某台VRRP路由器。
工作机制
在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP广告包(VRRPAdvertisement message),BACKUP不会抢占MASTER,除非它的优先级(priority)更高。当MASTER不可用时(BACKUP收不到广告包), 多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性。
由于安全性考虑,VRRP包使用了加密协议进行加密。