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
# #

浙公网安备 33010602011771号