keepalived的简介

一、Keepalived简介

Keepalived是HA cluster的一种实现方案,其以vrrp协议为实现基础,在N台具有相同功能的路由器或服务器中选出一个master或多个backup,这些路由器或服务器会共用一个对外提供服务的VIP。在此HA cluster集群中,master主机会发送组播来跟backup主机进行通信确认双方是否存活。当backup主机在指定的时间内没有收到vrrp组播报文则认为master主机宕机了,此时就会在所有的backup主机中根据vrrp协议来选举出新的master主机来保证服务的高可用性。
keepalived主要有三个模块,分别是ipvs wrapper、checkers和vrrp stack。ipvs wrapper模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。checkers负责健康检查,包括常见的各种检查方式。vrrp stack模块是来实现VRRP协议的。

二、Keepalived的配置文件及组成

Keepalived的默认配置文件为/etc/keepalived/keepalived.conf,其主程序文件为/usr/sbin/keepalived。
Keepalived的配置文件的组成主要分为三部分,而每个部分下面又包含着各自的子段,其组成及配置如下:

  • 1、GLOBAL CONFIGURATION:全局配置段
    Global definitions:用于定义全局设置,常用的参数及示例如下:
global_defs {
    notification_email {    #用于指定报警邮件发往的邮箱地址
        root@localhost
    }
    notification_email_from keepalived@localhost    #用于指定报警邮件的发件人
    smtp_server 127.0.0.1    #用于指定邮件服务器的地址
    smtp_connect_timeout 30    #用于指定邮件服务器的连接超时时长
    router_id node1    #路由器的标识
    vrrp_mcast_group4 224.0.100.19    #用于设置vrrp的广播地址,在同一个HA cluster中的机器,要确保其广播地址一致才能接受到相应的vrrp报文
    vrrp_strict    #执行严格的vrrp协议检查,某些情况下会禁止到vip的访问。
}

Static routes/address/rules:用于配置keepalived中不会被VRRP移除的静态地址、路由或者规则,一般不会使用。
2、VRRPD CONFIGURATION:VRRP相关配置段

  • VRRP instance(s):用于定义vrrp同步组,其常用的格式及参数如下:
