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