keepalived02-keepalived的配置文件

1、keepalived配置文件的概述

  • keepalived.conf是keepalived的配置文件。
    • 关键字被放置在块和子块的层次结构中,每一层由“{”和“}”对分隔。
    • 注释符:'#'或'!'。
    • include:允许主配置文件加载其他配置文件。
#FILENAME可以是一个绝对或相对路径,并且可以包含通配符,以及csh风格的大括号表达式,如"{foo/{,cat,dog},bar}",如果glob()支持它们的话。
include FILENAME

includer FILENAME     #与include_check readable相同
includem FILENAME     #与include_check match相同
includew FILENAME     #与include_check wildcard_match相同
includeb FILENAME     #与include_check brace_match相同
includea FILENAME     #所有include_check检查
  • 参数语法
    • <BOOL>为on|off|true|false|yes|no之一
    • <TIMER>是一个以秒为单位的时间值,例如2.71828或3;定时器的分辨率为微秒。
  • Keepalived配置文件有四个顶级配置块
    • GLOBAL配置
    • BFD配置
    • VRRPD配置
    • LVS配置
  • keepalivd配置文件常见的结构
#全局配置块
global_defs {
    ......
}

#定义一个虚拟路由器
vrrp_instance <STRING> {
    authentication {                   #一个虚拟路由器广播通信时的认证信息
        ......
    }
    virtual_ipaddress {                #配置vip
        ......
    }
}

#定义一个ipvs虚拟服务
virtual_server <IPADDR> [<PORT>] |     #使用IP+Port定义集群服务
virtual_server fwmark <INTEGER>  |     #使用防火墙标记定义集群服务
virtual_server group <STRING> {
    real_server <IPADDR> [<PORT>] {    #定义一个后端服务器(RS)
        HTTP_GET {                     #HTTP健康检查器
            url {
                ......
            }
        }
        TCP_CHECK {                    #TCP健康检查器
            ......
        }
    }
}

2、四个顶级配置块

2.1、GLOBAL配置块

  • GLOBAL顶级配置块中包含的子块有:Global definitions、Linkbeat interfaces、Interface up/down transition delays、Static track groups、Static addresses、Static routes、Static rules。
global_defs {
    #向哪些邮件发送警告
    notification_email {
        admin@example1.com
        ...
    }
    #发送邮件的发件人的地址(default: keepalived@<local host name>)
    notification_email_from admin@example.com
    #邮件服务器(default port number: 25)
    smtp_server 127.0.0.1 [<PORT>]
    #连接邮件服务器的超时时间(秒)
    smtp_connect_timeout 30
    #标识机器的字符串,不必是主机名。(default: local host name)
    router_id <STRING>
    #VRRP通告使用的组播的IPv4地址,默认的VRRP组播地址是224.0.0.18,通常不希望更改。(不同keepalived集群的组播的IP地址尽量不同)
    vrrp_mcast_group4 224.0.0.18

    vrrp_skip_check_adv_addr
    vrrp_strict
    vrrp_garp_interval 0
    vrrp_gna_interval 0

    #配置VRRP的默认版本号(default: 2, but IPv6 instances will use version 3)
    vrrp_version <2 or 3>
    #配置VIP的默认网络接口。(default: eth0)
    default_interface eth0

    #VRRP通告使用的组播组IPv6地址(default: ff02::12)
    vrrp_mcast_group6 ff02::12
    #不向邮件发送警告
    no_email_faults
    #转换到MASTER后的第二组免费arp延迟。以秒为单位,0表示没有第二组。 (default: 5)
    vrrp_garp_master_delay 10
    #转换到MASTER后一次发送的免费ARP消息数。(default: 5)
    vrrp_garp_master_repeat 1
    #MASTER收到较低优先级的通告后,第二组免费arp的延迟。 (default: vrrp_garp_master_delay)
    vrrp_garp_lower_prio_delay 10
    #MASTER收到低优先级的通告后,一次发送的免费ARP消息的个数。(default: vrrp_garp_master_repeat)
    vrrp_garp_lower_prio_repeat 1
    #MASTER免费arp刷新的最小时间间隔。以秒为单位。(default: 0 (no refreshing))
    vrrp_garp_master_refresh 60
    #MASTER一次发送的免费ARP消息数
    vrrp_garp_master_refresh_repeat 2
    #接口发送免费ARP报文的延迟时间,单位是秒(resolution usecs)。(default: 0)
    vrrp_garp_interval 0.001
}

