轻量级高可用实现工具--keepalived详解

时间:2020-12-21 01:23:03

一 、keepalived简介


   

keepalived:它的诞生最初是为ipvs(一些服务,内核中的一些规则)提供高可用性的,最初最主要目的是能够自主调用ipvsadm来生成规则,并且能够自动实现将用户访问的地址转移到其他节点上进行实现的。keepalived:核心包含两个ckechers和VRRP协议。

   

   

ckeckers#检查服务检查reserved的健康状况的,基于脚本也可以服务本身的健康状况。这里是实现ipvs后端健康状况的检测的。VRRP# Virtual Router Redundancy Protocol 虚拟路由器冗余协议  -----keepalived依赖的最重要的核心技术

   


二、VRRP协议详解


   (一)VRRP技术优点

     

VRRP是一种容错协议,它保证当主机的下一跳路由器出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性, VRRP中每个节点之间都有优先级的一般为0-255 (0,255有特殊用法)数字越大优先级越高。1、简化网络管理。#在具有多播或广播能力的局域网(如以太网)中,借助VRRP 能在某台设备出现故障时仍然提供高可靠的缺省链路,有效避免单一链路发生故障后网络中断的问题,而无需修改动态路由协议、路由发现协议等配置信息,也无需修改主机的默认网关配置。                                                                                                                                                                                                                                                                                                                                                                                                                                                   2、适应性强。#VRRP 报文封装在IP 报文中,支持各种上层协议。                                                                                                                                                                                                                                                                                                                                                                                                                                                 3、网络开销小。#VRRP 只定义了一种报文――VRRP 通告报文,并且只有处于Master 状态的路由器可以发送VRRP 报文。


   (二)VRRP协议中的相关术语


     

1 虚拟路由器#由一个 Master 路由器和多个Backup 路由器组成。主机将虚拟路由器当作默认网关。 2 VRID#虚拟路由器的标识。有相同VRID 的一组路由器构成一个虚拟路由器。3 Master 路由器#虚拟路由器中承担报文转发任务的路由器。4 Backup 路由器#Master 路由器出现故障时,能够代替Master 路由器工作的路由器。5 虚拟 IP 地址#虚拟路由器的IP 地址。一个虚拟路由器可以拥有一个或多个IP 地址。6 IP 地址拥有者#接口IP 地址与虚拟IP 地址相同的路由器被称为IP 地址拥有者。7 虚拟 MAC 地址#一个虚拟路由器拥有一个虚拟MAC 地址。虚拟MAC 地址的格式为00-00-5E-00-01-{VRID}。通常情况下,虚拟路由器回应ARP 请求使用的是虚拟MAC 地址,只有虚拟路由器做特殊配置的时候,才回应接口的真实MAC 地址。8 优先级# VRRP 根据优先级来确定虚拟路由器中每台路由器的地位。9 非抢占方式#如果 Backup 路由器工作在非抢占方式下,则只要Master 路由器没有出现故障,Backup 路由器即使随后被配置了更高的优先级也不会成为Master 路由器。10 抢占方式#如果Backup 路由器工作在抢占方式下,当它收到VRRP 报文后,会将自己的优先级与通告报文中的优先级进行比较。如果自己的优先级比当前的Master 路由器的优先级高,就会主动抢占成为Master 路由器;否则,将保持Backup 状态。



   (三)VRRP的工作过程

       

1   Master 路由器的选举;2   Master 路由器状态的通告;3   同时,为了提高安全性,VRRP 还提供了认证功能;


   (四) VRRP主备备份

     

主备备份方式表示业务仅由Master路由器承担。当Master路由器出现故障时,才会由选举出来的Backup路由器接替它工作,如图


    轻量级高可用实现工具--keepalived详解

     

#初始情况下,Device A是Master路由器并承担转发任务,Device B和Device C是Backup路由器且都处于就绪监听状态。如果Device A发生故障,则虚拟路由器内处于Backup状态的Device B和Device C路由器将根据优先级选出一个新的Master路由器,这个新Master路由器继续为网络内的主机转发数据。


   

     (五)VRRP负载分担


   

在路由器的一个接口上可以创建多个虚拟路由器,使得该路由器可以在一个虚拟路由器中作为Master路由器,同时在其他的虚拟路由器中作为Backup路由器。负载分担方式是指多台路由器同时承担业务,因此负载分担方式需要两个或者两个以上的虚拟路由器,每个虚拟路由器都包括一个Master路由器和若干个Backup路由器,各虚拟路由器的Master路由器可以各不相同,


    轻量级高可用实现工具--keepalived详解



三、keepalived 原理详解


 

     
#keepalived也是模块化设计,不同模块负责不同的功能,下面是keepalived的组件   core  check   vrrp   libipfwc  libipvs-2.4  libipvs-2.6
           
core#是keepalived的核心,负责主进程的启动和维护,全局配置文件的加载解析check#负责healthchecker(健康检查),包括各种健康检查方式,以及对应的配置的解析包括LVS的配置解析vrrp #VRRPD子进程,VRRPD子进程就是来实现VRRP协议的libipfwc#iptables(ipchains)库,配置LVS会用到libipvs* #配置LVS会用到

   

            keepalived模块化结构

   轻量级高可用实现工具--keepalived详解

       

keepalived 启动后会启动三个进程 如下所示:                                                                                                                                                                                                                                                                                                                           PID     111  Keepalived    <--Parent process monitoring children  父进程     112  \_Keepalived  <--VRRP child   VRRP子进程     113  \_Keepalived <--Healthchecking child healthchecker子进程                                                                                                                                                                                                                                                                                                             

   

