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来进行健康检查。

  • 相关阅读:
    Codeforces 691A Fashion in Berland
    HDU 5741 Helter Skelter
    HDU 5735 Born Slippy
    HDU 5739 Fantasia
    HDU 5738 Eureka
    HDU 5734 Acperience
    HDU 5742 It's All In The Mind
    POJ Euro Efficiency 1252
    AtCoder Beginner Contest 067 C
    AtCoder Beginner Contest 067 D
  • 原文地址:https://www.cnblogs.com/digdeep/p/4245168.html
Copyright © 2011-2022 走看看