keepalived配置文件详解   ​

keepalived配置文件详解    

    keepalived配置文件分为三个部分:全局配置(Globals configurations)、vrrp配置(VRRP configuration)、 LVS配置(LVS configuration),针对这三部分对keepalived配置文件进行解析。

1、全局配置

全局配置分为2个子块:Global definitions与Static routes。

(1)、Global definitions

主要要是配置故障发生时的通知对象以及机器标识

global_defs{                      

    notification_email {           

       <EMAIL ADDRESS>             

       <EMAIL ADDRESS>

       ...

    }

    notification_email_from <EMAILADDRESS>

    smtp_server <IP ADDRESS>              

    smtp_connect_timeout <INTEGER>                                                

    router_id <STRING>                     

}

notification_email:接收告警通知的邮箱,可以设置多个。

notification_email_fromemail:告警邮件从那个邮箱发出。

smtp_server:发送告警邮件的SMTP服务器地址。

smtp_connect_timeout:连接SMTP服务器超时时间。

router_id: #运行keepalived的机器的路由标识,主备机一致。

(2)、Static addresses

static_ipaddress和static_routes用来给服务器配置静态的IP地址/路由。如果你的机器上已经配置了IP和路由,那么这两个区域可以不用配置。

一般情况下你的机器都会有IP地址和路由信息的,因此没必要再在这两个区域配置。

语法如下:

static_ipaddress{         

    <IP ADDRESS>/<MASK> brd <IPADDRESS> dev <STRING> scope <SCOPE>

    <IP ADDRESS>/<MASK> brd <IPADDRESS> dev <STRING> scope <SCOPE>

}

static_routes{                        

    src <IP ADDRESS> [to] <IPADDRESS>/<MASK> via|gw <IP ADDRESS> dev <STRING> scope<SCOPE> table <TABLE-ID> # to is optional

    src <IP ADDRESS> [to] <IPADDRESS>/<MASK> via|gw <IP ADDRESS> dev <STRING> scope<SCOPE> table <TABLE-ID> # to is optional

    src <IP ADDRESS> [to] <IPADDRESS>/<MASK> via|gw <IP ADDRESS> or <IP ADDRESS> dev<STRING> scope <SCOPE> table <TABLE-ID> # will use multipathroute

    blackhole <IP ADDRESS>[/<MASK>]

}

备注:以上两部份中的SCOPE可以指定的值为:site、link、host、nowhere、global。

如下为静态地址与静态路由配置示例:

示例1:

static_ipaddress{

    192.168.200.16 dev eth0 scope link

    192.168.200.17 dev eth1 scope link

    192.168.200.18 dev eth2

}

示例2:

static_routes{

    src 192.168.100.1 192.168.209.0/24 via192.168.200.254 dev eth0

    192.168.210.0/24 via 192.168.200.254 deveth0

    192.168.211.0/24 via 192.168.200.254 deveth0

    192.168.212.0/24 dev eth3 scope site

    192.168.213.0/24 dev eth1 scope link

}

2、VRRP配置

VRRP configuration配置是keepalive实现HA部分重要内容,同样也分为VRRP scripts、VRRP synchronization group、VRRP instance三个子块实现。

(1)、VRRP scripts

vrrp_script <STRING> {          # vrrp_script与track_script结合使用,<STRING>与track_script中<STRING>值设置为相同。

script <QUOTED_STRING>     #监控脚本或者监控命令。

interval<INTEGER>          #脚本运行时间间隔。

weight <INTEGER:-254..254> #设置weight值,取值范围-254-254。keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。

    fall <INTEGER>              #运行失败指定次数后发生切换。

    rise <INTEGER>              #运行成功指定次数后不发生切换。

}

(2)、VRRP synchronization group

vrrp_rsync_group用来定义vrrp_intance组,使得这个组内成员动作一致。举个例子来说明其功能:两个vrrp_instance同属于一个vrrp_rsync_group,那么其中一个vrrp_instance发生故障切换时,另一个vrrp_instance也会跟着切换(即使这个instance没有发生故障)。

vrrp_sync_group <STRING>{ #vrrp_sync_group组名。

group {                       

      <STRING>      #指定加入vrrp_sync_group组的VRRP_Instance。

      <STRING>                

}

notify_master <STRING>|<QUOTED-STRING> #表示切换为master时所执行的脚本。

notify_backup <STRING>|<QUOTED-STRING> #表示切换为backup时所执行的脚本。

notify_fault <STRING>|<QUOTED-STRING>  #表示切换为fault时所执行的脚本。

notify <STRING>|<QUOTED-STRING>        #表示任何一状态切换时都会调用该脚本,并且该脚本在以上三个脚本执行完成之后进行调用,keepalived会自动传递4个参数。

    $1 = A stringindicating whether it's a "GROUP" or an "INSTANCE"

    $2 = The name of said groupor instance

    $3 = The state it'stransitioning to ("MASTER", "BACKUP" or "FAULT")

    $4 = The priorityvalue

    $1 and $3 are ALWAYSsent in uppercase, and the possible strings sent are the

    same ones listed above("GROUP"/"INSTANCE", "MASTER"/"BACKUP"/"FAULT").

smtp_alert  #使用global_defs里面定义的邮件地址和smtp服务器在切换后发送邮件通知。

}

