美文网首页
keepalived的简介

keepalived的简介

作者: 小尛酒窝 | 来源:发表于2018-05-29 10:29 被阅读0次

一、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 <STRING> {
    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地址
        #<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
        10.1.0.91/16 dev eno16777736
    }
    track_interface {    #配置需要监控的网络接口,一旦接口出现故障,此虚拟路由器转为FAULT状态
      eth0
      eth1
      ...
     }
    track_script {    #用于调用在vrrp_script中定义的脚本,然后根据脚本的来进行监控调整
       <SCRIPT_NAME>
       <SCRIPT_NAME> weight <-254..254>
    }

    notify_master <STRING>|<QUOTED-STRING>    #当前节点成为主节点时触发的通知脚本;
    notify_backup <STRING>|<QUOTED-STRING>    #当前节点转为备节点时触发的通知脚本;
    notify_fault <STRING>|<QUOTED-STRING>    #当前节点转为“失败”状态时触发的通知脚本;
    notify_stop <STRING>|<QUOTED-STRING>     #当前节点停止时所触发的通知脚本
}
  • VRRP script(s):用于定义周期性执行的脚本,可定义调用用于检查相应的服务或Ip的状态的脚本。
vrrp_script <SCRIPT_NAME> {    #定义周期执行的脚本,此脚本的退出码决定了当前监控的vrrp组的运行状态
    script <STRING>|<QUOTED-STRING>    #定义执行脚本的存放路径
    interval INT     #定义调用执行脚本的周期,默认为1s。
    timeout <INTEGER>   # 脚本执行超时时间,脚本执行超时后,则被认为失败
    rise <INTEGER>              # 定义脚本检查成功多少次,才认可当前的状态为正常
    fall <INTEGER>              #定义检查失败多少次,才认为当前状态为失败
}

3、LVS CONFIGURATION:LVS配置段

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

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

三、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的简介

      本文链接:https://www.haomeiwen.com/subject/rmqpjftx.html