1. keepalived需要了解的知识
1.1 业务场景:
如果我们有个网站,最开始只有一台服务器对用户提供服务,业务架构图如下:
当业务量增大时,这台服务器支撑不了那么大的流量,随时会出现宕机的风险,于是优化为分布式架构,并使用了nginx做负载均衡:
有了分布式架构+负载均衡,你的业务可用性越来越强,能承受住很高的流量,但是题出现了:所有流量都打在nginx代理上,你的nginx容易出现性能瓶颈,突然有一天,你的nginx撑不了那么大的流量,出现了宕机故障,那么用户发起的所有请求都到不了你的后端web服务器上,于是又优化为nginx 做成分布式+ keepalived 的方式。
如果nginx master出现宕机,keepalived则会将服务切到nginx slave上,保证业务不受影响,这样就可以避免nginx单机故障,以此来实现高可用。
1.2 Keepalived的理解
Keepalived是linux下一个轻量级的高可用解决方案,可以实现服务或者网络的高可用。
Keepalived主要是通过虚拟路由冗余来实现高可用,功能没有HeartBeat那么强大,但Keepalived的部署和使用都非常简单,所有的配置只需要一个主配置文件即可完成。
Keepalived起初是为了LVS设计的,专门用来监控集群系统中各个服务节点的状态,如果某个服务器节点出现了故障,Keepalived将检测到后自动将节点从集群系统中剔除,而在故障节点恢复正常后,Keepalived又可以自动将此节点重新加入集群中,这些工作自动完成,不需要人工干预,需要人工完成的只是修复出现故障的节点。
后来又加入了VRRP的功能,VRRP(VritrualRouterRedundancyProtocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied一方面具有服务器状态检测和故障隔离功能,另外一方面也有高可用集群功能。
健康检查和失败切换是keepalived的两大核心功能:
- 健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活
- 而失败切换主要是应用于配置了主备模式的服务器,利用VRRP协议维持主备服务器的心跳,当主服务器出现问题时,由备服务器承载对应的业务,从而在最大限度上减少损失,并提供服务的稳定性
1.3 vrrp协议
在现实的网络环境中,主机之间的通信都是通过配置静态路由(默认网关)来完成的,而主机之间的路由器一旦出现故障,就会通信失败。因此在这种通信模式下,路由器就会有单点的瓶颈问题,为了解决这个问题,我们引入了vrrp协议(虚拟路由冗余协议)
Vrrp协议是一种容错的主备模式的协议,保证当主机的下一条路由出现故障时,由另一个路由器来代替出故障的路由器进行工作,通过vrrp可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信。
Vrrp