zoukankan      html  css  js  c++  java
  • keepalived初探

    keepalived起初是为LVS设计的,专门用来监控LVS集群系统中各个real server的健康状况的,后来又在其中实现了VRRP协议,VRRP即virtual router redundancy protocol(虚拟路由器冗余协议)的缩写,VRRP的目的是为了解决静态路由出现的单点故障问题,它能够保证网络的不间断、稳定的运行。所以,keepalived一方面具有对服务器进行健康检测的功能,另一方面也具有HA cluster的功能。

    VRRP通过一种竞选协议来动态的将路由任务交给LAN中VRRP虚拟路由器中的某台VRRP路由器

    VRRP路由器:即运行VRRP协议的服务器,作为VRRP路由器来使用,是物理意义上的服务器。

    VRRP虚拟路由器:一般由两台物理的VRRP路由器组成,它们之间具有高可用(fail over)的功能,一起组成一台虚拟意义上的VRRP路由器对外提供服务。

    所以一般是两台服务器上运行VRRP协议,是两台VRRP路由器,这两台VRRP路由器组成一个VRRP虚拟路由器。两台VRRP路由器一台为master, 一台为backup,如果master挂掉,backup会变成新的master,接管服务,提供路由功能。

    VRRP虚拟路由器,有一个虚拟IP——VIP,客户端就是利用这个IP地址做为静态路由来访问服务的,所以VRRP协议解决了VIP的高可用,单点故障功能。

    VRRP虚拟路由器,不管谁是master,对外都是相同的MAC和IP(VIP),客户端并不需要因为master的改变而修改自己的路由配置,对他们来说,这种主从的切换是透明的。

    VRID:虚拟路由器有一个VRID(virtual_router_id,取值范围0~255)的属性来标志自己,所有组成该虚拟路由器的VRRP路由器的配置文件中的VRID都必须相同。因为虚拟路由的MAC地址中包含了VRID,因为MAC地址和IP地址不能变,所以为了保证在切换master时,MAC地址不变,所有的VRRP路由器的VRID必须相同。
    VRRP解决静态路由单点故障的原理

    在一个VRRP虚拟路由器中,只有作为master的VRRP路由器会一直发送VRRP广告包,backup不会抢占master,除非他的优先级更高。当master不可用时(backup收不到广告包),多台backup中优先级最高的这台会进行抢占,成为新的master。这种抢占是非常快速的(<1s),来保证路由服务的连续性。而keepalived实现了VRRP协议。

    KeepAlived的安装:

    yum install keepalived;

    查看配置文件:

    [root@localhost ~]# rpm -ql keepalived
    /etc/keepalived
    /etc/keepalived/keepalived.conf
    /etc/rc.d/init.d/keepalived
    /etc/sysconfig/keepalived
    /usr/bin/genhash
    /usr/sbin/keepalived
    /usr/share/doc/keepalived-1.2.13
    ... ...
    

    KeepAlived˜的配置

    上面所示keepalived的配置文件位于:/etc/keepalived/keepalived.conf,一般而言keepalived的配置文件分为三部分:

    1> 全局配置:主要是设置在发生master切换时,对管理员的报警信息,包括一些email的配置信息,一个标志是哪台VRRP路由器发生故障的——router_id;

    global_defs
    {
       notification_email
       {
          admin@example.com
       }
       notification_email_from admin@example.com
       smtp_server 127.0.0.1
       stmp_connect_timeout 30
       router_id lvs_125
    }
    

     notification_email:邮件的接受者;

     notification_email_rom: 邮件发送者;

     smtp_server: 邮件服务器地址;

     smtp_connect_timeout: 邮件发送超时时间;

     router_id: VRRP路由器标志id,标志是哪台VRRP路由器发生故障;

    2> VRRPD配置:是keepalived的核心,主要配置vrrp_instance,即配置VRRP实例,也即配置VRRP路由器:

    vrrp_instance vi_1 {
       state MASTER
       interface eth0
       virtual_router_id 61
       priority 100
       advert_int 1
       authentication {
          auth_type PASS
          auth_pass 308537
       }
       virtual_ipaddress {
          192.168.137.135
       }
    }
    

    state: 指定初始状态下,哪个VRRP路由器是master,取值有MASTER/BACKUP;

    interface: vi_1 实例绑定的网卡;

    virtual_router_id: 指定虚拟路由器的VRID值,范围0~255,master和backup的VRID值必须相同;

    priority: 该实例的优先级;

    advert_int: 检查间隔,默认1s;

    authentication: 加密验证报文,master和backup的配置必须相同;

    virtual_ipaddress: 指定VIP;

    3> LVS˜配置:改配置部分只有在使用keepalived来配置和管理LVS时才需要,如果仅仅使用keepalived来做HA,该部分的配置完全是不需要的。

    virtual_server 192.168.137.135 80 {
       delay_loop 3
       lb_algo wrr
       lb_kind DR
       nat_mask 255.255.255.0
       persistence_timeout 600
       protocol TCP
       real_server 192.168.137.200 80 {
          weight  2
          TCP_CHECK {
             connect_timeout 10
             nb_get_retry 3
             delay_before_retry 3
             connect_port 80
          }
       }
       real_server 192.168.137.201 80 {
          weight  1
          TCP_CHECK {
             connect_timeout 10
             nb_get_retry 3
             delay_before_retry 3
             connect_port 80
          }
       }
    }    
    

     主要配置LVS的DS服务器如何向RS进行分发,以及RS服务器的相关配置。

    virtual_server: 指定VIP地址和端口;

    delay_loop: 指定service polling的时间间隔;

    lb_algo: 即load balance algorith,负载均衡的算法;

    lb_kind: 即load balance kind,负载均衡的种类(DR/TUN/NAT);

    persistence_timeout: 会话保持时间,单位秒;

    real_server: 指定RS服务的ip和端口;

    TCP_CHECK: 指定Keepalived如何对RS进行健康检查;

    注意在backup VRRP路由器上,必须修改:state BACKUP,priotiry 90, router_id最好也修改下 lvs_126。

    keepalived健康检查方式

    keepalived能够工作在IP/TCP协议栈的IP层,TCP层,及应用层,所以对应的健康检查方式必然也有多种。

    TCP健康检查方式,SMTP健康检查方式,HTTP_GET|SSL_GET健康检查方式,MISC_CHECK等等。

    上面LVS中的RS的健康检查就是使用了TCP_CHECK。使用keepalived的MISC_CHECK的方式,我们可以自己写脚本来进行健康检查:

    real_server 192.168.137.202 80358 {
       weight 1
       MISC_CHECK {
          misc_path "/usr/local/bin/script.sh"
       }
    }
    

     使用指定的脚本script.sh来进行健康检查。

  • 相关阅读:
    年终总结-致敬2014
    NCover的安装和使用-NUnit
    某大型银行深化系统之二:设计策略
    某大型银行深化系统之一:平台技术
    自己动手写Web容器之TomJetty之五:包装请求参数
    robot framework环境搭建
    解决从jenkins打开robot framework报告会提示‘Opening Robot Framework log failed ’的问题
    robotframework中文显示乱码
    RF常用快捷键
    抓包工具Fidder移动端HTTP请求抓包详解
  • 原文地址:https://www.cnblogs.com/digdeep/p/4245168.html
Copyright © 2011-2022 走看看