KeepAlived的介绍

KeepAlived介绍

keepalived

keepalived是一个类似于layer3, 4 & 7交换机制的软件,也就是我们平时说的第3层、第4层和第7层交换。
    Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机或工作出现故障,Keepalived将检测到,会将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
    Keepalived是一个基于VRRP协议来实现的WEB 服务高可用方案,可以利用其来避免单点故障。
        一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
    keepAlived和LVS完全不是同一个概念,它们是独立互不影响的完成自己的工作。
        keepAlived是工作在LVS之上的,所谓的工作在之上,是keepAlived自身的模块通过配置文件调用ipvsadm命令对LVS进行配置,实现负载均衡。
        LVS通过负载均衡实现对服务器的高扩展性。
        keepAlived通过自身的子进程对LVS进行健康检查,实现LVS的高可用性(即防止LVS崩溃,发送主从服务器的健康状态和通知切换主从LVS)。
    
    Layer3,4&7工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:
        Layer3,网络层:
            Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。
            Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。
        Layer4,传输层:
            Layer4主要以TCP端口的状态来决定服务器工作正常与否。
            如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
        Layer7,应用层:
            Layer7就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。
            Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。

相关缩略词

VRRP    virtual router redundancy protocol  虚拟路由器冗余协议
    NQA network quality analyzer    网络质量分析
    BFD bidirectional forwarding detection  双向转发检测
    IRDP    icmp router discovery protocol  icmp 路由发现协议
    VRID    virtual router id   虚拟路由器号
    AVF active virtual forwarder    活动虚拟路由转发器
    LVF listening virtual forwarder 监听虚拟路由转发器

术语

虚拟路由器:
        Virtual Router,由一个Master路由器和多个Backup路由器组成,主机将虚拟路由器当作默认网关。
    虚拟路由器标识:
        VRID(0-255),唯一标识虚拟路由器,有相同的VRID的一组路由器构成一个虚拟路由器。
    master路由器:
        主设备,虚拟路由器中承担报文转发任务的路由器
    backup路由器:
        备用设备,master路由器出现故障时,能够代替master路由器工作的路由器
    VIP :
        Virtual IP,虚拟路由器的ip地址,一个虚拟路由器可以有一个或多个ip地址
    VMAC :
        Virutal MAC (00-00-5e-00-01-VRID),一个虚拟路由器拥有一个虚拟MAC地址,虚拟MAC地址的格式为00-00-5E-00-01-{VRID}。
        通常情况,虚拟路由器回应ARP请求使用的是虚拟MAC地址,只有虚拟路由器做特殊配置的时候,才回应接口的真实MAC地址。
    priority :
        优先级,VRRP根据优先级来确定虚拟路由器中每台路由器的地址。
    通告:
        心跳,优先级等;周期性
    工作方式:
        抢占式,非抢占式
    安全工作,认证:
        无认证
        简单字符认证,预共享密钥
        MD5
    工作模式:
        主/备:单虚拟路径器
        主/主:主/备(虚拟路径器1),备/主(虚拟路径器2)

keepalived的主要作用

主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。
    vrrp 协议完成地址流动
    为vip 地址所在的节点生成ipvs 规则(在配置文件中预先定义)
    为ipvs 集群的各RS 做健康状态检测
    基于脚本调用接口通过执行脚本完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务
    高可用web架构是LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可选可不选)

keepAlived有三个进程

VRRP协议子进程(VRRP child),healthcheck子进程(Healthchecking child),WatchDog父进程。
    每个子进程都有其独立的多连接I/O调度方式,这种设计一方面有利于优化VRRP调度的稳定性,同时也有利于避免进程自身可能存在的因素导致调度不稳定甚至失灵。
    1》父进程是全局进程,专门负责forked子进程并且监控子进程的状态,也就是管理两个子进程。
        父进程的监控框架被命名为WatchDog,其工作原理是,每个子进程open一个UNIX-doman socket套接字,然后父进程会连接这些套接字,并以5s为周期发送hello信息给子进程来检查进程是否存活。
        如果不能发送hello了,其会重启子进程。
        WatchDog有两个好处,一个是所有的hello包是通过I/O多链路的方式调度给子进程,这种方式可以及时发现子进程的调度体系结构是否死循环,另一个是使用sysV的信息检测子进程的调度体系。
    2》VRRP协议子进程负责VRRP框架,负责实现VRRP协议及主从之间的通信。
    3》healthcheck子进程辅助检查LVS和HTTP的健康状态。

keepAlived组件

