一、什么是keepalived
假设现在只有一台 web 服务器对用户提供服务,用户可以直接连接你的web服务器去实现各项需求,随着业务不断扩大,发现单机模式下网站支撑不了那么大的流量,随时会出现宕机的风险,于是使用了分布式架构,并使用nginx实现负载均衡功能。此时有了分布式架构+负载均衡,你的业务可用性越来越强,能承受住很高的流量,但是问题出现了——所有流量都打在 nginx代理上,你的nginx容易出现性能瓶颈,突然有一天,你的 nginx 撑不了那么大的流量,出现了宕机故障,那么用户发起的所有请求都到不了你的后端 web 服务器上。
那这时候我们就需要用nginx+keepalived的方式来解决问题,如果 nginx master 出现宕机,keepalived则会将服务切到 nginx slave上,保证业务不受影响,这样就可以避免 nginx 单机故障问题,以此来实现高可用。
Keepalived,中文意思即保活。可以理解为保证业务/服务/服务器存活
Keepalived是Linux下一个轻量级别的高可用解决方案,通过虚拟路由冗余协议来实现服务或者网络的高可用,起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,如果某个服务器节点出现故障,Keepalived将检测到后自动将节点从集群系统中剔除而在故障节点恢复正常后,Keepalived又可以自动将此节点重新加入集群中这些工作自动完成,不需要人工干预,需要人工完成的只是修复出现故障的节点
二、高可用集群
1.1集群类型
LB:Load Balance 负载均衡
LVS/HAProxy/nginx(http/upstream, stream/upstream)
HA:High Availability 高可用集群
数据库、Redis
SPoF: Single Point of Failure,解决单点故障
HPC:High Performance Computing 高性能集群
1.2系统可用性
SLA:Service-Level Agreement 服务等级协议(提供服务的企业与客户之间就服务的品质、水准、性能
等方面所达成的双方共同认可的协议或契约)
A = MTBF / (MTBF+MTTR)
1.3 系统故障
硬件故障:设计缺陷、wear out、非人为不可抗拒因素
软件故障:设计缺陷bug
1.4实现高可用
提升系统高可用性的解决方案:降低MTTR-Mean Time To Repair(平均故障时间)
启用keepalived日志功能
在/etc/sysconfig/keepalived 内直接设置日志级别

keepalived企业应用示例
实现master/slave的keepalived单主架构
MASTER配置
BACKUP配置
抓包观察
抢占延迟模式 preempt_delay
抢占延迟模式,即优先级高的主机恢复后,不会立即抢回VIP,而是延迟一段时间(默认30s)
注意:!!!需要各keepalived服务器state为BACKUP,并且不要启用 vrrp_strict
ka1主机配置:
ka2主机配置:
vip单播配置
默认情况下,keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量
MASTER主机配置
slave主机配置
测试:
实现master/master的keepalived双主架构
master/slave的单主架构,同一时间只有一个Keepalived对外提供服务,此主机繁忙,而另一台主机却很空闲,利用率低下,可以使用master/master的双主架构,解决此问题。
master/master 的双主架构:
即将两个或以上VIP分别运行在不同的keepalived服务器,以实现服务器并行提供web访问的目的,提高服务器资源利用率
KA1主机配置
KA2主机配置