(3)、VRRP instance

    vrrp_instance用来定义对外提供服务的VIP区域及其相关属性。

常用参数说明:

use_vmac:使用VRRP的虚拟MAC地址。

state MASTER|BACKUP:设置节点状态。keepalived启动时会将priority比较大的节点选举为MASTER。

interface <STRING>:用于HA检测与对外提供服务的网络的接口。

track_interface :监控指定的网卡,如果任何一个不通就会切换到FALT状态。

track_script:与vrrp_script参数一同使用,设定监控服务的脚本,<STRING>与vrrp_script参数中的名称相同。

mcast_src_ip发送多播包的地址,如果不设置,默认使用绑定的网卡的primary IP。

dont_track_primary忽略vrrp的interface错误,默认不设置。

lvs_sync_daemon_interface <STRING>:负载均衡器之间的监控接口,类似于HA HeartBeat的心跳线。但它的机制优于Heartbeat,因为它没有“裂脑”这个问题,它是以优先级这个机制来规避这个麻烦的。.

garp_master_delay <INTEGER>:当切为主状态后多久更新ARP缓存,默认为5秒。

virtual_router_id <INTEGER-0..255>:虚拟路由标识,主机与备机保持一致。

priority <INTEGER-0..255>:优先级,主机与备机必须不同。

advert_int <INTEGER>:同步通知间隔,MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位为秒。

authentication {                             

        auth_type PASS|AH:认证类型为PASS或AH,推荐使用PASS,主备必须使用相同认证方式及密码才可以通信。

        auth_pass<STRING>:设置认证密码。密码最多8位。

    }

virtual_ipaddress:漂移地址设置,可以设置多个。

virtual_routes : 虚拟路由,当IP漂过来之后需要添加的路由信息。

nopreempt:功能类似于heartbeat的auto_failback,设置不自动切回,该参数只能设置在state为backup的服务器上,且优先权必须高于其他节点的服务器上。

preempt_delay: 抢占延时,默认为0。

notify_master <STRING>|<QUOTED-STRING>:与vrrp_sync_group中相同。

notify_backup <STRING>|<QUOTED-STRING>:与vrrp_sync_group中相同。

notify_fault <STRING>|<QUOTED-STRING>: 与vrrp_sync_group中相同。

notify_stop <STRING>|<QUOTED-STRING>:  停止vrrp时,执行指定的脚本。

notify <STRING>|<QUOTED-STRING>:       与vrrp_sync_group中相同。

smtp_alert:与vrrp_sync_group中相同。

3、LVS配置

LVS的配置包括2部分:虚拟主机组(virtual server group)和虚拟主机(virtual server)。虚拟主机组一般用不到,这里不介绍。以下为虚拟主机常用参数介绍。