2.2、BFD配置块

  • 这是RFC5880(双向转发检测)的一个实现,它可以在两个keepalive实例之间工作,但在主/备VRRP实例之间使用非加权track_bfds意味着只有两个VRRP实例都运行时,该VRRP实例才能够运行,这在一定程度上违背了VRRP的目的。
  • 这个实现已经用OpenBFDD进行了测试(可从https://github.com/dyninc/OpenBFDD获得)。
bfd_instance <STRING> {
    #BFD邻居IP(同义词neighbour_ip)
    neighbor_ip <IP ADDRESS>
    #要使用的源IP(可选,除非为了确保本地端口有效,这是必需的)
    source_ip <IP ADDRESS>
    #所需的最小RX时间间隔,单位为ms(例如3.312)(default is 10 ms)
    min_rx <DECIMAL>
    #期望的最小TX间隔,单位为ms(分辨率为微秒)(default is 10 ms)
    min_tx <DECIMAL>
    #期望的空闲TX间隔,单位为ms(分辨率为微秒)(default is 1000 ms)
    idle_tx <DECIMAL>
    #在会话宣告down后,错过的报文数(default is 5)
    multiplier <INTEGER>
    #在被动模式下操作(默认为主动)
    passive
    # out going IPv4 ttl to use (default 255)
    ttl <INTEGER>
    # outgoing IPv6 hoplimit to use (default 64)
    hoplimit <INTEGER>
    #接收报文中ttl/hoplimit的最大减少值(默认为0)255禁用跳数检查255禁用跳数检查)
    max_hops <INTEGER>
    #默认跟踪权重。正常情况下,当bfd实例状态为up时,vrrp实例优先级增加正权值。当bfd实例状态为down时,负权值降低优先级。但是,如果指定了reverse,则优先级在up时降低,在down时增加。
    weight <-253:253> [reverse]
    #正常情况下,bfd事件通知同时发送给VRRP进程和checker进程。指定vrrp或checker将导致bfd_instance的事件通知只发送给指定的进程
    vrrp
    checker
}

2.3、VRRPD配置块

  • VRRPD顶级配置块中包含的子块有:VRRP script(s)、VRRP synchronization group(s)、VRRP gratuitous ARP、unsolicited neighbour advert delay group(s)、VRRP instance(s)。

2.3.1、VRRP script(s)配置子块

  • 脚本将周期性地执行,间隔<interval>秒执行一次。
  • 执行脚本连续失败<fall>次后,VRRP实例将会切换到fault状态。在此之后,如果执行脚本连续成功<rise>次,VRRP实例将会离开fault状态,除非VRRP实例由于跟踪其他脚本或接口而处于fault状态。
  • 如果权重为正,则每1次成功,监视它的所有VRRP实例的优先级将增加<weight>。相反,在失败的情况下,将从初始优先级中减去一个负权重。
vrrp_script <SCRIPT_NAME> {
    #脚本的路径
    script <STRING>|<QUOTED-STRING>
    #周期性地执行脚本,间隔<interval>秒执行一次。(default: 1 second)
    interval <INTEGER>
    #在该脚本被认为失败的几秒之后
    timeout <INTEGER>
    #调整优先级的权重(默认:0)。。
    weight <INTEGER:-253..253> [reverse]
    #执行脚本连续成功n次,状态从fail转换到ok
    rise <INTEGER>
    #执行脚本连续失败n次,状态从ok转换到fail
    fall <INTEGER>
    #运行脚本的用户/组名。group默认为用户组
    user USERNAME [GROUPNAME]
    #假设脚本最初处于失败状态
    init_fail
}

2.3.2、VRRP instance(s)配置子块

vrrp_instance <STRING> {
    #当前节点在这个虚拟路由器中的初始状态。在一个虚拟路由器中只能有一个是MASTER节点,其它节点都应该是BACKUP
    state MASTER|BACKUP
    #使用哪个网卡接口发送VRRP通告
    interface eth0
    #虚拟路由器的惟一标识,取值范围是1-255。(同一个虚拟路由器必须一样)
    virtual_router_id 51
    #当前主机在该虚拟路径器中的优先级,取值范围是1-255。
    priority 100
    #vrrp通告的时间间隔,单位秒
    advert_int 1
    #调用定义的vrrp_script
    track_script {
        <SCRIPT_NAME>
        <SCRIPT_NAME> weight <-253..253> [reverse|no_reverse]
    }
    #vrrp通告时使用的认证信息
    authentication {
        #认证模式,建议使用简单认证pass
        auth_type PASS|AH
        #pass认证密码,只使用前8个字符
        auth_pass 1234
    }
    #使用IPv4配置vip
    virtual_ipaddress {
        #不使用dev指定网卡接口时,就将vip绑定到interface指定的网卡接口
        <IPADDR>[/<MASK>] [brd <IPADDR>] [dev <STRING>] [scope <SCOPE>] [label <LABEL>]
        #辅助ip,查看要用ip命令
        192.168.200.17/24 dev eth1
        #别名ip,查看可用ifconfig命令
        192.168.200.18/24 dev eth2 label eth2:1
    }
    #使用IPv6配置vip
    virtual_ipaddress_excluded {
        <IPADDR>[/<MASK>] [brd <IPADDR>] [dev <STRING>] [scope <SCOPE>] [label <LABEL>] 
        <IPADDR>[/<MASK>] ...
        ...
    }

    #当前节点转变为主节点时,要执行的脚本
    notify_master <STRING>|<QUOTED-STRING> [username [groupname]]
    #当前节点转变为备节点时,要执行的脚本
    notify_backup <STRING>|<QUOTED-STRING> [username [groupname]]
    #当前节点转变为fault状态时,要执行的脚本
    notify_fault <STRING>|<QUOTED-STRING> [username [groupname]]
    #停止VRRP时,要执行的脚本
    notify_stop <STRING>|<QUOTED-STRING> [username [groupname]]
    notify <STRING>|<QUOTED-STRING> [username [groupname]]
    #如果master接收到优先级低于master的通告时,要执行的脚本
    notify_master_rx_lower_pri <STRING>|<QUOTED-STRING> [username [groupname]]

    #监控网络接口。重量必须在-253和+253之间,0是默认行为,这意味着如果被监控的网络接口出现故障,就转为fault状态
    track_interface {
        eth0
        eth1
        eth2 weight <-253..253> [reverse]
         ...
    }
    #VRRP版本号,默认是全局参数的vrrp_version。如果是IPv6就应该使用"version 3"
    version <2 or 3>
    #使用非抢占模式,默认是抢占模式。注意:为了使其工作,初始状态不能是MASTER。
    nopreempt
    #在抢占式模式下,指定延迟抢占的时间(当master节点通告的优先级低于本节点),以秒为单位。取值范围是0-1000,默认值是0。注意:为了使其工作,初始状态不能是MASTER。
    preempt_delay 300    # waits 5 minutes
}
  • 通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知
    • notify <STRING>|<QUOTED-STRING>

2.4、LVS配置块

  • LVS顶级配置块中包含的子块有:Virtual server group(s)和Virtual server(s)
  • LVS配置块是通过定义虚拟服务器组、虚拟服务器和可选的SSL配置实现的。
  • 每个虚拟服务器都定义了一组后端服务器,可以对将每个后端服务器进行healthcheckers。

2.4.1、Virtual server group(s)配置子块

virtual_server_group <STRING> {
    # Virtual IP Address and Port
    <IPADDR> [<PORT>]
    <IPADDR> [<PORT>]
    ...
    # <IPADDR RANGE> is any of the following forms (or their IPv6 equivalents)
    # XXX.YYY.ZZZ.WWW-VVV eg 192.168.200.1-10 (includes both .1 and .10)
    # AAA.BBB.CCC.DDD-EEE.FFF.GGG.HHH eg 192.168.200.250-192.168.201.10
    # III.JJJ.KKK.LLL/nn eg 192.168.202.8/29
    <IPADDR RANGE> [<PORT>] # VIP range [VPORT]
    <IPADDR RANGE> [<PORT>]
    ...
    # Firewall Mark (fwmark)
    fwmark <INTEGER>
    fwmark <INTEGER> [inet|inet6]
    ...
}

2.4.2、Virtual server(s)配置子块

virtual_server <IPADDR> [<PORT>] |    #使用IP+Port定义集群服务
virtual_server fwmark <INTEGER>  |    #使用防火墙标记定义集群服务
virtual_server group <STRING> {
    #定义调度方法
    lvs_sched rr|wrr|lc|wlc|lblc|sh|mh|dh|fo|ovf|lblcr|sed|nq|twos
    #指定LVS的模式,默认为NAT
    lvs_method NAT|DR
    lvs_method TUN [type {ipip|gue port NUM|gre} [nocsum|csum|remcsum]]
    #LVS持久化引擎名称(目前只支持sip)
    persistence_engine <STRING>
    #LVS持久连接的时长(以秒为单位),默认6分钟
    persistence_timeout [<INTEGER>]
    #LVS粒度掩码(ipvsadm中的-M)
    persistence_granularity <NETMASK>
    #服务协议
    protocol TCP|UDP|SCTP
    #备用后端服务器地址(sorry页面)
    sorry_server <IPADDR> [<PORT>]
    #服务轮询的时间间隔(默认为60秒)
    delay_loop <TIMER>
    #当健康检查程序检测到失败时,将权重设置为0
    inhibit_on_failure

    #定义一个后端服务器
    real_server <IPADDR> [<PORT>] {
        #后端服务器的权重,默认为1
        weight <INTEGER>
        #当后端服务器上线(up)时,要执行的脚本
        notify_up <STRING>|<QUOTED-STRING> [username [groupname]]
        #当后端服务器下线(down)时,要执行的脚本
        notify_down <STRING>|<QUOTED-STRING> [username [groupname]]

        #到后端服务器的最大连接数
        uthreshold <INTEGER>
        #到后端服务器的最小连接数
        lthreshold <INTEGER>
        #在状态转换期间发送电子邮件通知,是否使用上面global_defs中的地址
        smtp_alert <BOOL>

        #健康检查器有:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|DNS_CHECK|MISC_CHECK|BFD_CHECK|UDP_CHECK|PING_CHECK|FILE_CHECK
        #HTTP健康检查器
        HTTP_GET {
            # HTTP协议版本:1.0、1.0C和1.1之一
            http_protocol <PROTOCOL>
            #测试的url,可以有多个条目
            url {
                #定义要监控的URL
                path <STRING>
                #根据响应内容的校验码判断后端服务器是否健康
                #curl -s http://172.16.0.6 | md5sum		生成校验码命令
                #genhash -s 172.16.0.6 -p 80 -u /index.html	生成校验码命令
                digest <STRING>
                #根据响应码判断后端服务器是否健康,默认值是200-299。建议使用
                status_code <INTEGER|RANGE> [<INTEGER|RANGE>] ...
            }
            #向后端服务器的哪个IP地址发起健康状态检测请求,默认值是realserver IP
            connect_ip <IPADDR>
            #向后端服务器的哪个PORT发起健康状态检测请求,默认值是ealserver port
            connect_port <PORT>
            #发出健康状态检测请求的源IP地址
            bindto <IPADDR>
            #发出健康状态检测请求的源端口
            bind_port <PORT>

            #如果对活动后端服务器的检查失败,则需要检测n次。默认值为1
            retry <INTEGER>
            #失败后每次重试的时间间隔。DNS_CHECK默认为delay_loop,HTTP_GET和SSL_GET默认为3秒,其他默认为1秒
            delay_before_retry <TIMER>
            #连接的超时时长。默认为5秒
            connect_timeout <TIMER>
        }

        #TCP健康检查器
        TCP_CHECK {
            #向后端服务器的哪个IP地址发起健康状态检测请求,默认值是realserver IP
            connect_ip <IPADDR>
            #向后端服务器的哪个PORT发起健康状态检测请求,默认值是ealserver port
            connect_port <PORT>
            #发出健康状态检测请求的源IP地址
            bindto <IPADDR>
            #发出健康状态检测请求的源端口
            bind_port <PORT>

            #如果对活动后端服务器的检查失败,则需要检测n次。默认值为1
            retry <INTEGER>
            #失败后每次重试的时间间隔。DNS_CHECK默认为delay_loop,HTTP_GET和SSL_GET默认为3秒,其他默认为1秒
            delay_before_retry <TIMER>
            #连接的超时时长。默认为5秒
            connect_timeout <TIMER>
        }
    }
}

1

#                                                                                                                        #
posted @ 2022-07-27 02:45  麦恒  阅读(170)  评论(0编辑  收藏  举报