Keepalived详细介绍简介

1.一、Keepalived简介

   Keepalived是Linux下一个轻量级别的高可用解决方案。高可用(High Avalilability,HA),其实两种不一样的含义:广义来说,是指整个系统的高可用行,狭义的来说就是之主机的冗余和接管,html

   它与HeartBeat RoseHA 实现相同相似的功能,均可以实现服务或者网络的高可用,可是又有差异,HeartBeat是一个专业的、功能完善的高可用软件,它提供了HA 软件所需的基本功能,好比:心跳检测、资源接管,检测集群中的服务,在集群节点转移共享IP地址的全部者等等。HeartBeat功能强大,可是部署和使用相对比较麻烦,算法

与HeartBeat相比,Keepalived主要是经过虚拟路由冗余来实现高可用功能,虽然它没有HeartBeat功能强大,可是Keepalived部署和使用很是的简单,全部配置只须要一个配置文件便可以完成,服务器

1.二、Keepalived是什么?

Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第3、第四层、第五层交换机制检测每一个服务节点的状态,若是某个服务器节点出现异常,或者工做出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工做所有是自动完成的,不须要人工干涉,须要人工完成的只是修复出现故障的服务节点。网络

  后来Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy Protocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,经过VRRP能够实现网络不间断稳定运行,所以Keepalvied 一方面具备服务器状态检测和故障隔离功能,另一方面也有HA cluster功能,下面介绍一下VRRP协议实现的过程。app

1.三、VRRP协议与工做原理

在现实的网络环境中。主机之间的通讯都是经过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障,通讯就会失效,所以这种通讯模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP协议。负载均衡

熟悉网络的学员对VRRP协议应该不陌生,它是一种主备模式的协议,经过VRRP能够在网络发生故障时透明的进行设备切换而不影响主机之间的数据通讯,这其中涉及到两个概念:物理路由器和虚拟路由器。框架

  VRRP能够将两台或者多台物理路由器设备虚拟成一个虚拟路由,这个虚拟路由器经过虚拟IP(一个或者多个)对外提供服务,而在虚拟路由器内部十多个物理路由器协同工做,同一时间只有一台物理路由器对外提供服务,这台物理路由设备被成为:主路由器(Master角色),通常状况下Master是由选举算法产生,它拥有对外服务的虚拟IP,提供各类网络功能,如:ARP请求,ICMP 数据转发等,并且其它的物理路由器不拥有对外的虚拟IP,也不提供对外网络功能,仅仅接收MASTER的VRRP状态通告信息,这些路由器被统称为“BACKUP的角色”,当主路由器失败时,处于BACKUP角色的备份路由器将从新进行选举,产生一个新的主路由器进入MASTER角色,继续提供对外服务,整个切换对用户来讲是彻底透明的。工具

 

   每一个虚拟路由器都有一个惟一的标识号,称为VRID,一个VRID与一组IP地址构成一个虚拟路由器,在VRRP协议中,全部的报文都是经过IP多播方式发送的,而在一个虚拟路由器中,只有处于Master角色的路由器会一直发送VRRP数据包,处于BACKUP角色的路由器只会接受Master角色发送过来的报文信息,用来监控Master运行状态,一通常不会发生BACKUP抢占的状况,除非它的优先级更高,而当MASTER不可用时,BACKUP也就没法收到Master发过来的信息,因而就认定Master出现故障,接着多台BAKCUP就会进行选举,优先级最高的BACKUP将称为新的MASTER,这种选举角色切换很是之快,于是保证了服务的持续可用性。性能

 

1.四、Keepalvied的工做原理

   上面咱们介绍了Keepalived经过VRRP实现高可用性的工做原理,而Keepalived做为一个高性能集群软件,它还能实现对集群中服务器运行状态的监控以及故障隔离,下面咱们介绍一下Keepalived对服务器运行状态和故障隔离的工做原理。ui

     Keepalived工做在TCP/IP 参考模型的 三层、四层、五层,也就是分别为:网络层,

