keepalived.conf(5) Keepalived配置手册 keepalived.conf(5)
名称
keepalived.conf-Keepalived的配置文件
描述
keepalived.conf是描述所有Keepalived关键字的配置文件。 关键字放置在块和子块的层次结构中,每一层由“ {
”和“}”对分隔。
注释以“#”或“!”开头 到行尾,可以在一行中的任何地方开始。
关键字“ include”允许从主配置文件中或随后包含的文件中包含其他配置文件。
include指令的格式为:
include FILENAME
FILENAME可以是标准路径或相对路径名,并且可以包含通配符,如果glob()支持的话,可以包含csh样式的大括号表达式,例如“ {
foo / {
,cat,dog},bar}”。
打开包含文件后,当前目录将设置为文件本身的目录,因此文件包含的任何相对路径都相对于包含文件本身的目录。
注意:为了配置Keepalived,必须将本文档视为详尽的信息来源。 此文档由Keepalived核心团队支持和维护。
参数语法
<BOOL>是on | off | true | false | yes | no之一
<TIMER>是以秒为单位的时间值,包括小数秒,例如 2.71828或3; 计时器的分辨率为微秒。
脚本
可以配置要执行的三类脚本。
(a)通知当vrrp实例或vrrp组更改状态或虚拟服务器仲裁在向上和向下之间更改时运行的脚本。
(b)vrrp跟踪脚本会导致vrrp实例关闭,从而退出非零存在状态,或者如果指定了权重,则会对该vrrp实例的优先级添加权重或从中减去权重。
(c)LVS检查器杂项脚本,如果它们以非零状态退出,将导致配置实际服务器。
默认情况下,如果该用户存在,则脚本将由用户keepalived_script执行;如果不是,则由root用户执行,但可以为每个脚本指定要在其下执行的用户/组。
如果以root特权执行脚本,将对安全产生重大影响,尤其是如果脚本本身可以由非root用户修改或替换的话。 因此,在启动时进行安全检查,以确保如果脚本是由root用户执行的,则该脚本不能被非root用户修改或替换。
应该编写所有脚本,以便它们在收到SIGTERM信号后终止。 如果脚本的父级终止,则将向SIGTERM发送脚本,或者该脚本是keepalived等待退出状态且运行时间过长的脚本。
带引号的字符串
带引号的字符串在“个字符之间指定;更具体地说,如果后面有空格,则字符串将仅在带引号的字符串之后结束。例如:
"abcd" efg h jkl "mnop"
将是单个字符串“ abcd efg h jkl mnop”,即删除了嵌入的字符。
带引号的字符串也可以包含转义字符,例如shell。 \ a,\ b,\ E,\ f,\ n,\ r,\ t,\ v,\ nnn和\ xXX(其中nnn最多为3个八进制数字,而XX为任意十六进制数字序列)和\ 支持cC(产生字符C的控制版本)。 \ C对于任何其他字符C都只是被视为字符C的转义版本,因此\\是\字符,而\“将是”字符,但是不会以引号开头或结尾。
为了使用参数指定脚本,未加引号的空格将分隔参数。 如果要求参数包含空格,则应将其括在单引号(')中。
配置解析器
传统上,配置文件解析器并不是保持连接的优势之一。 即使这不是该项目的主要目标,也已经付出了很多努力来纠正此问题。
最高层级
Keepalived配置文件围绕一组配置块进行连接。 每个模块都将重点放在特定的守护程序系列功能上。 这些功能是:
全局配置
BFD配置
VRRPD配置
LVS配置
全局配置
包含全局定义,Linkbeat接口,静态跟踪组,静态地址,静态路由和静态规则的子块
全局定义
# 以下是用于在单独的网络名称空间中运行keepalived的全局守护程序工具:
# --
# 设置要运行的网络名称空间。目录/ var / run / keepalived将被创建为一个非共享的挂载点,例如pid文件。syslog条目将在名称后附加_NAME。注意:无法在重新加载配置时更改名称空间。
net_namespace NAME
# 在指定的网络名称空间中添加IPVS配置。 它允许轻松地在给定名称空间上拆分VIP流量,并将运行状况检查流量保留在另一个名称空间中。 如果未指定NAME,则将使用默认名称空间。
net_namespace_ipvsNAME
# 在Linux 3.13之前,ipsets尚不知道网络名称空间,因此,如果使用#早期版本的内核运行,则默认情况下,如果未使用名称空间且未指定vrrp_ipsets,则禁用ipsets。 此选项将覆盖默认值,并允许ipset与3.13之前的内核上的命名空间一起使用。
namespace_with_ipsets
#如果在同一名称空间中运行多个keepalived实例,则将在/ var / run / keepalived中创建带有NAME作为文件名一部分的pid文件。
注意:无法在重新加载配置时更改实例名称
instance NAME
# 在/ var / run / keepalived中创建pid文件
use_pid_dir
# 使用ETHTOOL,MII或ioctl接口进行轮询以检测媒体链接故障,否则使用netlink接口。
linkbeat_use_polling
# 主进程允许子进程在终止时退出的时间(以秒为单位)。 对于非常大的配置,可能需要这样做。(默认值:5)
child_wait_time SECS
# 全局定义配置块
global_defs {
# 将keepalived进程的进程名称设置为默认值:keepalived,keepalived_vrrp,keepalived_ipvs,keepalived_bfd process_names
# 指定各个进程名称
process_name NAME
vrrp_process_name NAME
ipvs_process_name NAME
bfd_process_name NAME
# 启动脚本和关闭脚本分别运行一次,分别在运行任何子进程之前启动keepalived,以及在所有子进程终止之后终止keepalived。
# 添加此功能的最初动机是,尽管keepalived可以使用防火墙标记来设置IPVS配置,但没有机制可以添加配置以设置防火墙标记(或之后将其删除)。
# 如果使用iptables(请参阅下面的vrrp_iptables选项),修改接口设置或可以通过脚本或程序完成的任何其他操作,则此功能还可用于设置所需的iptables框架。
# 只能指定一个启动脚本和一个关闭脚本。
# 超时(以秒为单位,默认为10秒)是脚本运行所允许的时间。 如果超时到期,脚本将被杀死(这是为了停止keepalived挂起以等待脚本终止)。
startup_script SCRIPT_NAME [username [groupname]]
startup_script_timeout SECONDS # 范围 [1,1000]
shutdown_script SCRIPT_NAME [username [groupname]]
shutdown_script_timeout SECONDS # 范围 [1,1000]
# 电子邮件收件人:
notification_email {
admin@example1.com
...
}
# 发件人(默认:keepalived @ <本地主机名>)
notification_email_from admin@example.com
# 用于发送通知电子邮件的远程SMTP服务器。IP地址或域名以及可选的端口号。(默认端口号:25)
smtp_server 127.0.0.1 [<PORT>]
# 在HELO消息中使用的名称。(默认:本地主机名)
smtp_helo_name <STRING>
# SMTP服务器连接超时(以秒为单位)。
smtp_connect_timeout 30
# 设置所有smtp_alerts的默认状态
smtp_alert <BOOL>
# 设置vrrp smtp_alerts的默认状态
smtp_alert_vrrp <BOOL>
# 设置检查smtp警报的默认状态
smtp_alert_checker <BOOL>
# 设置在检查时记录所有检查失败的日志
checker_log_all_failures <BOOL>
# 不要发送故障情况的SMTP警报
no_email_faults
# 标识机器的字符串(不必是主机名)。(默认:本地主机名)
router_id <STRING>
# 用于IPv4 VRRP广告的组播组
# (default: 224.0.0.18)
vrrp_mcast_group4 224.0.0.18
# 用于IPv6 VRRP广告的组播组
# (default: ff02::12)
vrrp_mcast_group6 ff02::12
# 设置静态地址的默认接口。
# (default: eth0)
default_interface p33p1.3
# IPVS内核代码提供的同步守护程序一次仅支持一个主服务器和一个备份守护程序实例来同步IPVS连接表。
# 有关同步守护程序的更多详细信息,请参见ipvsadm(8)手册页。
# 参数是绑定接口,并且是可选的:
# inst VRRP_INSTANCE(为了向后兼容,可以省略inst)为lvs syncd的syncid(0到255),默认为vrrp实例的VRID,如果没有vrrp实例maxlen(1..65507)最大包长度(限制为mtu- 20-8)端口(1..65535)要使用的UDP端口号,默认8848 ttl(1..255)组-组播组地址(IPv4或IPv6),默认224.0.0.81如果未指定VRRP_INSTANCE,则两个主 只要keepalived运行,备份同步守护程序就会运行,否则同步守护程序的主/备份状态将跟踪指定的vrrp实例的状态:如果vrrp实例处于主状态,则只有主同步守护程序才能运行。 vrrp实例不是主实例,仅备份同步守护程序将运行。
# 注意:maxlen,port,ttl和group仅在Linux 4.3或更高版本上可用。
# 有关控制IPVS和同步守护程序的参数的详细信息,请参见内核源文档doc / Documentation / networking / ipvs-sysctl.txt。
# / proc / net / ip_vs *提供有关IPVS状态的一些详细信息。
lvs_sync_daemon <INTERFACE> [[inst] <VRRP_INSTANCE>] [id <SYNC_ID>] \
[maxlen <LEN>] [port <PORT>] [ttl <TTL>] [group <IP ADDR>]
# 启动时刷新任何现有的LVS配置
lvs_flush
# 在关闭时刷新剩余的LVS配置如果指定了VS,则在不显式删除实际服务器的情况下删除每个keepalived托管虚拟服务器(内核将删除它们)。
lvs_flush_onstop [VS]
# 过渡到MASTER后,第二套免费ARP的延迟。以秒为单位,0表示没有第二组。
# (default: 5)
vrrp_garp_master_delay 10
# 过渡到MASTER后一次发送的免费ARP消息数。
# (default: 5)
vrrp_garp_master_repeat 1
# MASTER收到较低优先级的广告后,第二组免费ARP的延迟。
vrrp_garp_lower_prio_delay 10
# 在MASTER收到较低优先级的广告后,一次发送的免费ARP消息的数量。
vrrp_garp_lower_prio_repeat 1
# 刷新免费ARP的最短时间间隔,同时以秒为单位的MASTER。
# (default: 0 (没有刷新))
vrrp_garp_master_refresh 60
# 在MASTER时一次发送的免费ARP消息数
# (default: 1)
vrrp_garp_master_refresh_repeat 2
# 在接口上发送的免费ARP消息之间的延迟(以毫秒为单位),以秒为单位(分辨率usecs)。
# (default: 0)
vrrp_garp_interval 0.001
# 在接口上发送的自发NA消息之间的延迟(以毫秒为单位),十进制,秒(分辨率usecs)。
# (default: 0)
vrrp_gna_interval 0.000001
# 默认情况下,keepalived一次发送5则ARP / NA消息,过渡到MASTER后,在5秒后发送第二个5消息块。
# 对于现代交换机,这是没有必要的,因此设置vrrp_min_garp只会导致发送一条ARP / NA消息,并且5秒钟后不再重复。
vrrp_min_garp [<BOOL>]
# 如果收到优先级较低的广告,请不要发送其他广告。这会导致遵循RFC。 除非设置strict_mode,否则默认为false。
vrrp_lower_prio_no_advert [<BOOL>]
# 如果我们是主广告并收到较高优先级的广告,请先发送广告(其优先级将低于其他主广告),然后再过渡到备用广告。 这意味着,如果另一个主服务器设置了garp_lower_priority_repeat,它将重新发送garp消息。
#这是为了解决他们同时担任两个主服务器的问题,最后看到的GARP消息来自我们。
vrrp_higher_prio_send_advert [<BOOL>]
# 设置要使用的默认VRRP版本(默认值:2,但IPv6实例将使用版本3)
vrrp_version <2 or 3>
# keepalived使用防火墙(nftable或iptables)有两个目的:
# i) 实现no_accept模式
# ii) 停止在VMAC接口上发送IGMP / MLD数据包,并将其移动到基础接口上。
# 如果同时指定了vrrp_iptables和vrrp_nftables,则keepalived将使用nftable而不是iptables。 同样,如果iptables命令正在生成nftables配置,或者未安装iptables命令,则keepalived将使用nftables而不是iptables。
# 如果既未指定vrrp_nftables也没有指定vrrp_iptables,但正在使用VMAC或指定了no_accept,则keepalived将使用nftables(如果可用)。
# 使用nftables作为防火墙。
# TABLENAME一定不存在,并且对于在同一网络名称空间中运行的每个keepalived实例,必须不同。
# 默认表名为keepalived,优先级为-1。
# keepalived将在表中创建基链。
# counters表示将计数器添加到规则中(主要用于调试目的)。
# ifindex表示使用ifindex而不是ifnames创建IPv6链接本地集。 除非vrrp_instance设置了dont_track_primary,否则这是默认设置。 替代方法是使用接口名称作为set键的一部分,但是v0.8.3之前的nft实用程序将无法正确输出接口名称。
nftables [TABLENAME]
nftables_priority PRIORITY
nftables_counters
nftables_ifindex
# 使用iptables作为防火墙。
# 注意:指定链必须存在于iptables和/或ip6tables配置中,并且必须从iptables配置中的适当位置调用该链。
# 在接受任何ESTABLISHED,RELATED数据包之后,可能有必要进行此过滤,因为IPv4可能会选择VIP作为传出连接的源地址。
# (default: INPUT)
vrrp_iptables keepalived
# 或也适用于出站过滤注意,出站过滤不适用于IPv4,因为可以将VIP选择为出站连接的源地址。 对于IPv6,这是不可能的,因为地址已弃用。
vrrp_iptables keepalived_in keepalived_out
# 或使用默认链(INPUT和OUTPUT)
vrrp_iptables
# Keepalived可以选择将ipset与iptables结合使用。 如果是这样,则可以指定ipset名称,默认值如下。 如果未指定名称,将不使用ipsets,否则将通过在先前指定的名称上添加“ _if”和/或“ 6”和_igmp / _mld来构造任何省略的名称。
vrrp_ipsets [keepalived [keepalived6 [keepalived_if6 [keepalived_igmp [keepalived_mld]]]]]
# 以下内容可以检查在单播模式下,VRRP数据包的源地址是我们的单播对等方之一。
vrrp_check_unicast_src
# 检查收到的VRRP广告中的所有地址可能很耗时。 设置此标志意味着,如果广告与先前收到的广告来自同一主路由器,则不会进行检查。
# (default:不要跳过)
vrrp_skip_check_adv_addr
# 强制严格遵守VRRP协议。 这将禁止:
# 0 VIP
# 单播对等
# VRRP版本2中的IPv6地址
vrrp_strict
# 在通知FIFO上发送vrrp实例优先级通知。
vrrp_notify_priority_changes <BOOL>
# 如果vrrp,checker或bfd进程超时,则可以使用以下选项。 即使主服务器仍在运行,备用vrrp实例也将成为主服务器,这可以看出这一点,因为主服务器或备份系统太忙而无法处理vrrp数据包。
# --
# keepalived可以在计时器到期后立即检测到运行不充分的情况下,提高优先级,首先切换到实时调度,如果不够,则每次将其实时优先级提高一 检测到进一步的运行延迟。 如果启用了实时调度,则将使用{bfd,checker,vrrp} _rlimit_rttime的值设置RLIMIT_RTTIME(请参见下文)。 对于较慢的处理器,可能需要增加这些值。
# --
# 要限制最大的自动优先级增加值,请指定以下内容(0不使用自动优先级增加,它是默认值。-1在启动时禁用警告消息)。 忽略优先级可设置最大值。
max_auto_priority [<-1 to 99>] # 99实际上是sched_get_priority_max(SCHED_RR)
# 计时器到期后,在计划keeplalive之前的最小延迟(以微秒为单位),之后进程优先级将自动递增(默认值为1000000 uscs(1秒),最大值为10000000(10秒))
min_auto_priority_delay <delay in usecs>
# 设置vrrp子进程优先级(负值增加优先级)
vrrp_priority <-20 to 19>
# 设置检查程序子进程的优先级
checker_priority <-20 to 19>
# 设置BFD子进程优先级
bfd_priority <-20 to 19>
# 将vrrp子进程设置为不可交换
vrrp_no_swap
# 将检查器子进程设置为不可交换
checker_no_swap
# 设置BFD子进程不可交换
bfd_no_swap
# 以下选项可用于强制vrrp,checker和bfd进程在受限制的CPU集上运行。
# 您可以将进程绑定到单个CPU或定义一组CPU。 在最后一种情况下,Linux内核将在调度期间限制为该CPU集。 强制将进程绑定到单个CPU可以提高重载盒的性能。
# 以下配置关键字的INTEGER表示cpu_id,如“处理器”行上的/ proc / cpuinfo中所示:
# --
# 为vrrp子进程设置CPU亲和力
vrrp_cpu_affinity <INTEGER> [<INTERGER>]...[<INTEGER>]
# 为检查程序子进程设置CPU亲和力
checker_cpu_affinity <INTEGER> [<INTERGER>]...[<INTEGER>]
# 为bfd子进程设置CPU亲和力
bfd_cpu_affinity <INTEGER> [<INTERGER>]...[<INTEGER>]
# 将vrrp子进程设置为以指定的优先级使用实时调度
vrrp_rt_priority <1..99>
# 将检查程序子进程设置为以指定的优先级使用实时调度
checker_rt_priority <1..99>
# 将BFD子进程设置为以指定的优先级使用实时调度
bfd_rt_priority <1..99>
# 设置阻止系统调用之间的CPU时间限制(以微秒为单位)
# (default: 10000)
vrrp_rlimit_rttime >=2
checker_rlimit_rttime >=2
bfd_rlimit_rttime >=2
# 如果Keepalived已使用SNMP支持进行构建,则可以使用以下关键字。
# 注意:Keepalived,checker和RFC支持可以单独启用/禁用
# --
# 指定用于连接到SNMP主代理的套接字(有关更多详细信息,请参见源模块keepalived / vrrp / vrrp_snmp.c)(默认值:unix:/ var / agentx / master)
snmp_socket udp:1.2.3.4:705
# 启用KEEPALIVED MIB的vrrp元素的SNMP处理
enable_snmp_vrrp
# 启用KEEPALIVED MIB的检查器元素的SNMP处理
enable_snmp_checker
# 启用RFC2787和RFC6527 VRRP MIB的SNMP处理
enable_snmp_rfc
# 启用RFC2787 VRRP MIB的SNMP处理
enable_snmp_rfcv2
# 启用RFC6527 VRRP MIB的SNMP处理
enable_snmp_rfcv3
# 启用SNMP陷阱
enable_traps
# 如果Keepalived已在DBus支持下构建,则可以使用以下关键字。
# --
# 启用DBus界面
enable_dbus
# DBus服务的名称,如果您想在启用DBus的情况下运行多个保持活动的进程,则很有用
# (default: org.keepalived.Vrrp1)
dbus_service_name SERVICE_NAME
# 指定要在其下运行脚本的默认用户名/组名。
# 如果未指定此选项,则如果该用户存在,则用户默认为keepalived_script,否则为root。
# 如果未指定groupname,则默认为用户的组。
script_user username [groupname]
# 如果路径的任何部分都可由非root用户写入,则不要运行配置为root用户运行的脚本。
enable_script_security
# 无需使用通知脚本,而是指定fifo可以更高效地处理通知事件,并保证将按正确的顺序进行传递。
# 注意:FIFO名称必须全部不同
# --
# FIFO将通知事件写入到有关输出格式的信息,请参见vrrp_notify_fifo和lvs_notify_fifo。有关更多详细信息,请参见vrrp_sync_group下的描述。
# 有关示例用法,请参阅doc / samples / sample_notify_fifo.sh。
notify_fifo FIFO_NAME [username [groupname]]
# 由keepalived运行以处理通知事件的脚本FIFO名称将作为最后一个参数传递给脚本
notify_fifo_script STRING|QUOTED_STRING [username [groupname]]
# FIFO写入vrrp通知事件。
# 写入的字符串将是以下格式的行:INSTANCE“ VI_1” MASTER 100,并且将以新的行字符终止。
# 有关输出的更多详细信息,请参阅vrrp_sync_group和doc / samples / sample_notify_fifo.sh下的说明以获取示例用法。
vrrp_notify_fifo FIFO_NAME [username [groupname]]
# 由keepalived运行以处理vrrp通知事件的脚本FIFO名称将作为最后一个参数传递给脚本
vrrp_notify_fifo_script STRING|QUOTED_STRING [username [groupname]]
# 将FIFO写入通知healthchecker事件的FIFO将写入以下形式的行:
# VS [192.168.201.15]:tcp:80 {UP|DOWN}
# RS [1.2.3.4]:tcp:80 [192.168.201.15]:tcp:80 {UP|DOWN}
# 并将以换行符终止。
lvs_notify_fifo FIFO_NAME [username [groupname]]
# 由keepalived运行以处理healthchecher通知事件的脚本FIFO名称将作为最后一个参数传递给脚本
lvs_notify_fifo_script STRING|QUOTED_STRING [username [groupname]]
# 允许配置包括启动时不存在的接口。
# 这允许keepalived与可能被删除和还原的接口一起使用,并且还允许在VMAC接口上使用虚拟和静态路由以及规则。
# allow_if_changes允许删除接口并使用其他类型或基础接口重新创建接口,例如从vlan更改为macvlan或将macvlan从eth1更改为eth2。 如果未设置allow_if_changes,则主要用于在启动时报告重复的VRID错误。
dynamic_interfaces [allow_if_changes]
# 仅在大型配置中需要以下选项,在大型配置中,keepalived会创建大量接口,或者系统具有大量接口。 仅当在系统日志中看到“ Netlink:Receive buffer overrun(接收缓冲区溢出)”消息时,才需要使用这些选项。
# 如果所需的缓冲区大小超过/ proc / sys / net / core / rmem_max中的值,则需要设置相应的force选项。
# --
keepalived.conf配置手册译文
最新推荐文章于 2024-04-19 15:36:07 发布