vrrp_instance  {
    state MASTER|BACKUP    #用于指定此虚拟路由器在vrrp组的角色状态
    interface eno16777736    #用于绑定当前虚拟路由器所使用的物理接口
    virtual_router_id 14    #用于指定当前虚拟路由器在vrrp组的唯一标识id,范围为0-255
    priority 100    #用于设置当前虚拟路由器在vrrp组里面的优先级,范围为1-254;
    advert_int 1    #用于设置虚拟路由器发送vrrp通告的时间间隔
    nopreempt|preempt    #定义工作模式为非抢占或抢占模式;
    preempt_delay 300    #定义在抢占式模式下,节点上线后触发新选举操作的延迟时长;
    authentication {    #用于设置vrrp组协商的方式及密码
        auth_type PASS    #定义认证类型为简单密码认证
        auth_pass 571f97b2    #定义密码串,最长不超过8个字符
    }
    virtual_ipaddress {    #用于指定需要在绑定的物理接口上添加的虚拟ip地址
        #/ brd  dev  scope  label 
  • VRRP script(s):用于定义周期性执行的脚本,可定义调用用于检查相应的服务或Ip的状态的脚本。
vrrp_script  {    #定义周期执行的脚本,此脚本的退出码决定了当前监控的vrrp组的运行状态
    script |    #定义执行脚本的存放路径
    interval INT     #定义调用执行脚本的周期,默认为1s。
    timeout    # 脚本执行超时时间,脚本执行超时后,则被认为失败
    rise               # 定义脚本检查成功多少次,才认可当前的状态为正常
    fall               #定义检查失败多少次,才认为当前状态为失败
}

3、LVS CONFIGURATION:LVS配置段

  • Virtual server(s):用于定义虚拟服务器的设置,虚拟服务器可以用Ip端口、fwmark或virtual server group来定义。
virtual_server IP port | virtual_server fwmark   |virtual_server group string

{
    delay_loop     #=服务轮询的时间间隔;
    lb_algo rr|wrr|lc|wlc|lblc|sh|dh    #定义调度方法;
    lb_kind NAT|DR|TUN    #集群的类型;
    persistence_timeout     #持久连接时长;
    protocol TCP|UDP|SCTP    #服务协议;
    sorry_server      #备用服务器地址;
    real_server  {
        weight     #设置real server的权重
        notify_up |    #当出现匹配字符串时,就认为服务是up的
        notify_down |    #当出现匹配字符串时,就认为服务是down的
        HTTP_GET|SSL_GET {    #对real server作应用层检测
            url {
                path     #定义要监控的URL;
                status_code     #判断上述检测机制为健康状态的响应码;
                digest     #判断上述检测机制为健康状态的响应的内容的校验码;
            }
            nb_get_retry     #重试次数;
            delay_before_retry     #重试之前的延迟时长;
            connect_ip     #向当前RS的哪个IP地址发起健康状态检测请求
            connect_port     #向当前RS的哪个PORT发起健康状态检测请求
            bindto     #发出健康状态检测请求时使用的源地址;
            bind_port     #发出健康状态检测请求时使用的源端口;
            connect_timeout     #连接请求的超时时长;
        }
        
         TCP_CHECK {
            connect_ip     #向当前RS的哪个IP地址发起健康状态检测请求
            connect_port     #向当前RS的哪个PORT发起健康状态检测请求
            bindto     #发出健康状态检测请求时使用的源地址;
            bind_port     #发出健康状态检测请求时使用的源端口;
            connect_timeout     #连接请求的超时时长;
        }
    }
}

三、keepalived的配置实例

  • 高可用的ipvs集群
! Configuration File for keepalived

global_defs {
    notification_email {
        root@localhost
    }
    notification_email_from keepalived@localhost
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id node1
    vrrp_mcast_group4 224.0.100.19
}

vrrp_instance VI_1 {
    state MASTER
    interface eno16777736
    virtual_router_id 14
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 571f97b2
    }
    virtual_ipaddress {
        10.1.0.93/16 dev eno16777736
    }
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}

virtual_server 10.1.0.93 80 {
    delay_loop 3
    lb_algo rr
    lb_kind DR
    protocol TCP

    sorry_server 127.0.0.1 80

    real_server 10.1.0.69 80 {
        weight 1
        HTTP_GET {
        url {
            path /
            status_code 200
        }
        connect_timeout 1
        nb_get_retry 3
        delay_before_retry 1
        }
    }
    real_server 10.1.0.71 80 {
        weight 1
        HTTP_GET {
        url {
            path /
            status_code 200
        }
        TCP_CHECK {
            nb_get_retry 3
            delay_before_retry 2
            connect_timeout 3
        }
    }
}

双主模型:
主机配置:

global_defs {
    notification_email {
        root@localhost
    }
    notification_email_from keepalived@localhost
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id node1
    vrrp_mcast_group4 224.0.100.19
}

vrrp_instance VI_1 {
    state MASTER
    interface eno16777736
    virtual_router_id 14
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 571f97b2
    }
    virtual_ipaddress {
        10.1.0.91/16 dev eno16777736
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface eno16777736
    virtual_router_id 15
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 578f07b2
    }
    virtual_ipaddress {
        10.1.0.92/16 dev eno16777736
    }
}

备机配置:

global_defs {
    notification_email {
        root@localhost
    }
    notification_email_from keepalived@localhost
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id node2
    vrrp_mcast_group4 224.0.100.19
}

vrrp_instance VI_1 {
    state BACKUP
    interface eno16777736
    virtual_router_id 16
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 571f97b2
    }
    virtual_ipaddress {
        10.1.0.91/16 dev eno16777736
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface eno16777736
    virtual_router_id 17
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 578f07b2
    }
    virtual_ipaddress {
        10.1.0.92/16 dev eno16777736
    }
}

你可能感兴趣的:(keepalived的简介)