virtual_server<IP ADDRESS> <PORT> {     # 虚拟服务器设置标识,指定虚拟ip与端口,ip地址与端口号之间用空格隔开。

    delay_loop <INTEGER>                # 延迟轮询时间

    lvs_sched rr|wrr|lc|wlc|lblc|sh|dh  # LVS调度算法

    ops                 #Apply One-Packet-Scheduling (only for UDP),不常用。

    lvs_method NAT|DR|TUN               # LVS调度类型

    persistence_timeout <INTEGER>       # 会话保持时间,单位为秒。

    persistence_granularity <NETMASK>   # 此选项是配合persistence_timeout,后面跟的值是子网掩码,表示持久连接的粒度。

    protocol TCP                        # 指定协议

    ha_suspend                          #节点状态从MASTER到BACKUP状态切换时,暂不启用real_server健康检查。

    virtualhost <STRING>                # HTTP_GET做健康检查时,检查的Web服务器的虚拟主机。

    sorry_server <IP ADDRESS><PORT>     # 备用机,所有的real server失效后启用。  

    real_server健康检查方法有HTTP_GET|SSL_GET、TCP_CHECK、SMTP_CHECK、MISC_CHECK多种,以下分别做以介绍如何使用。

 real_server <IP ADDRESS> <PORT> {  # 定义realserver

     weight <INTEGER>    # 用来配置real server节点的权值,数字越大权值越高。默认为1,0为失效。 

     inhibit_on_failure  # 服务器健康检查失败时,将其weight设置为0,而不是直接从IPVS里面删除。

     notify_up <STRING>|<QUOTED-STRING>   # 在检测到real server节点服务up状态后执行脚本。

     notify_down<STRING>|<QUOTED-STRING>  # 在检测到real server节点服务down状态后执行脚本。

       HTTP_GET|SSL_GET {  

            url {               # HTTP/SSL检查的URL,这里可以指定多个URL。

              path <STRING>     # 详细的URL路径。

              digest <STRING>       # SSL检查后的摘要信息。

              status_code <INTEGER> # HTTP检查的返回状态码,一般为200.

            }                      

            url {

              path <STRING>

              digest <STRING>

              status_code <INTEGER>

            }

     connect_ip <IP ADDRESS> # 健康检查连接的ip地址,如果不指定默认为realserver指定的IP。

     connect_port <PORT>     # 健康检查的端口,如果不指定默认为real server指定的端口。

     bindto <IP ADDRESS>     # 如果本机有多个网卡配置多个地址,那么通过此地址来发送请求对服务进行健康检查。

     bind_port <PORT>        # 通过本机此端口来发送请求对服务进行健康检查。

     connect_timeout <INTEGER>   # 连接超时时间

     fwmark <INTEGER>        # fwmark to set on socket (SO_MARK)

     nb_get_retry <INTEGER>  # 重试次数。

     delay_before_retry <INTEGER> # 重试间隔时间(秒)。

     warmup <INTEGER>        # 如果后端有众多realserver时,如果按精确时间发送检测报文,可能会造成本机的网络堵塞,因此可以使用warmup 指定一个时间,表示将发送检测报文的精确时间差开一点的时间,以免造成本机堵塞。

        }

    }

    real_server <IP ADDRESS> <PORT>{   # 同上

        weight <INTEGER>        # 同上

        inhibit_on_failure      # 同上

        notify_up<STRING>|<QUOTED-STRING> # 同上

        notify_down<STRING>|<QUOTED-STRING> # 同上

 

        TCP_CHECK {

            connect_ip <IP ADDRESS> # IPaddress to connect

            connect_port <PORT>     # TCP port to connect

            bindto <IP ADDRESS>     # IP address to bind to

            bind_port <PORT>        # TCP port to bind to

            connect_timeout<INTEGER>   # Timeout connection

            fwmark <INTEGER>        # fwmark to set on socket (SO_MARK)

            warmup <INTEGER>        # random delay for maximum N seconds

        }

    }

    real_server <IP ADDRESS> <PORT>{   # 同上

        weight <INTEGER>               # 同上

        inhibit_on_failure             # 同上

        notify_up<STRING>|<QUOTED-STRING>   # 同上

        notify_down<STRING>|<QUOTED-STRING> # 同上

 

        SMTP_CHECK {                    

            connect_ip <IP ADDRESS>     #Optional IP address to connect to

            connect_port <PORT>         # Optional port to connect to

            bindto <IP ADDRESS>         # Optional interface to use tooriginate the connection

            bind_port <PORT>            # Optional source port to originatethe connection from

            connect_timeout<INTEGER>   # Optional per-hostconnection timeout.

            fwmark <INTEGER>          # Optional fwmark to mark alloutgoing checker pakets with

            host {                      # Optional additional host/port to check

                connect_ip <IP ADDRESS> #IP address to connect

                connect_port <PORT>     # TCP port to connect

                bindto <IP ADDRESS>     # IP address to bind to

                bind_port <PORT>        # TCP port to bind to

                connect_timeout<INTEGER>   # Timeout connection

                fwmark <INTEGER>        # fwmark to set on socket (SO_MARK)

            }

            host {

                connect_ip <IP ADDRESS> #IP address to connect

                connect_port <PORT>     # TCP port to connect

                bindto <IP ADDRESS>     # IP address to bind to

                bind_port <PORT>        # TCP port to bind to

                connect_timeout<INTEGER>   # Timeout connection

                fwmark <INTEGER>        # fwmark to set on socket (SO_MARK)

            }

            connect_timeout<INTEGER>  # Connection andread/write timeout

            warmup <INTEGER>        # random delay for maximum N seconds

            retry <INTEGER>             # Number of times to retry afailed check

            delay_before_retry <INTEGER># Delay in seconds before retrying

            helo_name<STRING>|<QUOTED-STRING> # Host to use for the HELO request

        }

    }

    real_server <IP ADDRESS> <PORT>{   # 同上

        weight <INTEGER>               # 同上

        inhibit_on_failure             # 同上

        notify_up<STRING>|<QUOTED-STRING>   # 同上

        notify_down <STRING>|<QUOTED-STRING># 同上

 

        MISC_CHECK {               

            misc_path<STRING>|<QUOTED-STRING>  # 外部执行脚本。

            misc_timeout <INTEGER>      # 脚本执行超时时间。

            warmup <INTEGER>        # random delay for maximum N seconds

 

            # If set, exit code from healthcheckeris used

            # to dynamically adjust the weightas follows:

            #  exit status 0: svc check success, weight

            #     unchanged.

            #  exit status 1: svc check failed.

            #  exit status 2-255: svc check success, weight

            #     changed to 2 less than exit status.

            #  (for example: exit status of 255 would set

            #     weight to 253)

            misc_dynamic

        }

    }

}

你可能感兴趣的:(keepalived,配置文件)