一、 基本说明
keepalived.conf是配置文件,其中描述所有的 Keepalived 关键字。
关键字需要放置在含有等级结构的块和子块中,每一层都由成对的大括号 {
和
}
组成。
注释使用 #
或 !
, 它们可放在一行的开头, 也可以放在一行中的任何地方,直到一行的结尾,都会被看做注释。
关键字 include
允许包含其他配置文件, 就行 Nginx 的配置文件一样。
下面的配置说明中的参数语法:
- 是
on
| off
| true
| false
| yes
| no
之一 - 是以秒为单位的时间值,包括小数秒,例如2.71828或3;计时器的分辨率是微
秒。
二、 配置文件结构
Keepalived 配置文件围绕一组配置块进行连接。
每个块都针对特定功能,并有专门的守护进程。
! Configuration File for keepalivedglobal_defs {全局配置块
}vrrp_instance VI_1 {vrrpd 实例配置块, 可以配置多个
}virtual_server 192.168.200.100 443 {LVS 配置块, 可以配置多个
}
三、 全局配置块
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#0 VIP#单播对等#VRRP版本2中的IPv6地址vrrp_strictvrrp_garp_interval 0.001vrrp_gna_interval 0.000001
}
四、 VRRPD 实例配置块
配置示例
vrrp_instance VI_1 { state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}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 &#43; LVS 应该设置这一部分&#xff0c;假如高可用针对的不是 LVS&#xff0c;则不需要设置此部分。
virtual_server 192.168.122.100 80 { delay_loop 6 lb_algo rr lb_kind DR protocol TCP real_server 192.168.122.10 80 {weight 1inhibit_on_failure TCP_CHECK { connect_port 80 connect_timeout 3 }}real_server 192.168.122.20 80 {weight 1inhibit_on_failureTCP_CHECK {connect_timeout 3connect_port 80}}
}
virtual_server 192.168.122.100 443 {delay_loop 6 lvs_sched rr lvs_method DR persistence_timeout 50 protocol TCP real_server 192.168.122.10 443 {weight 1inhibit_on_failureSSL_GET {url {path /digest ff20ad2481f97b1754ef3e12ecd3a9cc}url {path /mrtg/digest 9b3a0c85a887a256d6939da88aabd8cd}connect_timeout 3retry 3delay_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”指的是被调用脚本的完整路径。对于需要参数的脚本&#xff0c;路径和参数必须用双引号括起来。
六、VRRP script
vrrp_script
关键字用于设置检查脚本&#xff0c;主要是检查 keepalived 程序自身是否正常&#xff0c;比如是否正常向 224.0.0.18 发送组播,可以防止脑裂。 此配置块是独立的&#xff0c;也就是说它是顶级配置块&#xff0c;需要顶满格写。注意&#xff1a;需要至少有一个实例配置使用此脚本&#xff0c;此脚本才会运行。
track_script
用于添加一个跟踪脚本到 VRRP 实例中&#xff0c;这个脚本就是 vrrp_script
配置块中定义的&#xff0c;用于监控 VRRP 实例是否正常。
1 vrrp_script
vrrp_script <SCRIPT_NAME> {&#xff03;要执行的脚本的路径, 假如有参数&#xff0c;使用双引号引起来 quoted 是双引号的意思script <STRING> | <QUOTED-STRING>interval <INTEGER>timeout <INTEGER>&#xff03;通过此权重调整优先级&#xff0c;&#xff08;默认值&#xff1a;0&#xff09;&#xff03;有关反转的描述&#xff0c;请参见track_script。&#xff03;&#39;weight 0 reverse&#39; 将在脚本启动时导致vrrp实例关闭&#xff0c;反之亦然。。weight <INTEGER:-253..253> [reverse]&#xff03;进行OK转换所需的成功次数rise <INTEGER>&#xff03;KO转换所需的成功次数fall <INTEGER>&#xff03;用这里设置的用户名和组执行此脚本。&#xff03;组默认为用户组user USERNAME [GROUPNAME]&#xff03;假设脚本最初处于失败状态init_fail}
该脚本将每隔秒执行一次。
默认权重等于0&#xff0c;这意味着在脚本连续失败后&#xff0c;任何监视脚本的VRRP实例都将转换为故障状态。
此后&#xff0c;连续成功将导致VRRP实例退出故障状态&#xff0c;除非由于它们正在跟踪的其他脚本或接口而使它们也处于故障状态。
2 track_script
vrrp_instance <STRING> {...略...track_script {<SCRIPT_NAME>}
}
是 vrrp_script
配置块中的名称,例如&#xff1a;
vrrp_script check_nginx{...
}track_script&#96; 中 <SCRIPT_NAME> 的值应该是 &#96;check_nginx