Keepalived的架构以及原理

Keepalived的架构以及原理

部分参考自散尽浮华博客:https://www.cnblogs.com/kevingrace/p/6138185.html 。同时感谢散尽浮华的运维技术分享,它的文章都很认真,准确。

前言

相信大家在学习运维的时候总会听到高可用,高并发这两个名词,在大流量的场景下为了解决高并发的问题,我们常常用负载均衡技术来解决,而负载均衡有分成四层(传输层tcp/udp)的lvs nginx haproxy以及七层(应用层http/https)的nginx 和haproxy 这两种。四层功能少,性能高。七层性能低,功能多。我们把负载均衡技术统称为LB,而面对高可用这个场景,需要解决的问题就是单点故障问题,此时就需要利用我们的高可用软件来接触单点故障问题。常见的软件有keepalived ,heartbeat,corosync 等这类技术统称为HA。

场景

下面我会通过两个典型场景来帮助大家理解ha的作用

  • web服务中后端动态服务器php和tomcat我们做了负载均衡组,最前端用nginx通过upstream模块配置负载均衡并分发请求,此时我们的nginx就是web服务的最外层了,但是如果nginx如果只有一台,一旦nginx发生故障请求都无法分发,网站也就无法访问了,此时就需要通过高可用软件来部署两个nginx节点,彼此通过心跳进行检擦,并自动故障转移来解决单点问题
  • 数据库服务中我们为了降低读压力也会配置一主多从 ,多主多从,有时为了实现读写分离我们还会引用中间件来作为客户端连接的最外层。和web服务中的nginx一样,此时中间件是请求的唯一入口,如果单点故障,那么数据库服务就无法访问了,所以为了高可用,我们也会通过高可用软件来解决单点问题。

备注:以上的例子我举的都是前端高可用。那什么叫前端高可用?下面有详细解释

常见高可用软件

Heartbeat、Corosync是属于同一类型,是servcice级别的高可用。而Keepalived与二者不同。它的原理是基于vrrp协议,而vrrp协议全称是虚拟路由冗余技术,只是模拟路由的高可用,Heartbeat和Corosync是基于主机或网络服务的高可用方式;
所以一般Keepalived是实现前端高可用,常用的前端高可用的组合:

  • LVS+Keepalived
  • Nginx+Keepalived
  • HAproxy+Keepalived

而Heartbeat或Corosync是实现服务的高可用,常见的服务高可用组合有:

  • Heartbeat v3(Corosync)+Pacemaker+NFS+Httpd (实现Web服务器的高可用)
  • Heartbeat v3(Corosync)+Pacemaker+NFS+MySQL( 实现MySQL服务器的高可用)

总结一下:

  • Keepalived中实现轻量级的高可用,一般用于前端高可用且不需要共享存储,一般常用于两个节点的高可用
  • Heartbeat(或Corosync)一般用于服务的高可用,且需要共享存储,一般用于多节点的高可用

heartbaet与corosync如何选择?

一般用corosync,因为corosync的运行机制更优于heartbeat,就连从heartbeat分离出来的pacemaker都说在以后的开发当中更倾向于corosync,所以现在corosync+pacemaker是最佳组合。而本文主要介绍keepalived相关知识。

双机高可用架构两种模式

1.双机主从模式:

前端使用两台服务器,一台主服务器和一台热备服务器,正常情况下,主服务器绑定一个公网虚拟IP,提供负载均衡服务,热备服务器始终处于空闲状态;当主服务器发生故障时,热备服务器接管主服务器的公网虚拟IP,提供负载均衡服务;但是热备服务器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠

2.双机主主模式

前端使用两台负载均衡服务器互为主备,且都处于活动状态,同时各自绑定一个公网虚拟IP,总共两个vip。提供负载均衡服务;当其中一台发生故障时,另一台接管发生故障服务器的公网虚拟IP(这时由非故障机器一台负担所有的请求)。这种方案,经济实惠,非常适合于当前架构环境。

备注:这里有人会担心,前端负载均衡器由两个变成一个会不会压力变大?其实没问题的,请求的主要压力在后端,nginx只是作分发请求。

keepalived介绍

keepalived是一个基于VRRP协议来实现的高可用服务方案,可以避免单点ip故障。但是它一般不会单独出现而是与其他负载均衡技术一起使用比如nginx lvs  haproxy .最初设计它的初衷是就是为了配合lvs 实现高可用,并且keepalived原生内置了配置lvs的realserver字段。

VRRP协议

VRRP 全称(virtual router redundancy protocol)即虚拟路由冗余协议,它会把N台提供相同功能的路由器组成一个路由器组,组里面有一个masterh呃多个backup。单在外界看来就像一台一样。构成一个虚拟路由器,并且拥有一个虚拟ip即vip。占有这个vip的即是当前的master,他会定时发送给组内其他backup心跳信息,当backup机器检测不到其心跳消息则会认为master挂了,此时backup机器会根据vrrp协议选举一个backup来当master.保证路由器的高可用。

keepalived架构解析

从图中看到keepalived是基于模块化工作的。整体架构被虚线分为两层:内核空间和用户空间,每个空间都内置了各自的功能模块下面我会分层去介绍keepalived架构。

  • 内核空间

keepalived内核空间主要包括两个模块IPVS和NETLINK,IPVS模块是引入的一个第三方模块,前面我们提到过keepalived设计的初衷是为了配合lvs的。通过IPVS模块可以让lvs被keepalived管理,在keepalived中就可以定义realserver组和virtual  IP 。当访问vip时 结合负载均衡算法将请求转发到realserver上。

NETlink模块主要实现一些高级路由框架和网络功能。完成用户层Netlink reflector模块法来的各种网络请求。

  • 用户空间

用户空间在内核空间之上的,keepalived大部分功能都在用户空间层实现的

  • Watch Dog  :用来监控checkers和VRRP进程。他是一个极为简单有效的检测工具。它的工作原理是针对被监控的目标设置一个计数器或者阈值。watch dog会自己增加此计数值。然后等待被监视的目标周期性重置该值。一旦监控目标发生错误,那么就无法重置该计数值,那么就会达到设定的阈值让watchdog检测到。于是采取对应的恢复措施。例如重启或者关闭
  • Checkers:keepalived最基础的功能也是最主要的功能,可以实现会服务器状态的检测和故障隔离
  • VRRP Stack:keepalived后来引用的VRRP功能,可以实现ha集群中的Failover功能。(vip的漂移)
  • IPVS wrapper:IPVS功能的一个实现,ipvs wrapper模块可以定义ipvs规则,然后发送给内核空间的IPVS模块。这点和防火墙的工作原理比较类似。wrapper是用户空间的工具,负责接受用户的负载均衡规则。而真正实现负载均衡功能的是内核空间的ipvs模块。
  • Netlink Reflector:实现Failover 中vip的设置和切换。他会把所有请求交给内核空间的NETLINK模块来完成。

 

 

 

 

 

 

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Loading...