欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

keepalived.conf配置文件介绍

程序员文章站 2022-07-12 17:31:10
...

一、 基本说明

keepalived.conf是配置文件,其中描述所有的 Keepalived 关键字。
关键字需要放置在含有等级结构的块和子块中,每一层都由成对的大括号 {
} 组成。

注释使用 #! , 它们可放在一行的开头, 也可以放在一行中的任何地方,直到一行的结尾,都会被看做注释。

关键字 include允许包含其他配置文件, 就行 Nginx 的配置文件一样。

下面的配置说明中的参数语法:

  • on | off | true | false | yes | no 之一
  • 是以秒为单位的时间值,包括小数秒,例如2.71828或3;计时器的分辨率是微
    秒。

二、 配置文件结构

Keepalived 配置文件围绕一组配置块进行连接。
每个块都针对特定功能,并有专门的守护进程。

! Configuration File for keepalived

global_defs {
    全局配置块
}

vrrp_instance VI_1 {
    vrrpd 实例配置块, 可以配置多个
}

virtual_server 192.168.200.100 443 {
    LVS 配置块, 可以配置多个
}

三、 全局配置块

global_defs {
   notification_email {
     # 接收通知邮件的电子邮箱账户列表
     # 注意发送邮件需要本机开启邮件服务,目前一般企业不用这种方式
     # 而是使用 zabbix 等监控实现
     [email protected]
     [email protected]
     [email protected]
   }
   # 指定发件人,这将会显示在发送的邮件中
   notification_email_from [email protected]
  
   # 用于发送邮件通知的SMTP服务器
   smtp_server 127.0.0.1
   
   # 指定SMTP流处理的超时时间
   smtp_connect_timeout 30
   
   # 标识机器的字符串(不必是主机名)。
   router_id LVS_DEVEL
   
   # 检查收到的VRRP 组播中的所有地址可能很耗时。 
   # 设置此标志意味着,如果组播与先前收到的组播来自同一主路由器,则不会进行检查。
   vrrp_skip_check_adv_addr
   
   # 强制严格遵守VRRP协议。 这将禁止:
   #0 VIP
   #单播对等
   #VRRP版本2中的IPv6地址
   vrrp_strict
   
   vrrp_garp_interval 0.001
   vrrp_gna_interval 0.000001
}

四、 VRRPD 实例配置块

配置示例

vrrp_instance VI_1 { # 实例名称, 所有机器应保持一致
    # 此 keepalived 的角色,在一组 keepalived 中只允许有一个 MASTER
    # 其他的应该设置为 BACKUP.
    # 实际上,一旦其他机器启动,将举行一次选举,
    # 并且具有最高优先级的计算机将成为MASTER。
    # 因此,这里的条目并不重要,只是有利于可读性。
    state MASTER
    
    # 绑定 vrrp 的内部接口,用于发送心跳信息(组播信息,地址是:224.0.0.18)
    interface eth0
    
    # 从1到255的任意唯一数字
    # 用于区分在同一NIC(并因此使用的同一套接字)上运行的vrrpd的多个实例
    # 同一个集群中的每个调度器上应该设置为一致
    virtual_router_id 51
    
    # 优先级,用于选举 MASTER
    # 要想成为 MASTER, 使其比其他机器多50
    priority 100
   # VRRP 组播通告间隔,单位是秒(例如0.92)。
    advert_int 1
   #  认证信息,所有的机器上应该一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    # VIP 地址,会随着角色转换而改变,VIP 总是在 MASTER 上被绑定。
    # 所有的机器应设置为一样的内容
    virtual_ipaddress {
        192.168.122.100
    }
    
    notify_master /path_to_script/script_master.sh
        (or notify_master “ /path_to_script/script_master.sh <arg_list>)
    notify_backup /path_to_script/script_backup.sh
        (or notify_backup “ /path_to_script/script_backup.sh <arg_list>)
    notify_fault /path_to_script/script_fault.sh
        (or notify_fault “ /path_to_script/script_fault.sh <arg_list>)
}

配置项参考

关键字 定义 类型
vrrp_instance 标识VRRP实例定义块 Block
state 在标准使用中指定实例状态
interface 指定实例运行所要用到的网络接口 string
mcast_src_ip 指定VRRP通告的IP头的源地址
lvs_sync_daemon_inteface 指定LVS sync_daemon运行所要用到的网络接口 string
virtual_router_id 指定实例所属的VRRP路由器ID numerical
priority 指定实例在VRRP路由器中的优先级 numerical
advert_int 以秒为单位指定通告的间隔时间(设置为1) numerical
smtp_alert **MASTER状态转换的SMTP通知
authentication 标识VRRP认证定义块 Block
auth_type 指定要使用哪种身份认证(PASS AH)
auth_pass 指定要使用的密码字符串 string
virtual_ipaddress 标识VRRP VIP定义块 Block
virtual_ipaddress_excluded 标识VRRP VIP排除定义块 Block
notify_master 指定在切换到master时要执行的脚本 path
notify_backup 指定在切换到backup时要执行的脚本 path
notify_fault 指定在切换到故障状态时要执行的脚本 path

五、 LVS 配置块

假如使用 Keepalived + LVS 应该设置这一部分,假如高可用针对的不是 LVS,则不需要设置此部分。