KeepAlived的介绍
参考文档:
            http://www.keepalived.org/documentation.html
        核心组件:
            vrrp stack
            ipvs wrapper
            checkers
        控制组件:配置文件分析器
        IO 复用器
        内存管理组件
        Control Plane :
            Keepalived配置通过文件keepalived.conf完成。
            编译器设计用于解析。
            解析器使用关键字树层次结构将每个配置关键字映射到具体的处理程序。
            中央多级递归函数读取配置文件并遍历关键字树。
            在解析期间,配置文件被转换为内部存储器表示。
        Scheduler - I/O Multiplexer :
            所有事件都安排在同一进程中。
            Keepalived是一个单一的过程。
            Keepalived是一个网络路由软件,它对I / O非常封闭。
            这里使用的设计是一个中央选择(...),负责调度所有的内部任务。
            POSIX线程库不被使用。
            该框架为网络目的提供了自己的线程抽象优化。
        Memory Management :
            这个框架提供了一些通用的内存管理功能,如分配,重新分配,发布等。
            这个框架可以在两种模式下使用:normal_mode&debug_mode。
            当使用debug_mode时,它提供了一种强有力的方法来消除和跟踪内存泄漏。
            这个低级别环境通过跟踪分配内存并发布来提供缓冲区欠运行保护。
            所有使用的缓冲区都是长度固定的,以防止最终的缓冲区溢出。
        Core components :
            此框架定义了所有代码中使用的一些常用和全局库。
            这些库是:html解析,链接列表,定时器,向量,字符串形成,缓冲区转储,网络工具,守护进程管理,pid处理,低级TCP层4。
            这里的目标是将代码分解为最大限度地将代码重复,以增加模块化。
        WatchDog:
            此框架提供子进程监视(VRRP和Healthchecking)。
            每个子进程接受连接到自己的看门狗unix域套接字。
            父进程向该子进程unix域套接字发送“hello”消息。
            Hello消息使用父节点上的I / O多路复用器发送,并使用I / O多路复用器进行接收/处理。
            如果父进程检测到断开的管道,如果子进程仍然存在并重新启动,则使用sysV信号进行测试。
        Checkers :
            这是Keepalived的主要功能之一。
            Checkers负责realserver健康检查。
            如果realserver存在,则进行检查测试,此测试以二进制决定结束:从LVS拓扑中删除或添加realserver。
            内部检查器设计是实时网络软件,它采用完全多线程的FSM设计(有限状态机)。
            此检查器堆栈提供LVS拓扑操作,以按层4到层5/7测试结果。
            它在一个由父进程监视的独立进程中运行。
        VRRP Stack :
            其他最重要的Keepalived功能。
            VRRP(虚拟路由器冗余协议:RFC2338)专注于导演接管,为路由器备份提供低级设计。
            它实现了完整的IETF RFC2338标准,具有LVS和防火墙设计的一些规定和扩展。
            它实现了vrrp_sync_group扩展,保证协议接管后的持久路由路径。
            它使用MD5-96位密码提供实现IPSEC-AH,用于保护协议广告交换。
            有关VRRP的更多信息,请阅读RFC。
            重要的事情:VRRP代码可以在没有LVS支持的情况下使用,它被设计为独立使用。
            它运行在由父进程监视的独立进程中。
        System call :
            该框架提供了启动额外系统脚本的功能。
            它主要用于MISC检查器。
            在VRRP框架中,它提供了在协议状态转换期间启动额外脚本的功能。
            系统调用完成到一个分叉进程,不能全局调度定时器。
        Netlink Reflector :
            与IPVS包装器相同。
            Keepalived工作与自己的网络接口表示。
            IP地址和接口标志通过内核Netlink通道进行设置和监控。
            Netlink消息传递子系统用于设置VRRP VIP。
            另一方面,Netlink内核消息广播功能用于反映我们的用户空间Keepalived内部数据表示与接口相关的任何事件。
            因此,任何其他用户空间(其他程序)netlink操作通过Netlink内核广播(RTMGRP_LINK和RTMGRP_IPV4_IFADDR)反映到我们的Keepalived数据表示。
        SMTP:
            SMTP协议用于管理通知。
            它实现了IETF RFC821 使用多线程FSM设计。
            发送管理通知用于healthcheckers活动和VRRP协议状态转换。
            SMTP是常用的,可以与任何其他通知子系统(如GSM-SMS,寻呼机,...)进行接口
        IPVS wrapper :
            此框架用于向内核IPVS代码发送规则。
            它提供了Keepalived内部数据表示和IPVS rule_user表示之间的转换。
            它使用IPVS libipvs来保持与IPVS代码的通用集成。
        IPVS:Wensong
            从LinuxVirtualServer.org OpenSource Project 提供的Linux内核代码。
        NETLINK:
            由Alexey Kuznetov提供的Linux内核代码,其非常好的高级路由框架和子系统功能。

相关推荐