Keepalived详解(一):Keepalived介绍【转】

一.Keepalived介绍:linux

        Keepalived是Linux下一个轻量级的高可用解决方案,它与HeartBeat、RoseHA实现的功能相似,均可以实现服务或者网络的高可用,可是又有差异,HeartBeat是一个专业的、功能
web

完善的高可用软件,它提供了HA软件所需的基本功能,好比心跳检测和资源接管,监测集群中的系统服务,在集群节点间转移共享IP地址的全部者等,HeartBeat功能强大,可是部署和使用相对比较麻烦;与HeartBeat相比,Keepalived主要是经过虚拟路由冗余来实现高可用功能,虽然它没有HearBeat功能强大,但Keepalived部署和使用很是简单,全部配置只需一个配置文件便可完成。算法

    1.Keepalived是什么:服务器

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

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

     2.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出现故障,接着多台BACKUP就会进行选举,优先级最高的BACKUP将成为新的MASTER,这种选举并进行角色切换的过程很是快,于是保证了服务的持续能够性。

    3.Keepalived工做原理:

            Keepalived经过VRRP实现高可用功能的工做原理,而Keepalived做为一个高性能集群软件,它还能实现对集群中服务器运行状态的监控及故障隔离。Keepalived工做在TCP/IP参考模型的第3、第四和第五层,也就是网络层、传输层、应用层。根据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将把对应的服务从服务器中移除。

    4.Keepalived的体系结构:

            Keepalived是一个高度模块化的软件,结构简单,但扩展性很强。

Keepalived体系结构拓扑图

                  Keepalived体系结构图.png

             从图中能够看出,Keepalived的体系结构从总体上分为两层,分别是用户空间层(User Space)和内核空间层(Kernel Space)。

             内核空间层处于最底层,它包括IPVS和NETLINK两个模块。IPVS模块是Keepalived引入的一个第三方模块,经过IPVS能够实现基于IP的负载均衡集群。IPVS默认包含在LVS集群软件中。而对于LVS集群软件,相信作运维的读者并不陌生:在LVS集群中,IPVS安装在一台叫作Director Server的服务器上,同时在Director Server上虚拟出一个IP地址对外提供服务,而用户必须经过这个虚拟IP地址才能访问服务。这个虚拟IP通常称为LVS的VIP,即Virtual IP。访问的请求首先通过VIP到达Director Server,而后有Director Server从服务器集群节点中选取一个服务节点响应用户的请求。

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

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

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

            用户空间层位于内核空间层之上,Keepalived的全部具体功能都在这里实现,下面介绍几个重要部分所实现的功能。

            在用户空间层,Keepalived又分为4个部分,分别是Scheduler I/O Multiplexer、Memory Management、Control Plance和Core components。其中,Scheduler I/O Multiplexer是一个I/O复用分发调度器,他负责安排Keepalived全部内部的任务请求。Memory Management是一个内存管理机制,这个框架提供了访问内存的一些通用方法。Control Plane 是Keepalived的控制面板,能够实现对配置文件进行编译和解析,Keepalived的配置文件解析比较特殊,它并非一次解析全部模块的配置。而是只有在用到某模块时才解析相应的配置。最后详细说一下Core components,这部分是Keepalived的核心组件,包含了一系列功能模块,主要有WatchDog、Checkers、VRRP Stack、IPVS wrapper 和Netlink Reflector,下面介绍每一个模块所实现的功能以下:

                    (1)WatchDog

                                WatchDog是计算机可靠性领域中一个极为简单又很是有效的检测工具,它的工做原理是针对被监视的目标设置一个计数器和一个阈值,WatchDog会本身增长此计数值,而后等待被监视的目标周期性地重置该计数值。一旦被监控目标发生错误,就没法重置此计数值,WatchDog就会检测到,因而采起对应的恢复措施,例如重启或关闭。

                                在linux中很早就引入了WatchDog功能,而Keepalived正是经过WatchDog的运行机制来监控Checkers和VRRP进程的。

                    (2) Checkers

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

                    (3) VRRP Stack

                                这是Keepalived后来引入的VRRP功能,能够实现HA集群中失败切换(Failover)功能。Keepalived经过VRRP功能再结合LVS负载均衡软件便可部署一个高性能的负载均衡集群系统。

                    (4) IPVS wrapper

                                这是IPVS功能的一个实现。IPVS wrapper模块能够将设置好的IPVS规则发送到内核空间并提交给IPVS模块,最终实现IPVS模块的负载均衡功能。

                    (5) Netlink Reflector

                                用来实现高可用集群中Failover时虚拟IP(VIP)的设置和切换。Netlink Reflector的全部请求最后都发送到内核空间层的NETLINK模块来完成。

 

转自

Keepalived详解(一)-闫利朋的博客-51CTO博客http://blog.51cto.com/6284444/2115322

相关文章
相关标签/搜索