virtual_server 192.168.122.100 80 {    #LVS配置
	delay_loop 6   #健康检查rs时间间隔
	lb_algo rr     #LVS调度算法
	lb_kind DR     #LVS集群模式(路由模式)
	protocol TCP      #健康检查使用的协议
	real_server 192.168.122.10 80 {
		weight 1
		inhibit_on_failure   #当该节点失败时,把权重设置为0,而不是从IPVS中删除
		TCP_CHECK {          #健康检查
			connect_port 80   #检查的端口
			connect_timeout 3  #连接超时的时间, 单位为: 秒
			}
		}
	real_server 192.168.122.20 80 {
		weight 1
		inhibit_on_failure
		TCP_CHECK {
			connect_timeout 3
			connect_port 80
			}
		}
}


# LVS 的 VIP,要和 virtual_ipaddress 中值一致
virtual_server 192.168.122.100 443 {
    delay_loop 6                # 检查 RS 的轮询间隔,单位秒
    lvs_sched rr                  # LVS 调度算法
    lvs_method DR                  # LVS 的工作模式,默认 NAT
    persistence_timeout 50      # LVS持久性超时(以秒为单位),默认为6分钟
    protocol TCP                # 健康检查使用的协议 
 
    real_server 192.168.122.10 443 {
        # 权重
        weight 1
        
        # Healthchecker检测到故障时将权重设置为0,默认配置文件中没有
        inhibit_on_failure
        
        SSL_GET {
            url {
              path /

              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

关键字 定义 类型
virtual_server 标识虚拟服务器定义块 Block
fwmark 指定虚拟服务器是FWMARK
delay_loop 以秒为单位指定检查之间的间隔时间 numerical
lb_algo 选择一个特定的调度程序(rr wrr
lb_kind 选择一个特定的转发方法(NAT DR
persistence_timeout 为持久连接指定超时时间 numerical
persistence_granularity 为持久连接指定粒度掩码
virtualhost 指定用于HTTP SSL_GET的虚拟主机
protocol 指定协议类型(TCP UDP)
sorry_server 当所有真实服务器都宕掉时添加到池中的服务器
real_server 指定一个真实服务器成员
weight 为真实服务器指定负载均衡的权重 numerical
TCP_CHECK 使用TCP连接检查真实服务器的可用性
MISC_CHECK 使用用户定义的脚本检查真实服务器的可用性
misc_path 标识要运行脚本的完整路径 path
HTTP_GET 使用HTTP GET请求检查真实服务器的可用性
SSL_GET 使用HTTPS GET请求检查真实服务器的可用性
url 标识url定义块 Block
path 指定url路径 alphanum
digest 指定特定url路径的摘要 alphanum
connect_port 指定连接远程服务器的TCP端口 numerical
connect_timeout 指定连接远程服务器的超时时间 numerical
retry 最大重试次数 numerical
delay_before_retry 两次连续重试之间的延迟 numerical

类型“path”指的是被调用脚本的完整路径。对于需要参数的脚本,路径和参数必须用双引号括起来。

六、VRRP script

vrrp_script 关键字用于设置检查脚本,主要是检查 keepalived 程序自身是否正常,比如是否正常向 224.0.0.18 发送组播,可以防止脑裂。 此配置块是独立的,也就是说它是*配置块,需要顶满格写。注意:需要至少有一个实例配置使用此脚本,此脚本才会运行。

track_script 用于添加一个跟踪脚本到 VRRP 实例中,这个脚本就是 vrrp_script 配置块中定义的,用于监控 VRRP 实例是否正常。

1 vrrp_script

vrrp_script <SCRIPT_NAME> {
           #要执行的脚本的路径, 假如有参数,使用双引号引起来 quoted 是双引号的意思
           script <STRING> | <QUOTED-STRING>

           # 脚本调用之间的秒数(默认值:1秒)
           interval <INTEGER>

           # 多少秒后,脚本被视为执行失败
           timeout <INTEGER>

           #通过此权重调整优先级,(默认值:0)
           #有关反转的描述,请参见track_script。
           #'weight 0 reverse' 将在脚本启动时导致vrrp实例关闭,反之亦然。。
           weight <INTEGER:-253..253> [reverse]

           #进行OK转换所需的成功次数
           rise <INTEGER>

           #KO转换所需的成功次数
           fall <INTEGER>

           #用这里设置的用户名和组执行此脚本。
           #组默认为用户组
           user USERNAME [GROUPNAME]

           #假设脚本最初处于失败状态
           init_fail
       }

该脚本将每隔秒执行一次。

默认权重等于0,这意味着在脚本连续失败后,任何监视脚本的VRRP实例都将转换为故障状态。
此后,连续成功将导致VRRP实例退出故障状态,除非由于它们正在跟踪的其他脚本或接口而使它们也处于故障状态。

2 track_script

vrrp_instance <STRING> {
     ...略...
	 track_script {
	     <SCRIPT_NAME>
	 }
}

<SCRIPT_NAME> 是 vrrp_script 配置块中的名称,例如:

vrrp_script check_nginx{
 ...
}

track_script`<SCRIPT_NAME> 的值应该是 `check_nginx