如上图所示:#两个子进程都被系统WatchDog看管,两个子进程各自复杂自己的事healthchecker子进程复杂检查各自服务器的健康程度,例如HTTP,LVS等等,如果healthchecker子进程检查到MASTER上服务不可用了,就会通知本机上的兄弟VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态。

 

 

   

四 、keepalived 配置文件介绍


   

keepalived 安装#yum -y install  keepalived   
keepalived 只有一个配置文件,该配置文件中有多个配置区域 /etc/keepalived/keepalived.conf#分别为:global_defs (全局配置区域)、vrrp_script (脚本区域)、vrrp_instance(实例区域)、virtual_server(虚拟服务器区域)

 

   各个区域配置详解

 

   

1 global_defs区域 :主要配置故障发生时的通知对象以及机器标识 global_defs { notification_email {     acassen@firewall.loc     failover@firewall.loc     sysadmin@firewall.loc   }   notification_email_from Alexandre.Cassen@firewall.loc   smtp_server 192.168.200.1   smtp_connect_timeout 30   router_id LVS_DEVEL }          

         

上述参数解析# notifacation_email   故障发生时给谁发邮件通知# notifacation_email_from 通知邮件从哪个地址发出# smpt_server             通知邮件的smtp地址# smtp_cnnect_timeout     连接smtp服务器的超时时间# router_id         标识本节点的字条串,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到



   

2  vrrp_script 脚本区域                                                                                                                                                               vrrp_script chk_haproxy {    script "killall -0 haproxy"    interval 1    weight 2  }

   

上述参数解析#vrrp_script   定义vrrp_script 区域名称#script        所要执行的脚本#interval      脚本执行的间隔时间#weight        脚本执行结果导致的优先级变更

   

   

3 vrrp_instance 实例区域:用来定义对外提供服务的VIP区域及相关属性  vrrp_instance VI_1 {    interface eth0    state MASTER     priority 101    virtual_router_id 51    garp_master_delay 1                                                                                                                                                    authentication {        auth_type PASS        auth_pass 1111    }    track_interface {       eth0      }    virtual_ipaddress {        172.16.100.1/16 dev eth0 label eth0:0    }    track_script {        chk_haproxy                                                                                                                                                         }    notify_master "/etc/keepalived/notify.sh master"    notify_backup "/etc/keepalived/notify.sh backup"    notify_fault "/etc/keepalived/notify.sh fault"}


    :

上述参数解析#vrrp_instance : 定义实例名称#state         :可以是MASTER或BACKUP,不过当其他节点keepalived启动时,会依据prioroty进行比较来选举MASTER#interface     : 节点固有IP的网卡,用来发送VRRP包#virtual_router_id  : 取值在0-255之间,用来区分多个instence之间的VRRP组播#priority        : 用来选举master#advert_int      : master向外通告VRRP信息的间隔 ,默认为1s#garp_master_delay  :转换为master时,对延迟设定的定时器#authentication     :设置认证信息#auth_type PASS     :认证方式,可以是PASS或AH两种认证方式#auth_pass          :设置认证密码#track_interface    :追踪的端口#virtual_ipaddress  :设置浮动ip---VIP#track_script       :对vrrp_script脚本区域中定义的脚本进行追踪#chk_haproxy        :对这个区域进行追踪                                                                                                                                                    #notify_master /path/to/to_master.sh :切换到MASTER状态要发的通知#notify_backup/path/to/to_backup.sh  :切换到BACKUP状态要发的通知#notify_fault "/path/fault.sh VG_1"  :故障时要执行的通知                                                                                                                                                注:以上三个参数指定的脚本需要自己定义



   

4 virtual_server 区域:定义与lvs相关的集群服务和集群服务中的realserver  virtual_server 172.16.7.1 80 {    delay_loop 6    lb_algo wlc    lb_kind DR    persistence_timeout 0       protocol TCP    sorry_server 127.0.0.1 80    real_server 172.16.7.200 80 {          weight 3        TCP_CHECK {            connect_port 80            connect_timeout 3            nb_get_retry 3            delay_before_retry 3        }    }    real_server 172.16.7.201 80 {          weight 1        TCP_CHECK {            connect_port 80            connect_timeout 3            nb_get_retry 3            delay_before_retry 3        }    }}

 

   

上述参数解析virtual_server 172.16.7.1 80#对外通过ip地址172.16.7.1 提供80端口的服务delay_loop#延迟轮询时间(s)lb_algo #后端指定的调度算法lb_kind  #调度模式nat_mask #网络地址persistence_timeout #会话保持时间(s),用户在50s内被分配到同一个后端realserverprotocol  TCP#健康检查使用的TCP协议sorry_server#当所有机器都出现故障时使用的服务器real_server <IPADDR> <PORT> #后端真实节点主机的权重等设置,(主要),后端有几台这里就要设置几个weight#每一台realserver 的权重TCP_CHECK#健康状态检测方式connect_port#连接的端口connect_timeout#超时时长nb_get_retry #重试次数delay_before_retry#下次重试的时间延迟在realserver也可以自定义服务器状态发生变化后执行的脚本      notify_up <STRING> | <QUOTED-STRING>      检查服务器正常(up)后,要执行的脚本       notify_down <STRING> | <QUOTED-STRING>      检查服务器失败(down)后,要执行的脚本





   PS:水平有限,关于更多的参数详解及概念请参阅官网www.keepalived.org及 man keepalived.conf 获得。



本文出自 “西风瘦猪” 博客,请务必保留此出处http://jungege.blog.51cto.com/4102814/1406908