传输层和应用层,根据TCP、IP参数模型隔层所能实现的功能,Keepalived运行机制以下:

     在网络层:咱们知道运行这4个重要的协议,互联网络IP协议,互联网络可控制报文协议ICMP、地址转换协议ARP、反向地址转换协议RARP在网络层Keepalived在网络层采用最多见的工做方式是经过ICMP协议向服务器集群中的每个节点发送一个ICMP数据包(有点相似与Ping的功能),若是某个节点没有返回响应数据包,那么认为该节点发生了故障,Keepalived将报告这个节点失效,并从服务器集群中剔除故障节点

     在传输层:提供了两个主要的协议:传输控制协议TCP和用户数据协议UDP,传输控制协议TCP能够提供可靠的数据输出服务、IP地址和端口,表明TCP的一个链接端,要得到TCP服务,须要在发送机的一个端口和接收机的一个端口上创建链接,Keepalived在传输层里利用了TCP协议的端口链接和扫描技术来判断集群节点的端口是否正常,好比对于常见的WEB服务器80端口。或者SSH服务22端口,Keepalived一旦在传输层探测到这些端口号没有数据响应和数据返回,就认为这些端口发生异常,而后强制将这些端口所对应的节点从服务器集群中剔除掉。

 

在应用层:能够运行FTP,TELNET,SMTP,DNS等各类不一样类型的高层协议,Keepalived的运行方式也更加全面化和复杂化,用户能够经过自定义Keepalived工做方式,例如:能够经过编写程序或者脚原本运行Keepalived,而Keepalived将根据用户的设定参数检测各类程序或者服务是否容许正常,若是Keepalived的检测结果和用户设定的不一致时,Keepalived将把对应的服务器从服务器集群中剔除

 

 

1.五、Keepalived体系结构

                       Keepalived体系结构图

 

Keepalived起初是为LVS设计的,因为Keeplalived能够实现对集群节点的状态检测,而IPVS能够实现负载均衡功能,所以,Keepalived借助于第三方模块IPVS就能够很方便地搭建一套负载均衡系统,在这里有个误区,因为Keepalived能够和IPVS一块儿很好的工做,不少学员都觉得Keepalived就是一个负载均衡软件,这种理解是错误,

在Keepalived当中IPVS模块是可配置的,若是须要负载均衡功能,能够在编译Keepalived时开打负载均衡功能,也能够经过编译参数关闭。

   NetLINK模块主要用于实现一些高级路由框架和一些相关参数的网络功能,完成用户空间层Netlink Reflector模块发来的各类网络请求。

    这个图咱们能够看到用户空间层,是创建在内核空间层之上的,

(1)用户空间层,主要有4个部分:

       Scheduler I/O Multiplexer 是一个I/O复用分发调度器,它负载安排Keepalived全部内部的任务请求,

       Memory Mngt 是一个内存管理机制,这个框架提供了访问内存的一些通用方法       

       Control Plane  是keepalived的控制版面,能够实现对配置文件编译和解析

       Core componets  这部分主要保护呢了5个部分

             Watchdog:是计算机可靠领域中极为简单又很是有效的检测工具,Keepalived正是经过它监控Checkers和VRRP进程的。

             Checkers: 这是Keepalived最基础的功能,也是最主要的功能,能够实现对服务器运行状态检测和故障隔离。

             VRRP Stack: 这时keepalived后来引用VRRP功能,能够实现HA集群中失败切换功能。

             IPVS wrapper: 这个是IPVS功能的一个实现,IPVS warrper模块将能够设置好的IPVS规则发送的内核空间而且提供给IPVS模块,最终实现IPVS模块的负载功能。

             Netlink Reflector:用来实现高可用集群Failover时虚拟IP(VIP)的设置和切换 ,

Netlink Reflector的全部请求最后都发送到内核空间层的NETLINK 模块来完成。

更多请参考:http://blog.chinaunix.net/uid-26575352-id-3529109.html