设置主机名称
[root@localhost keepalived]# hostnamectl set-hostname node1
[root@localhost keepalived]# hostname
node1
[root@localhost data]# hostnamectl set-hostname node2
[root@localhost data]# hostname
node2
keepalived源码版本
[root@node2 ~]# ll /data/keepalived-2.1.3.tar.gz
-rw-r--r-- 1 root root 1077888 Jul 1 19:55 /data/keepalived-2.1.3.tar.gz
主机ip配置情况
[root@node1 ~]# ip a|grep inet|grep -v inet6|grep -v '127.0.0.1'
inet 192.168.73.142/24 brd 192.168.73.255 scope global ens33
[root@node2 ~]# ip a|grep inet|grep -v inet6|grep -v '127.0.0.1'
inet 192.168.73.141/24 brd 192.168.73.255 scope global ens33
主机防火请及selinux均关闭
依赖包安装
[root@node1 ~]# yum install openssl openssl-devel -y
解压,编译,安装
[root@node1 data]# tar -xvf keepalived-2.1.3.tar.gz
[root@node1 data]# mkdir keepalived
[root@node1 data]# cd /data/keepalived-2.1.3
[root@node1 keepalived-2.1.3]# ./configure --prefix=/data/keepalived
[root@node1 keepalived-2.1.3]# make && make install
配置keepalived配置文件
global_defs {
router_id maiya #路由id,不能重复
}
vrrp_instance lvs_inst { #定义vrrp实例名
state BACKUP #定义vrrp角色,分为MASTER/BACKUP两种
interface ens33 #指定网络接口名
virtual_router_id 51 #同一组的vrrp成员,该id需要一致
priority 150 #优先级,范围(0-255)
nopreempt #不抢占(只针对BACKUP生效)
advert_int 1 #发送hello的时间间隔
authentication { #通过密码身份验证
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #定义虚拟IP(VIP)
192.168.73.145
}
}
virtual_server 192.168.73.145 80 { #定义VIP相关配置
delay_loop 6 #延迟循环
lb_algo rr #使用rr调度算法(rr|wrr|lc |wlc|lblc|sh|dh)
lb_kind DR #使用DR模式 (DR/NAT/TUN)
persistence_timeout 50 #定义persistence保持时间
protocol TCP #tcp协议
real_server 192.168.73.142 80 { #定义real_server
weight 1 #weight权重为1
TCP_CHECK { #定义checker的方法(TCP/HTTP/SSL/MISC)
connect_port 80 #定义tcp的port
connect_timeout 3 #定义本次连接的超时时长为3s
nb_get_retry 3 #定义尝试3次,如果3次都失败则宣告本real_server失效
delay_before_retry 3 #定义重连接间隔时间为3s
}
}
real_server 192.168.73.141 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
启动
[root@node1 keepalived]# /data/keepalived/sbin/keepalived -f /data/keepalived/etc/keepalived/keepalived.conf
[root@node1 keepalived]# ps -ef | grep keep
root 11322 1 0 20:55 ? 00:00:00 /data/keepalived/sbin/keepalived -f /data/keepalived/etc/keepalived/keepalived.conf
root 11323 11322 0 20:55 ? 00:00:00 /data/keepalived/sbin/keepalived -f /data/keepalived/etc/keepalived/keepalived.conf
root 11324 11322 0 20:55 ? 00:00:00 /data/keepalived/sbin/keepalived -f /data/keepalived/etc/keepalived/keepalived.conf
root 11326 5104 0 20:55 pts/0 00:00:00 grep --color=auto keep
[root@node1 keepalived]# ip a
node2配置文件内容
global_defs {
router_id maiyah #路由id,不能重复
}
vrrp_instance lvs_inst { #定义vrrp实例名
state BACKUP #定义vrrp角色,分为MASTER/BACKUP两种
interface ens33 #指定网络接口名
virtual_router_id 51 #同一组的vrrp成员,该id需要一致
priority 100 #优先级,范围(0-255)
nopreempt #不抢占(只针对BACKUP生效)
advert_int 1 #发送hello的时间间隔
authentication { #通过密码身份验证
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #定义虚拟IP(VIP)
192.168.73.145
}
}
virtual_server 192.168.73.145 80 { #定义VIP相关配置
delay_loop 6 #延迟循环
lb_algo rr #使用rr调度算法(rr|wrr|lc |wlc|lblc|sh|dh)
lb_kind DR #使用DR模式 (DR/NAT/TUN)
persistence_timeout 50 #定义persistence保持时间
protocol TCP #tcp协议
real_server 192.168.73.142 80 { #定义real_server
weight 1 #weight权重为1
TCP_CHECK { #定义checker的方法(TCP/HTTP/SSL/MISC)
connect_port 80 #定义tcp的port
connect_timeout 3 #定义本次连接的超时时长为3s
nb_get_retry 3 #定义尝试3次,如果3次都失败则宣告本real_server失效
delay_before_retry 3 #定义重连接间隔时间为3s
}
}
real_server 192.168.73.141 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[root@node2 keepalived]# /data/keepalived/sbin/keepalived -f /data/keepalived/etc/keepalived/keepalived.conf
[root@node2 keepalived]# ps -ef | grep keep
root 10591 1 0 21:04 ? 00:00:00 /data/keepalived/sbin/keepalived -f /data/keepalived/etc/keepalived/keepalived.conf
root 10592 10591 0 21:04 ? 00:00:00 /data/keepalived/sbin/keepalived -f /data/keepalived/etc/keepalived/keepalived.conf
root 10593 10591 0 21:04 ? 00:00:00 /data/keepalived/sbin/keepalived -f /data/keepalived/etc/keepalived/keepalived.conf
root 10606 2713 0 21:04 pts/0 00:00:00 grep --color=auto keep
[root@node2 keepalived]# ip a
测试IP漂移
[root@node1 keepalived]# ps -ef |grep keepalive|grep -v grep|awk '{print $2}'|xargs kill -9
[root@node1 keepalived]# ps -ef | grep keep
root 11512 5104 0 23:07 pts/0 00:00:00 grep --color=auto keep
[root@node1 log]# ip a
不推荐使用的文档
Keepalived源代码带有一个sphinx docset。此内容必须被视为已弃用,因为它在某些部分是部分的,不能反映可用的全部功能集。下面的文档是目前最好的文档,它完美地反映和记录了每个可用的功能。
保持配置手册页
已保存.conf(5) 保持配置手册已保存.conf(五)
NAME
keepalived.conf - Keepalived的配置文件
DESCRIPTION
已保存.conf配置文件是
描述所有保持的关键字。关键字放在层次结构中-
块和子块的chie,每个层用{'和
“}”对。
注释以“#”或“!”开头到了队伍的尽头,就可以开始了
一条线上的任何地方。
关键字“include”允许包含其他配置文件
从主配置文件中,或从随后包含的
文件夹。
include指令的格式为:
include FILENAME
文件名可以是完全限定的或相对的路径名,并且可以包括
通配符,包括csh样式的大括号表达式,例如
“{foo/{,cat,dog},bar}”,如果glob()支持它们。
打开包含的文件后,当前目录设置为
文件本身的目录,因此
文件相对于包含文件本身的目录。
注:本文件必须视为
详尽的信息源,以便配置Keepalived。这个
文档由Keepalived核心团队支持和维护。
PARAMETER SYNTAX
分数秒,例如2.71828或3;计时器的分辨率为微秒-
秒。
SCRIPTS
有三类脚本可以配置为执行。
(a) 通知在vrrp实例或vrrp组时运行的脚本
更改状态,或虚拟服务器仲裁在启动和关闭之间更改。
(b) vrrp跟踪脚本将导致vrrp实例停止运行
它们退出非零存在状态,或者如果指定了权重,则将添加
或者从该vrrp实例的优先级中减去权重。
(c) LVS checker其他脚本将导致一个真正的服务器是con-
如果他们以非零状态退出。
默认情况下,如果
该用户存在,或者如果不是根用户,而是每个脚本的用户/组
可以指定要在其下执行的。
如果执行脚本,则会产生重大的安全隐患
具有root权限,尤其是脚本本身是modifi时-
非根用户可以或可替换。因此,安全检查
在启动时生成,以确保如果脚本由根执行,
那么它就不能被非根用户修改或替换。
所有的脚本都应该编写好,以便在收到
信号。脚本将被发送到SIGTERM如果它们的父termi-
或者它是一个脚本keepalived正在等待其退出状态,并且
它已经运行太久了。
Quoted strings
带引号的字符串在“字符”之间指定;更具体地说是
如果有空格,字符串将只在带引号的字符串之后结束
之后。例如:
“efg h jkl”mnop“efg h jkl”mnop
将是单个字符串“abcd efg h jkl mnop”,即嵌入的
删除字符。
类似shell的字符串也可以有转义字符。\答:,
\b、 \E、\f、\n、\r、\t、\v、\nnn和\xXX(其中nnn最多为3个八进制
数字,XX是任何十六进制数字序列)和\cC(产生
字符C)的控制版本都受支持。\C代表其他
字符C只是作为字符C的转义版本,所以\\
是一个\字符,而\“将是”字符,但它不会开始或
终止带引号的字符串。
对于使用参数指定脚本,不带引号的空格将分开
参数。如果参数需要包含空格,
它应该用单引号(')括起来。
CONFIGURATION PARSER
传统上,配置文件解析器不是
保持活力的力量。为了纠正这一点已经付出了很多努力
即使这不是项目的首要目标。
TOP HIERACHY
Keepalived配置文件是围绕一组配置-
行动块。每个块都在聚焦和瞄准一个特定的守护进程
家族特征。这些功能包括:
GLOBAL CONFIGURATION
BFD CONFIGURATION
VRRPD CONFIGURATION
LVS CONFIGURATION
GLOBAL CONFIGURATION
包含全局定义的子块,Linkbeat接口,
静态跟踪组、静态地址、静态路由和
静态规则
Global definitions
#以下是全球守护进程运行设施
在一个单独的网络名称空间:
# keepalive
# --
#设置网络名称空间中运行。
#目录/var/run/keepalived将创建一个
#非共享的挂载点,例如pid文件。
# syslog条目将_NAME添加到鉴别。
#注意:名称空间配置重载不能改变。
net_namespace NAME
#添加ipv配置指定的网络名称空间中。
#将VIP交通在给定名称空间并保持healthcheck流量
#在另一个名称空间。
将使用#。
net_namespace_ipvsNAME
# ipsets网络名称空间不知道直到Linux 3.13,所以
#如果运行#早期版本的内核,默认情况下
#使用ipsets如果使用一个名称空间和vrrp_ipsets是禁用的
#没有指定。
#允许使用名称空间ipsets内核3.13。
namespace_with_ipsets
#如果keepalive的多个实例运行在相同的名称空间,
#这将创建pid文件名称作为文件名的一部分,
在/var/run/keepalived #。
#注意:实例名配置重载不能改变
instance NAME
#创建在/var/run/keepalived pid文件
use_pid_dir
#调查检测使用ETHTOOL媒体链接失败,信息产业部或ioctl接口
#否则使用netlink接口。
linkbeat_use_polling
#时间主要过程允许终止子进程退出
#在几秒钟内。
#(默认值:5)
child_wait_time SECS
#全球定义配置块
global_defs {
# keepalive流程的流程名称设置为默认值:
# keepalive、keepalived_vrrp keepalived_ipvs keepalived_bfd
process_names
#指定单个过程的名称
process_name NAME
vrrp_process_name NAME
ipvs_process_name NAME
bfd_process_name NAME
#启动和关闭脚本运行一次,当keepalive开始
#在任何子进程运行,当keepalive停止之后
分别#所有的子进程终止。
#添加这个特性的原始动机,虽然
# keepalive可以使用防火墙标志,设置ipv配置
#没有添加配置机制设置防火墙
#(或删除它之后)。
#这一特性也可以用来安装iptables所需的框架
#如果使用iptables(参见下面的vrrp_iptables选项),修改界面
#设置,或其他任何可以从脚本或程序完成。
#只有一个启动脚本,可以指定一个关闭脚本。
#超时(秒默认10秒)是允许的时间
#脚本运行;
#是停止keepalive挂等待脚本终止)。
startup_script SCRIPT_NAME [username [groupname]]
startup_script_timeout SECONDS # range [1,1000]
shutdown_script SCRIPT_NAME [username [groupname]]
shutdown_script_timeout SECONDS # range [1,1000]
#设置电子邮件:通知
notification_email {
[email protected]
...
}
#邮件地址将在头
#(默认值:keepalived@ <本地主机名>)
notification_email_from [email protected]
#远程SMTP服务器用于发送通知邮件。
#的IP地址或域名与可选的端口号。
#(默认端口号:25)
smtp_server 127.0.0.1 [
#名称用在直升机的消息。
#(默认值:本地主机名)
smtp_helo_name
# SMTP服务器连接超时秒。
smtp_connect_timeout 30
#设置为所有smtp_alerts默认状态
smtp_alert
#设置默认状态为vrrp smtp_alerts
smtp_alert_vrrp
#检查器smtp_alerts设置默认状态
smtp_alert_checker
#设置日志记录所有检查失败而检查器
checker_log_all_failures
#不要smtp发送警报错误条件
no_email_faults
#字符串识别机器(不需要主机名)。
#(默认值:本地主机名)
router_id
#多播组使用的IPv4 VRRP广告
#(默认值:224.0.0.18)
vrrp_mcast_group4 224.0.0.18
#多播组用于IPv6 VRRP广告
#(默认值:ff02:: 12)
vrrp_mcast_group6 ff02::12
#设置默认界面静态地址。
#(默认值:eth0)
default_interface p33p1.3
# ipv提供的同步守护进程的内核代码只支持
#一个主人和一个备份一次守护进程实例同步
# ipv连接表。
#看到ipvsadm(8)手册页获得更多细节的守护进程同步。
#参数绑定接口,可选:
#本月VRRP_INSTANCE(向后兼容性本月可以省略)
# syncid(0 - 255)为lv同步、违约的VRID vrrp实例,
#或0如果没有vrrp实例
# maxlen(1 . . 65507)最大分组长度(极限是mtu - 20 - 8)
#端口(1 . . 65535)使用UDP端口号,默认8848
# ttl (1 . . 255)
#集团-多播组地址(IPv4和IPv6),默认224.0.0.81
#如果没有指定VRRP_INSTANCE,主节点和备份守护进程同步
#将只要keepalive正在运行,否则守护进程同步
#主/备份状态跟踪指定的vrrp实例的状态:如果
# vrrp实例处于主状态,只有主同步守护进程运行,
#如果vrrp实例不是主人,只备份同步守护进程运行。
#注意:maxlen、端口、ttl和组只在Linux 4.3或更高版本。
#看内核源代码文档/文档/网络/ ipvs-sysctl。
#参数控制ipv和守护进程同步。
# /proc/net/ip_vs*提供一些细节ipv的状态。
lvs_sync_daemon
[maxlen
#冲任何现有的lv在启动时配置
lvs_flush
#冲剩下的lv配置关闭
#如果指定VS,删除每个keepalive虚拟管理
#服务器没有显式地删除(内核将真正的服务器
#删除它们)。
lvs_flush_onstop [VS]
#延迟后第二组无偿为过渡到主人。
#在几秒钟内,0为第二组。
#(默认值:5)
vrrp_garp_master_delay 10
#的ARP信息发送一次
#过渡到主人。
#(默认值:5)
vrrp_garp_master_repeat 1
#延迟后第二组无偿为低优先级
#广告收到当主人。
vrrp_garp_lower_prio_delay 10
#的ARP信息发送一次
#低优先级广告收到当主人。
vrrp_garp_lower_prio_repeat 1
#最小时间间隔刷新无偿为段时间的主人。
#在几秒钟内。
#(默认值:0(无刷新))
vrrp_garp_master_refresh 60
#的ARP信息发送时间的主人
#(默认值:1)
vrrp_garp_master_refresh_repeat 2
#延迟ARP信息发送到一个接口之间的女士
#小数,秒(分辨率购买)。
#(默认值:0)
vrrp_garp_interval 0.001
#延迟女士主动NA之间发送的消息的接口
#小数,秒(分辨率购买)。
#(默认值:0)
vrrp_gna_interval 0.000001
#默认keepalive发送5 gratuitions ARP / NA的消息
#时间,之后过渡到主发送第二个块
# 5 5秒后的消息。
与现代开关#这是不必要的,所以设置vrrp_min_garp
#原因只有一个ARP / NA消息发送,没有重复5秒
#。
vrrp_min_garp [
#如果接收到一个低优先级的广告,不要发送另一个广告。
#这导致坚持rfc。
# strict_mode设置。
vrrp_lower_prio_no_advert [
#如果我们掌握和接受一个更高的优先级广告,发送一个广告
#(较低的优先级比其他大师),在我们面前
#过渡到备份。
# garp_lower_priority_repeat集,它将重新发送garp消息。
#这是为了解决他们的问题已经两个同步
#大师,最后GARP从我们看到消息。
vrrp_higher_prio_send_advert [
#设置默认VRRP版本使用
#(默认值:2,但IPv6实例将使用版本3)
vrrp_version <2 or 3>
# keepalive使用防火墙(nftables或iptables)为两个目的:
#我)实现no_accept模式
# 2)停止IGMP / MLD VMAC接口发送的数据包,并移动
#到底层接口。
#如果vrrp_iptables和vrrp_nftables都指定,keepalive将使用
# nftables而不是iptables。
# nftables配置,或没有安装iptables命令,
# keepalive将使用nftables而不是iptables。
#如果没有vrrp_nftables或vrrp_iptables但是VMACs指定使用
#或者指定,no_accept keepalive将使用nftables(如果可用)。
#使用nftables作为防火墙。
#表名必须不存在,必须为每个不同
# keepalive实例运行在相同的网络名称空间。
#默认的表是keepalive,优先级为1。
# keepalive将创建链表中。
#计数器意味着计数器被添加到规则(主要为
#调试)。
# ifindex意味着创建IPv6连接本地使用ifindex而设置
比ifnames #。
#设置dont_track_primary。
#作为一组关键的一部分,但非功能性测试工具v0.8.3之前
#然后不能正常输出接口的名称。
nftables [TABLENAME]
nftables_priority PRIORITY
nftables_counters
nftables_ifindex
#使用iptables防火墙。
#注意:指定链的存在是很有必要的
# iptables和/或ip6tables配置和链
#从一个适当的调用点iptables配置。
#这可能会需要过滤后接受
#任何建立,相关数据包,因为IPv4可能选择的贵宾
#输出连接的源地址。
#(默认值:输入)
vrrp_iptables keepalived
#或出站过滤
#注意,出站过滤与IPv4行不通,因为贵宾
#选择作为一个外向的源地址连接。
#这不大可能,因为地址是弃用。
vrrp_iptables keepalived_in keepalived_out
#或使用默认链(输入和输出)
vrrp_iptables
# keepalive可能可以选择使用ipsets结合
# iptables。
#如下。
#否则任何省略名称将由添加“_if”
#和/或“6”和_igmp / _mld先前指定的名字。
vrrp_ipsets [keepalived [keepalived6 [keepalived_if6 [keepalived_igmp [keepalived_mld]]]]]
#以下可以检查在单播模式,
# VRRP数据包的源地址是我们的一个单播同行。
vrrp_check_unicast_src
#检查所有的地址收到VRRP广告时间
#消费。
#如果广告来自相同的主路由器前面的广告
#。
#(默认值:不要跳过)
vrrp_skip_check_adv_addr
#执行严格的合规VRRP协议。
# 0贵宾
#单播同行
在VRRP版本2 # IPv6地址
vrrp_strict
#发送vrrp实例优先通知通知fifo。
vrrp_notify_priority_changes
#以下选项可以使用如果vrrp,检查器或bfd流程
#超时。
#主即使主人仍在运行,因为主人或
#备份系统太忙处理vrrp包。
# --
# keepalive可以,如果它检测到不充分
#一个计时器到期终止后不久,增加其优先级,首先
#转向实时调度,如果这不是
#足够,它会增加实时优先级由一个
#时间检测运行进一步延迟。
启用了#调度,RLIMIT_RTTIME将被设置,使用的值
# {bfd、检查vrrp} _rlimit_rttime(见下文)。
#为缓慢增加处理器。
# --
#限制最大增加自动优先,指定以下
#(0不使用自动优先级增加时,默认。
#在启动时警告消息)。
max_auto_priority [<-1 to 99>] # 99 is really sched_get_priority_max(SCHED_RR)
#最小延迟毫秒计时器到期后keeplalived之前
#计划之后,进程的优先级将被自动递增
#(默认是1000000购买(1秒),最大的是10000000(10秒))
min_auto_priority_delay
#设置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,检查程序和bfd
#过程一组限制CPU上运行。
#你可以将进程绑定到单个CPU或定义一组
# cpu。
#设置在调度。
#增加重加载箱的性能。
#整数代表cpu_id以下配置关键字
#所示/proc/cpuinfo联机”处理器:“
# --
#设置vrrp CPU关联子进程
vrrp_cpu_affinity
#设置检查CPU关联子进程
checker_cpu_affinity
#设置bfd CPU关联子进程
bfd_cpu_affinity
#设置vrrp子进程使用的实时调度
#在指定优先级
vrrp_rt_priority <1..99>
#设置检查子进程使用的实时调度
#在指定优先级
checker_rt_priority <1..99>
#设置BFD子进程使用的实时调度
#在指定优先级
bfd_rt_priority <1..99>
#设置限制CPU时间之间阻塞的系统调用,
#以微秒为单位
#(默认:10000)
vrrp_rlimit_rttime >=2
checker_rlimit_rttime >=2
bfd_rlimit_rttime >=2
#如果keepalive构建了SNMP的支持,以下
#关键字是可用的。
#注意:keepalive,检查程序和RFC可以单独的支持
#启用/禁用
# --
#指定套接字用于连接到SNMP主代理
#(见源代码模块keepalive / vrrp / vrrp_snmp。
#(默认:unix: / var / agentx /硕士)
snmp_socket udp:1.2.3.4:705
#启用SNMP vrrp keepalive MIB的元素的处理
enable_snmp_vrrp
#启用SNMP keepalive MIB的格子元素的处理
enable_snmp_checker
#启用SNMP处理RFC2787和RFC6527 VRRP mib
enable_snmp_rfc
#启用SNMP处理RFC2787 VRRP MIB
enable_snmp_rfcv2
#启用SNMP处理RFC6527 VRRP MIB
enable_snmp_rfcv3
#启用SNMP陷阱
enable_traps
#如果keepalive一直建立在DBus支持下,以下
#关键字是可用的。
# --
#启用DBus接口
enable_dbus
# DBus服务的名字
#有用如果你想运行多个启用了DBus keepalive流程
#(默认值:org.keepalived.Vrrp1)
dbus_service_name SERVICE_NAME
#指定默认用户名/ groupname下运行脚本。
#如果没有指定这个选项,用户默认为keepalived_script
#如果用户存在,否则根。
#如果groupname没有指定,默认为用户的组。
script_user username [groupname]
#不要运行脚本配置为作为根用户运行如果任何路径的一部分
#由根用户可写的。
enable_script_security
#而不是使用通知脚本,指定一个fifo允许更多
#高效处理通知事件,保证他们
#将按正确的顺序排列好。
#注意:FIFO的名称都必须是不同的
# --
# FIFO写通知事件
#看到vrrp_notify_fifo lvs_notify_fifo格式的输出
#详情,请参阅vrrp_sync_group描述下。
#看到doc /样本/ sample_notify_fifo。
notify_fifo FIFO_NAME [username [groupname]]
#脚本由keepalive处理通知事件
# FIFO名称将作为最后一个参数传递给脚本的
notify_fifo_script STRING|QUOTED_STRING [username [groupname]]
# FIFO写vrrp通知事件。
#字符串写的将是一个行形式:实例“VI_1”大师100
#,与一个新行字符将被终止。
#输出的详情,请参见vrrp_sync_group描述下
#和doc /样本/ sample_notify_fifo。
vrrp_notify_fifo FIFO_NAME [username [groupname]]
#脚本由keepalive vrrp处理通知事件
# FIFO名称将作为最后一个参数传递给脚本的
vrrp_notify_fifo_script STRING|QUOTED_STRING [username [groupname]]
# FIFO写通知healthcheck事件
#字符串写的将是一个行形式:
# VS [192.168.201.15]: tcp: 80{上上|}
# RS(为1.2.3.4):tcp: 80 [192.168.201.15]: tcp: 80{上上|}
#,与一个新行字符将被终止。
lvs_notify_fifo FIFO_NAME [username [groupname]]
#脚本由keepalive healthchecher处理通知事件
# FIFO名称将作为最后一个参数传递给脚本的
lvs_notify_fifo_script STRING|QUOTED_STRING [username [groupname]]
#允许配置包括接口,在启动时是不存在的。
#这允许keepalive处理接口,可以删除和恢复
#还允许虚拟和静态路由规则VMAC接口。
# allow_if_changes允许删除和重新创建一个接口
#不同类型或底层接口,如从macvlan vlan
#或者改变macvlan eth2 eth1。
#报告重复VRID错误在启动时如果allow_if_changes不是集。
dynamic_interfaces [allow_if_changes]
#以下选项只需要配置大,要么
# keepalive创建大量的接口,或系统有一个很大的
#数量的接口。
#“Netlink:接收缓冲区溢出”消息是在系统日志中看到。
#如果所需的缓冲区大小超过/proc/sys/net/core/rmem_max的价值
#选择需要设置相应的力量。
# --
#设置netlink接收缓冲区大小。
#非常大的配置存在大量的界面,和
#的初始读接口对系统造成netlink缓冲区
#泛滥。
vrrp_netlink_cmd_rcv_bufs BYTES
vrrp_netlink_cmd_rcv_bufs_force
vrrp_netlink_monitor_rcv_bufs BYTES
vrrp_netlink_monitor_rcv_bufs_force
# vrrp netlink命令和监督检查命令和套接字
#和监测插座和过程监控缓冲区大小可独立设置。
#力国旗意味着使用SO_RCVBUFFORCE,缓冲区大小
#可以超过/proc/sys/net/core/rmem_max.
lvs_netlink_cmd_rcv_bufs BYTES
lvs_netlink_cmd_rcv_bufs_force
lvs_netlink_monitor_rcv_bufs BYTES
lvs_netlink_monitor_rcv_bufs_force
#作为一个指南1400年process_monitor_rcv_bufs过程终止
同时# 212992(默认在某些系统)是不够的,而
# 500000就足够了。
process_monitor_rcv_bufs BYTES
process_monitor_rcv_bufs_force
#打开套接字时,内核配置马克斯rx缓冲区大小
# /proc/sys/net/core/rmem_default的套接字。
#非常大,甚至通常比必要的。这可能是更大的
#这不是问题只要keepalive阅读所有排队的数据
#这是套接字,但是如果rmem_default设置足够大,如果
#某些原因keepalive停止阅读,它可以消耗掉所有系统内存。
# vrrp_rx_bufs_policy允许配置的rx当缓冲区大小
#套接字被打开。
#总接口的MTU *每个vrrp vrrp_rx_bufs_multiplier
#实例使用套接字。
#每个vrrp实例的总广告数据包大小*乘数。
#(默认值:使用系统默认值)
vrrp_rx_bufs_policy [MTU|ADVERT|NUMBER]
#(默认值:3)
vrrp_rx_bufs_multiplier NUMBER
#发送通知的真正的服务器在启动时启动
rs_init_notifies
#不发送电子邮件每一次真正的服务器检查更改状态;
#只发送电子邮件当一个真正的服务器添加或删除
no_checker_emails
#使用umask创建文件。
#或小数。
#默认umask IWGRP | IWOTH。
#命令行选项。
umask [NUMBER|BITS]
#在某些系统当债券接口创建时,他们可以通过流量
#,然后几秒差距时停止通过入站流量。
#可以意味着如果keepalive在引导时启动,即同时
#债券接口被创建,keepalive不接受广告,因此
#可以成为大师尽管实例优先发送广告。
#这个选项指定一个延迟秒前vrrp实例启动后
# keepalive开始,
vrrp_startup_delay 5.5
#以下将导致日志的收据VRRP广告VRIDs不配置
#在收到他们的接口。
log_unknown_vrids
#为$ {_RANDOM}指定随机种子,让重复的(默认配置
#是使用基于时间的种子,所以每次不同的配置
#将生成)。
random_seed UNSIGNED_INT
# reload_time_file允许重载的keepalive预定在未来。
#特别有用如果有主人keepalive keepalive和一个或多个备份
#实例和新配置不兼容以前的配置,
#如添加或删除贵宾会导致广告被拒绝。
#所有的实例都可以安排时间重新加载同时,从而确保
#不备份实例收到失配的广告。
# keepalive将监控的配置指定一个文件。
#文件必须包含一个有效的时间或日期/时间在下面的格式指定。
# keepalive启动时,它读取文件,如果存在,安排重新加载
#指定的时间。
#将安排重新加载。
#。
#在重载发生时通常指定的文件被删除,因为重载
#完成;
#忽略。
#重载,重载将定于24小时时间。
#文件删除默认(链接)。
#文件不删除,如果没有日期的文件只包含一个时间,然后
# keepalive将重载当时每天直到文件或删除
#修改。
#如果包含该文件的目录不存在在启动/重新加载,或者
#目录被删除或重命名,然后没有未来计划重新加载会发生之前
#手动(SIGHUP)重载或keepalive重启完成。
#进入定时器允许格式的文件正是:
# HH: MM: SS
# YY-MM-DD HH: MM: SS
# YYYY-MM-DD HH: MM: SS
#每一个可选的“Z”。
#必须没有前导或尾随空格,且只有一个日期之间的空间
#和时间。
#如果有一个“Z”结束的时候,与UTC时间解析,否则
#时间环境的作用是keepalive正在运行。
#系统被重新加载在不同的时区,它可能是更安全
# use UTC.
#如果使用本地时间与日光节约,小心,有时不存在
#有时是重复的,因此模糊。
reload_time_file ABSOLUTE-PATHNAME-OF-FILE
reload_repeat
}
Linkbeat interfaces
linkbeat_interfaces块允许指定哪些接口应该
通过MII、Ethtool或ioctl状态进行轮询,而不是依赖
netlink状态更新。这样可以更精确地控制全局
定义linkbeat_使用_轮询。
此选项优于不推荐使用的
linkbeat_在vrrp_实例块中使用_轮询,因为
后者只允许在
而track_接口和
虚拟IP地址和虚拟路由可能需要监视其他
接口,可能需要使用linkbeat轮询。
要使用的默认轮询类型是MII,除非在中不支持
在哪种情况下使用ETHTOOL,如果不支持,则ioctl
投票。可以使用MII指定要使用的首选轮询类型
或者在接口名称后使用ETHTOOL或IOCTL,但如果该类型不是
支持,将使用支持的类型。
linkbeat_接口的语法是:
linkbeat_interfaces {
eth2
enp2s0 ETHTOOL
}
Static track groups
静态轨迹组用于允许vrrp实例跟踪静态轨迹
地址、路线和规则。如果静态地址/路由/规则指定
如果地址/路线/规则已删除且不能
恢复后,vrrp实例将转换到故障状态。
轨迹组的语法为:
track_group GROUP1 {
group {
VI_1
VI_2
}
}
Static routes/addresses/rules
Keepalived可以配置静态地址、路由和规则。这些
地址不会被vrrpd移动,而是停留在
机器。如果您的计算机上已经有IP和路由
机器可以互相ping,你不需要这个部分。语法
对于规则和路由,与ip规则添加/ip路由添加相同
(除非短选项名称因歧义而不受支持)。这个
track_group规范是指一个命名的track_group,它列出了
将跟踪地址的vrrp实例,即如果地址是
删除的vrrp实例将转换为备份。
注意:因为没有首选项的规则可以按不同的顺序添加
由于vrrp实例从主实例转换到备份实例等,规则
需要有一个偏好。如果未指定首选项,则保持
会分配一个,但可能不是你想要的。
虚拟地址和虚拟路由的语法相同。如果没有
dev元素被指定,它默认为default_interface(default
eth0)。注:广播地址可以指定为“-”或“+”到
清除或设置地址的主机位。
如果路由或规则可以应用于IPv4或IPv6,则它将默认
到IPv4。要强制路由/规则为IPv6,请添加关键字“inet6”。
static_ipaddress {
[label
static_routes {
192.168.2.0/24 via 192.168.1.100 dev eth0 track_group GROUP1
192.168.100.0/24 table 6909 nexthop via 192.168.101.1 dev wlan0
onlink weight 1 nexthop via 192.168.101.2
dev wlan0 onlink weight 2
192.168.200.0/24 dev p33p1.2 table 6909 tos 0x04 protocol bird
scope link priority 12 mtu 1000 hoplimit 100
advmss 101 rtt 102 rttvar 103 reordering 104
window 105 cwnd 106 ssthresh lock 107 realms
PQA/0x14 rto_min 108 initcwnd 109 initrwnd 110
features ecn
2001:470:69e9:1:2::4 dev p33p1.2 table 6909 tos 0x04 protocol
bird scope link priority 12 mtu 1000
hoplimit 100 advmss 101 rtt 102 rttvar 103
reordering 104 window 105 cwnd 106 ssthresh
lock 107 rto_min 108 initcwnd 109
initrwnd 110 features ecn fastopen_no_cookie 1
...
}
static_rules {
from 192.168.2.0/24 table 1 track_group GROUP1
to 192.168.2.0/24 table 1
from 192.168.28.0/24 to 192.168.29.0/26 table small iif p33p1
oif wlan0 tos 22 fwmark 24/12
preference 39 realms 30/20 goto 40
to 1:2:3:4:5:6:7:0/112 from 7:6:5:4:3:2::/96 table 6908
uidrange 10000-19999
to 1:2:3:4:6:6:7:0/112 from 8:6:5:4:3:2::/96 l3mdev protocol 12
ip_proto UDP sport 10-20 dport 20-30
...
}
Track files
添加要监视的文件。只要是modi文件都会被读取-
菲德。将记录所有VRRP实例的文件中的值,
同步组和监控它的真实服务器。请注意,该文件将
仅当至少有一个VRRP实例、同步组或真实服务器时才可读取
监视它。
一个值将以文本形式从文件中读取。如果重量
针对track_文件配置的是0,该文件中的非零值
将被视为故障状态,而零值将被处理
作为正常状态,否则该值将乘以权重
在track_file语句中配置。
对于VRRP实例,如果结果小于-253,则进行任何监视
脚本将转换到故障状态(权重可以是254到
允许从文件中读取负值)。
如果vrrp实例或同步组不是地址所有者,则
结果在-253和253之间,结果将加到初始值中
VRRP实例的优先级(负值将降低优先级-
但有效优先权仅限于该范围
[1254年]。对于真正的服务器也是如此。
如果使用track_文件的vrrp实例是同步组的成员,
除非在组权重上设置了sync_group_tracking_weight,否则0必须
设置。同样,如果vrrp实例是地址所有者,则权重为0
也必须设置。
对于监视文件的实际服务器,从
跟踪文件是2147483646到-2147483647。值,一次多次-
乘以权重,将添加到实际服务器的IPV权重中。
注意:实际服务器的track_文件的权重没有完全实现
然而。特别是允许重量为0,处理负计算值-
ues和重新装载。
跟踪文件的语法为:
track_file
# vrrp_track_file is a deprecated synonym
#文件跟踪体重(默认为1)
file
#可选默认的重量
weight <-2147483647..2147483647> [reverse]
#创建文件和/或初始化值
#这个原因值(默认0)写到
#指定的文件在启动时如果文件不存在
#存在,除非覆盖指定的在这种情况下
#任何现有文件的内容将被覆盖
#指定值。
init_file [VALUE] [overwrite]
}
VRRP track processes
配置块看起来像:
vrrp_track_process
#过程监控(可选参数)
#一个引用字符串作为一个元素,所以如果第一项
#过程关键字引用后,命令名。
例如:
#过程“/ tmp / b”param1“参数2”
#将意味着一个名叫“/ tmp / b”的过程(引用删除)与2参数
2 # ' param1”和“参数”。
process
#如果匹配参数,指定部分匹配(即第一
# n参数完全匹配),或一个初始匹配,即最后一个
#参数可能会更长时间的参数配置。
#指定一个命令必须没有参数,没有指定
#任何参数,但指定param_match。
param_match {initial|partial}
#默认重量的描述(默认为1)。相反,看到track_process。
#“重量0逆转”将导致vrrp实例时
#法定人数上升,反之亦然。
weight <-254..254> [reverse]
#成功的最小数量的过程
quorum NUM
#成功的最大进程数。
# 1将导致一个失败如果两个实例的过程
#运行(但要注意叉-见下fork_delay)。
#设置为0意味着失败如果匹配过程
#运行。
quorum_max NUM
#时间推迟后,处理群体前叉后获得
#考虑进程(在分数秒)
#这是为了避免fork / exec上下弹跳
fork_delay SECS
#时间推迟后,处理群体失去了之前
#考虑过程(在分数秒)
#这是避免了/终止后反弹/父refork。
terminate_delay SECS
#这集fork_delay和terminate_delay
delay SECS
#一般过程字符串匹配过程的名字,
#所示的名字:在/proc/PID/status,除非
#参数指定。
#这个选项力量匹配完整的命令行
full_command
}
为了避免频繁运行track_脚本来监视exis-
进程的实例(通常是haproxy或nginx),vrrp_track_进程可以
监视其他进程是否正在运行。
与pgrep的一个区别是track_进程不执行常规表达式-
命令字符串的sion匹配,但执行完全匹配。'pgrep ssh'
将匹配一个sshd进程,这个track_进程将不匹配(它是等价的-
借给pgrep“^ssh$”)。
如果使用了full_命令(相当于pgrep-f),/proc/PID/cmdline为
已使用,但不会检测到对cmdline的任何更新(进程
通常不应该改变它,尽管它是可以非常小心,
例如systemd)。
Linux v3.2之前的track_进程不支持检测更改
因为内核没有通知进程的更改
3.2之前的名称。大多数进程不会更改其进程名,
但是,例如,firefox分叉了改变进程的进程
“Web内容”的名称。这里提到的进程名是con-
帐篷/proc/PID/comm。
Quorum是为确认而必须运行的匹配进程数
状态。
如果延迟预期某个进程可能会被重新加载,那么延迟可能会很有用
(停止并重新启动),并且不希望在vrrp上下移动
实例。
正权重表示OK状态将向
监视它的所有VRRP实例的优先级。相反,a
在下列情况下,将从初始优先级中减去负权重
进程不足。
如果vrrp实例或同步组不是地址所有者,则
结果在-253和253之间,结果将加到初始值中
VRRP实例的优先级(负值将降低优先级-
但有效优先权仅限于该范围
[1254年]。
如果使用track_进程的vrrp实例是同步组的成员,
除非在组权重上设置了sync_group_tracking_weight,否则0必须
设置。同样,如果vrrp实例是地址所有者,则权重为0
也必须设置。
不使用pgrep/pidof/killall等的合理性:
每次运行pgrep或其等价物时,它都会遍历
/proc/[1-9][0-9]*目录,并打开status和cmdline pseudo
每个目录中的文件。cmdline伪文件映射到
进程的地址空间,如果进程的这一部分被交换
它必须从交换空间取出。pgrep等
包括僵尸进程,而keepalived没有,因为它们不是
跑步。
此实现只迭代/proc/[1-9][0-9]*/目录
在启动时,它甚至不会读取cmdline伪文件,如果
没有为任何vrrp_track_进程指定“full”命令
条目。启动后,它使用process\u events内核<->
接收进程更改通知的用户空间连接器。如果
已为任何track_进程实例(cmdline)指定完整的\u命令
必须在收到
新的程序,但在那个时候,它不太可能有
已经换掉了。
在具有大量进程创建/终止的繁忙系统上,
使用带有pgrep/pidof/killall的track_脚本可能更有效,
尽管这些过程与最小的
持续的需求。
在正在交换的系统上使用pgrep etc可能会有显著的
由于必须
从交换空间获取交换的内存,从而导致
交换。
BFD CONFIGURATION
这是RFC5880(双向转发检测)的一个实现-
这可以配置为在2个保持激活之间工作
实例,但在主/备份对之间使用未加权的track_bfds
VRRP实例的数量意味着VRRP实例只能
如果两个VRRP实例都在运行,这会在一定程度上挫败
VRRP的目的。
这个实现已经用openbfd(在
https://github.com/dyninc/OpenBFDD).
The syntax for bfd instance is :
bfd_instance
# BFD邻居IP(同义词neighbour_ip)
neighbor_ip
#源IP使用(可选,为了确保除外
#本地端口是有效的,它是必需的)
source_ip
#所需最小RX间隔,女士
# 10 ms(默认)
min_rx
#所需的最小TX间隔,女士
# 10 ms(默认)
min_tx
#想要闲置TX间隔,女士
#(默认是1000 ms)
idle_tx
#后错过了数据包的数量
#会话的声明
#(默认是5)
multiplier
#在被动模式(默认是活跃的)
passive
255 #即将离任的IPv4使用ttl(默认)
ttl
#即将离任的IPv6 hoplimit使用64(默认)
hoplimit
#最大减少ttl / hoplimit
#在收到包(默认0)
#(255跳数检查禁用)
max_hops
#默认跟踪体重
#正常情况下,积极的权重被添加到vrrp实例时优先考虑
# bfd实例,负权值降低时优先考虑。
#然而,如果指定相反,首要任务是降低了起来
#增加时。
# bfd实例时,反之亦然。
weight <-253:253> [reverse]
#通常bfd事件通知发送到VRRP和检查流程。
#指定vrrp或检查将导致这个bfd_instance事件通知
#只发送给指定的过程
vrrp
checker
}
VRRPD CONFIGURATION
包含VRRP脚本的子块,VRRP同步
群,VRRP免费ARP和未经请求的邻居广告延迟
组和VRRP实例
VRRP script(s)
脚本将每隔
昂兹。它的退出代码将被记录为所有VRRP实例,moni-
去吧。请注意,只有在至少有一个
VRRP实例监视它。
默认权重等于0,这意味着任何VRRP实例moni-
保存脚本将在
脚本连续失败。在那之后,
成功将导致VRRP实例离开故障状态,
除非由于其他脚本或-
他们正在追踪的面孔。
正权重意味着成功会增加
相反,从初始值中减去一个负数
发生故障时优先考虑。
vrrp脚本的语法为:
#添加一个脚本定期执行。
#记录所有VRRP实例和组织同步监测。
vrrp_script
#执行脚本的路径
script
#秒脚本调用之间,(默认值:1秒)
interval
#秒后脚本被认为失败了
timeout
#由这个重量,调整优先级(默认值:0)
#描述反向,看到track_script。
#“重量0逆转”将导致vrrp实例时
#脚本,反之亦然。
weight
#好所需要的数量的成功转型
rise
#需要KO的成功转型
fall
#用户/组名来运行脚本。
#组默认组的用户
user USERNAME [GROUPNAME]
#假设脚本最初处于失败状态
init_fail
}
VRRP synchronization group(s)
VRRP同步组是VRRP协议的扩展。主要目标是
定义一个VRRP实例包来同步在一起,以便
一个实例的转换将反映到其他组成员。
此外,对于精细状态传输,还有一个增强的通知功能-
动作捕捉。
您还可以定义多轨道策略以强制状态传输-
根据第三方事件(如界面、脚本、,
文件,BFD。
重要提示:要使同步组可靠地运行,必须
重要的是组中的所有实例都是主实例或它们都是主实例
备份或故障。有一半实例具有更高的
机器A上的优先级为机器B上其他优先级较高的一半
会导致不断的连任。因此,当实例
分组,针对成员VRRP配置的任何跟踪脚本/文件
实例的跟踪权重将自动设置为零,
为了避免不同实例之间的优先级不一致。
vrrp_sync_group的语法为:
vrrp_sync_group
group {
# vrrp_instance名称(见下文)
#组VRRP_Instance字符串
...
}
#同步组跟踪接口,& bfd将脚本文件
#更新状态/优先级的所有VRRP实例成员
#同步组。
#“重量0逆转”将导致vrrp实例时
#界面,反之亦然。
track_interface {
eth0
eth1
eth2 weight <-253..253> [reverse]
...
}
#跟踪脚本添加到同步组(< SCRIPT_NAME >是这个名字
# vrrp_script入口)去故障状态如果这些下降
#如果未加权的。
#扭转引起的方向调整的优先级逆转。
track_script {
}
#文件的状态监视、值被添加到有效的优先级。
# <字符串>是track_file的名称
#重量违约在track_file重量配置
track_file {
...
}
#过程监控、体重添加到有效的优先级。
# <字符串>是vrrp_track_process的名称
#重量违约在vrrp_track_process重量配置。
#看到vrrp_instance track_process重量的描述。
track_process {
...
}
# BFD实例我们监控,值添加到有效的优先级。
# <字符串>是BFD实例的名称
track_bfd {
...
}
#通知脚本和警报是可选的
#
#文件名上运行的脚本的转换可以非挂牌(如果
#只是文件名)或引用(如果有参数)
#用户名和groupname指定用户和组
#下应该运行的脚本。
#指定,默认为用户的组。
#如果没有指定用户名,他们默认的
#全球script_user和script_group
#掌握过渡
notify_master /path/to_master.sh [username [groupname]]
#备份过渡
notify_backup /path/to_backup.sh [username [groupname]]
#故障过渡
notify_fault "/path/fault.sh VG_1" [username [groupname]]
#停止vrrp时执行
notify_stop
# notify_deleted原因发送通知,而删除
#比默认vrrp后故障实例中删除
#重新加载。
#。
notify_deleted [
#任何状态转换。
#“通知”后脚本叫做notify_ *脚本(s)和
# 4执行后附加参数配置
# keepalive提供的参数:
# $ (n) = "集团" | "实例"
# $ (n - 2) =组或实例的名称
# $ (n - 1) =目标状态的过渡(停止只适用于实例)
#(“大师”|“备份”|“断层”|“停止”|“删除”)
# $ (n) =优先级值
# (n)和(n - 1)美元总是发送在大写字母,和可能的
#字符串发送上面列出的参数相同
#(“集团”/“实例”,“大师”/“备份”/“断层”/“停止”/“删除”)
#(注:停止和删除只适用于实例)
notify
#通知fifo的输出是一样的最后4参数“通知”
#脚本,外加“MASTER_RX_LOWER_PRI”而不是一个状态
#实例,也“MASTER_PRIORITY”和“BACKUP_PRIORITY”如果优先级
#变化和notify_priority_changes配置。
使用# MASTER_RX_LOWER_PRI如果主人需要设置一些外部状态,
#作为二级设置IP地址使用Amazon AWS时;
#已掌握由于通信中断,较低的优先级
#实例将接管了二级IP地址,和适当的主人
#需要能够恢复。
#发送FIFO vrrp优先更改通知
notify_priority_changes
#发送电子邮件通知在状态转换过程中,
#使用地址上面global_defs(默认不,
#除非全球smtp_alert / smtp_alert_vrrp集)
smtp_alert
#弃用。
# track_file vrrp_sync_groups代替。
global_tracking
#允许同步组使用不同的权重。
#这可能不会工作,但是是一个替代品
# global_tracking以防不同的权重
#不同vrrp实例在同一组同步。
sync_group_tracking_weight
}
VRRP gratuitous ARP and unsolicited neighbour advert delay group(s)
指定发送免费ARP和
未经请求的邻居广告。这是为了
上游交换机无法处理被ARP/NAs淹没的问题。
当限制适用于单个物理接口时,请使用接口。
当一组接口链接到同一个交换机时使用接口
这些限制适用于整个开关。
注意:只有一个或多个接口应该是
每个区块使用。
如果设置了全局vrrp_garp_间隔和/或vrrp_gna_间隔,则任何
在garp_组中未指定的接口将继承
全局设置。
garp_group的语法是:
garp_group {
#集ARP之间的时间间隔(以秒为单位,分辨率微秒)
garp_interval
#设置默认主动NA之间的间隔(以秒为单位,分辨率微秒)
gna_interval
#的物理接口间隔适用
interface
#一个列表的接口延迟是聚合川流不息。
interfaces {
...
}
}
VRRP instance(s)
VRRP实例是VRRP协议的关键特性。它定义并控制-
图VRRP在特定接口上运行的行为。每个VRRP
实例与uniq接口相关。
vrrp_实例的语法为:
vrrp_instance
#初始状态,主|备份
#一旦其他机器(s),
#将举行大选,这台机器
#与最高优先级将成为主人。
#这里的条目很多并不重要。
state MASTER
#界面inside_network,受vrrp。
#注意:如果使用单播,接口可以省略的
#为单播地址不是IPv6链接本地地址(这是
#必要的,例如,如果使用非对称路由)。
#如果省略的接口,那么所有贵宾和eVIPs应该指定
#接口上配置,否则他们将
#添加到默认的界面。
interface eth0
#使用VRRP虚拟MAC。
#注意:如果sysctl net.ipv4.conf.all。
#这vrrp_instance IPv4实例,使用
#这个选项会导致单个接口
#更新更大的电流设置,和
#。
#将被设置为0。
#恢复原始设置终止。
use_vmac [
#发送/ Recv VRRP消息基接口代替
# VMAC接口
vmac_xmit_base
#使用IPVLAN接口。
# ipvlan指定接口的接口上。
# IPv4实例,需要一个IP地址,IPv6
#地址是可选的,在这种情况下,当地的联系
将使用#地址。
#模式标志默认为桥。
#所有ipvlans相同的底层接口。
#这是安全配置接口名称,以防keepalive崩溃
#和重新启动,在这种情况下,它可以更可靠地找到一个
#创建接口。
use_ipvlan [
#迫使实例使用IPv6(不建议使用这个选项
#虚拟ip地址确定是否使用IPv4和IPv6)。
native_ipv6
#忽略VRRP接口故障(默认设置)
dont_track_primary
#可选,监控这些。
#去故障状态如果这些如果未加权的下降。
#当track_interface指定重量,而不是设置vrrp
#实例故障状态在失败的情况下,其优先级
#界面时增加了重量(积极的重量),
#或减少体重的绝对值接口时
#(负权值),除非指定逆转,在这种情况下
#方向调整优先级逆转。
#之间的重量必须由-253 + 253包容性。
# 0是默认行为即意味着失败
#故障状态。
#有限数量的良好的服务,最高的服务器
#成为主人。
#中大量的接口,因为它不会饱和甚至高
#数量的接口。
track_interface {
eth0
eth1
eth2 weight <-253..253> [reverse]
...
}
#添加一个跟踪脚本接口
# (< SCRIPT_NAME > vrrp_track_script条目的名称)
# track_interface一样的原理可以应用于track_script条目,
#除了一个未指明的重量意味着默认体重中声明
#脚本将使用(这本身默认为0)。
#扭转引起的方向调整的优先级逆转。
track_script {
}
#文件的状态监视、值被添加到有效的优先级。
# <字符串>是track_file的名称
track_file {
...
}
#添加积极的重量/减去当流程运行时,
#负权值减去/未运行时添加。
#如果指定反向,加法和减法的逆转。
# <字符串>是vrrp_track_process的名称
#重量违约在vrrp_track_process重量配置
track_process {
...
}
# BFD实例我们监控,值添加到有效的优先级,
#除非反向指定,当价值中减去。
#积极权重时添加/减去bfd实例,
#负权值减去/添加bfd实例时。
# <字符串>是BFD实例的名称
track_bfd {
...
}
#默认IP绑定vrrpd是主要的IP
#在接口。
#使用这个IP组播或单播vrrp src_addr
#包。
#包无论src_addr使用)。
#可选
mcast_src_ip
unicast_src_ip
#如果配置的src_ip不存在或被删除
#实例进入故障状态
track_src_ip
# VRRP版本上运行界面
#默认是全球参数vrrp_version,但IPv6将实例
#总是使用版本3。
version <2 or 3>
#以下可以检查在单播模式,
# VRRP数据包的源地址是我们的一个单播同行。
check_unicast_src
#不发送VRRP广告VRRP多播组。
#而是发送广告下面的列表
使用单播# ip地址。
# VRRP FSM和功能在一个网络
#环境不支持多播!
#指定IP地址可以IPv4和IPv6。
#如果min_ttl和/或指定max_ttl, TTL /跳极限
#任何收到的数据包检查指定的
# TTL范围,丢弃如果它超出了范围。
#指定min_ttl或max_ttl打开check_unicast_src。
unicast_peer {
...
}
#指定单播TTL / HLIM发送单播广告
unicast_ttl {0..255}
#校验和计算当使用VRRPv3 v1.3.6后改变了。
#设置这个标志部队使用旧的校验和算法
#保持向后兼容性,尽管keepalive将
#试图保持兼容性无论如何如果它看到一个老
#版本校验和。
#老校验和。
# OLD_CHKSUM_COMPAT keepalive - v的。)
old_unicast_checksum [never]
#接口特定的设置,全局参数一样。
#默认全局参数
garp_master_delay 10
garp_master_repeat 1
garp_lower_prio_delay 10
garp_lower_prio_repeat 1
garp_master_refresh 60
garp_master_refresh_repeat 2
garp_interval 100
gna_interval 100
#如果接收到一个低优先级的广告,不要发送另一个广告。
#这导致坚持rfc(默认为全球
# vrrp_lower_priority_dont_send_advert)。
lower_prio_no_advert [
#如果我们掌握和接受一个更高的优先级广告,发送一个广告
#(较低的优先级比其他大师),之前我们过渡
#备份。
#设置,将重新发送garp消息。
#两个同时大师,和最后的可能
#从我们看到消息。
higher_prio_send_advert [
#任意独特的从1到255的数字
#用来区分vrrpd的多个实例
#运行在同一NIC(因此相同的套接字)。
virtual_router_id 51
#选举的主人,优先级最高的胜利。
#主,让这个50比在其他机器上。
priority 100
# VRRP广告间隔几秒钟内(例如0.92)(使用默认)
advert_int 1
#注意:身份验证被撤VRRPv2规范
# 2004年RFC3768。
#使用这个选项是不一致的,可能会导致一些问题;
#使用如果可能,除非使用单播,它可以是有益的。
authentication {
# |通过啊
#通过-简单的密码(建议)
#啊- IPSEC(不推荐)
auth_type PASS
#密码来访问vrrpd。
#在所有机器上应该是一样的。
#只有第一个八(8)字符。
auth_pass 1234
}
#地址添加|▽改变主人,备份。
#在其他机器上使用相同的条目,
#相反的过渡将会发生。
# virtual_ipaddress, virtual_ipaddress_excluded,
# virtual_routes和virtual_rules大多数选项
#匹配选项命令的ip地址/线路/规则添加。
# track_group选项只适用于静态地址/线路/规则。
# no_track特定keepalive意味着
# vrrp_instance不会转换的主状态
#如果地址/线路/规则和地址/线路/删除规则
#之前不会恢复vrrp下转换实例
#掌握。
# <标记>:是可选的,并且创建了一个名称的别名。
For compatibility with "ifconfig", it should
be of the form
eth0:1 for an alias on eth0.
# < >范围:(“网站”|“链接”|“主机”|“地方”|“全球”)
# preferred_lft设置为0(这是反对IPv6地址
#默认如果地址掩码/ 128)。
#指定/ 128地址不应该弃用。
virtual_ipaddress {
[label
# VRRP IP排除VRRP可选的。
#的情况下大量的IPs(如200)
#相同的接口。
#广告的地址发送,你可以排除
#最“诱导多能性”广告。
#添加|▽至于virtual_ipaddress IPs。
还可以使用#如果你想添加
#的混合物IPv4和IPv6地址,因为所有
#地址virtual_ipaddress必须的
#同一家族。
virtual_ipaddress_excluded {
[label
#设置promote_secondaries国旗停止其他的接口
1 #地址在同一CIDR被删除时被删除
#例如如果10.1.1.2/24和10.1.1.3/24都在一个配置
#界面,一个是删除,除非promote_secondaries设置
#另一地址的接口也将被删除。
promote_secondaries
#线路添加|▽改变主时,备份。
#看到static_routes为更多的细节
virtual_routes {
# src < IPADDR >, < IPADDR > / <面具>通过| gw < IPADDR >
#(或< IPADDR > dev <字符串> <范围>表范围<表>
src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
192.168.110.0/24 via 192.168.200.254 dev eth1
192.168.111.0/24 dev eth2 no_track
192.168.112.0/24 via 192.168.100.254
192.168.113.0/24 via 192.168.200.254 or 192.168.100.254 dev eth1
blackhole 192.168.114.0/24
0.0.0.0/0 gw 192.168.0.1 table 100 # To set a default gateway into table 100.
}
#规则添加|▽改变主时,备份
#看到static_rules为更多的细节
virtual_rules {
from 192.168.2.0/24 table 1
to 192.168.2.0/24 table 1 no_track
}
# VRRPv3接受模式,允许虚拟路由器时
#解决所有者接收数据包处理贵宾。
#设置,除非严格模式设置为一个扩展,这也适合
# VRRPv2 (RFC 3768定义一个不接受模式)。
# --
#接受非address-owner数据包
accept
#包非address-owner下降。
no_accept
#一个高优先级的VRRP实例通常会抢占低优先级的实例
#当谈到网上。
#主机角色,并允许低优先级机继续担任
#的主人。
#注意:为此,初始状态不能掌握。
# --
nopreempt
#为了向后兼容
preempt
#秒后启动或看到直到抢占低优先级的大师
#“nopreempt”(如果不是禁用)。
#范围:0(默认)到1000(如4.12)
#注意:为此,初始状态不能掌握。
preempt_delay 300 # waits 5 minutes
#看到描述全球vrrp_skip_check_adv_addr
#设置默认值。
skip_check_adv_addr [on|off|true|false|yes|no]
#看到全球vrrp_strict的描述
#如果没有指定vrrp_strict, vrrp_strict的价值
#如果strict_mode没有指定一个参数,它默认为上
strict_mode [on|off|true|false|yes|no]
#调试水平,没有实现。
#水平是一个数字范围在0到4
debug
#通知脚本,警报
notify_master
notify_backup
notify_fault
#停止vrrp时执行
notify_stop
notify
如果一个主# notify_master_rx_lower_pri脚本执行
#接收到广告与优先级低于硕士优先。
notify_master_rx_lower_pri
#发送vrrp实例优先通知通知fifo。
notify_priority_changes
# SMTP发送警报
smtp_alert
#设置套接字接收缓冲区大小(见global_defs
# vrrp_rx_bufs_policy解释)
kernel_rx_buf_size
#设置使用linkbeat VRRP的接口实例。
#弃用-使用linkbeat_interfaces块代替。
linkbeat_use_polling
}
LVS CONFIGURATION
包含虚拟服务器组和的子块
虚拟服务器
子块包含用于配置Linux IPV(LVS)fea的参数-
真正的。了解ipvsadm(8)将对您有所帮助。配置LVS是
通过定义虚拟服务器组、虚拟服务器和选项来实现-
ally SSL配置。每个虚拟服务器都定义了一组
服务器,您可以将healthcheckers附加到每个实际服务器。保持
然后动态维护LVS的拓扑结构。
有关哪些配置组合有效的详细信息,请参阅
ipvsadm(8)手册页。
注意:可以为虚拟
服务器,真实服务器,可能还有检查器,虚拟服务器设置
是real server的默认值,而real server设置是
棋盘格的默认值。
注意:隧道式real/sorry服务器可能与
虚拟服务器的地址系列和非隧道真实/抱歉
所有服务器都必须相同。如果虚拟服务器使用
fwmark,所有真正的/抱歉的服务器都被隧道化了,地址fam-
虚拟服务器的ily将与
real/sorry服务器,如果它们都是相同的,否则将默认
到IPv4(使用ip_family inet6覆盖此设置)。
注意:虚拟服务器的端口只能是
如果虚拟服务是持久的,则省略。
Virtual server group(s)
这个特性提供了一种通过分解简化配置的方法
虚拟服务器定义。如果你需要定义一堆虚拟的
具有完全相同的真实服务器拓扑的服务器
将使您的配置更具可读性并将进行优化
只生成一个healthchecking任务,其中多个
虚拟服务器声明将为生成专用的运行状况检查程序
每个真正的服务器都会浪费系统资源。
IP地址、IP地址范围和防火墙标记的任意组合
可以使用,前提是-
实际服务器组匹配所有实际服务器的IP地址系列
使用虚拟服务器组的任何虚拟服务器。唯一的例外
为此,虚拟服务器组可以同时配置
IPv4和IPv6地址和fwmarks提供了
(抱歉是服务器)所有使用虚拟服务器的虚拟服务器
组使用隧道转发;如果在本例中指定了fwmarks,则
必须指定地址族。使用此选项的目的是
非常大的LVS。
虚拟服务器组的语法为:
virtual_server_group
#虚拟IP地址和端口
...
# < IPADDR范围>的形式
# XXX.YYY.ZZZ。
#范围包括1。和.10地址
...
# Firewall Mark (fwmark)
# inet / inet6只能指定虚拟服务器组
#所有真正的服务器虚拟服务器的隧道。
fwmark
fwmark
...
}
Virtual server(s)
A virtual_server can be a declaration of one of
[
group
The syntax for virtual_server is :
virtual_server
virtual_server fwmark
virtual_server group
# lv调度器
lvs_sched rr|wrr|lc|wlc|lblc|sh|mh|dh|fo|ovf|lblcr|sed|nq
#让哈希条目
hashed
#让flag-1调度器(- b flag-1 ipvsadm)
flag-1
#让flag-2调度器(- b flag-2 ipvsadm)
flag-2
#让flag-3调度器(- b flag-3 ipvsadm)
flag-3
#为sh启用sh-port调度器(- b sh-port ipvsadm)
sh-port
#为sh启用sh-fallback调度器(- b sh-fallback ipvsadm)
sh-fallback
#为mh启用mh-port调度器(- b mh-port ipvsadm)
mh-port
#为mh启用mh-fallback调度器(- b mh-fallback ipvsadm)
mh-fallback
#为UDP启用One-Packet-Scheduling (ipvsadm - o)
ops
#覆盖默认的lv转发方法(缺省为NAT)。
#默认ipip隧道类型。
#被指定。
#如果想隧道类型,校验和选项也可以被指定。
#从Linux 5.3, GRE隧道类型还支持,但没有
# remcsum选项。
lvs_method NAT|DR
or
lvs_method TUN [type {ipip|gue port NUM|gre} [nocsum|csum|remcsum]]
# lv持久性引擎名称(目前只有sip支持)
persistence_engine
# lv持久超时秒,默认6分钟
persistence_timeout [
# lv粒度面具(ipvsadm - m)
persistence_granularity
# L4协议
protocol TCP|UDP|SCTP
#如果VS没有设置IP地址,
#暂停healthcheck的活动
ha_suspend
#发送电子邮件通知quorum上下过渡期间,
#使用地址上面global_defs(默认不,
#除非全球smtp_alert / smtp_alert_checker集)
smtp_alert
#默认虚拟主机字符串HTTP_GET或SSL_GET
#如虚拟主机www.firewall.loc
#被虚拟主机配置的服务器或检查
virtualhost
#在守护进程启动时假设所有RSs下降了
#和healthcheck失败。
#在启动时假阳性。
#默认禁用。
alpha
#在守护进程关闭考虑法定人数和RS
#通知执行,在适当的地方。
#欧米茄模式默认是禁用的。
omega
#最低生活服务器的总重量
#池中必要的操作和没有
#质量回归。
quorum
#容忍这么多重量单位相比
#名义群体,当考虑群体利益
#或损失。
hysteresis
#脚本时所执行法定人数。
quorum_up
#脚本执行法定人数时丢失。
quorum_down
# IP家庭fwmark服务(如果所有真正的服务器只需要挖过
#和persistence_granularity没有指定)。
ip_family inet|inet6
#设置realserver (s)
# RS增加lv拓扑法定人数时,并没有实现。
#如果一个对不起,服务器配置,所有真正的服务器
#当法定人数没有达到拖下水
#对不起服务器所取代。
sorry_server
#适用inhibit_on_failure sorry_server行为
sorry_server_inhibit
#对不起服务器lv转发方法。
#服务器的默认。
#隧道类型的详情,请参阅virtual_server细节。
sorry_server_lvs_method NAT|DR
or
sorry_server_lvs_method TUN [type {ipip|gue port NUM|gre} [nocsum|csum|remcsum]]
#在几秒钟内可选的连接超时。
#默认是5秒
connect_timeout
#重试计数进行额外的检查,如果检查
#服务器失败的活着。
retry
#延迟之前失败后重试
delay_before_retry
#可选随机延迟开始最初的检查
#最大N秒。
#有用分散多个同步
#检查相同的RS。默认情况下,启用
#在delay_loop最大。
warmup
#延迟计时器的检查程序轮询
delay_loop
#设置权重0当healthcheck检测失败
inhibit_on_failure
为每个realserver #一个条目
real_server
使用#相对权重,默认值:1
weight
# lv转发方法
#隧道类型的详情,请参阅virtual_server细节。
#设置取自virtual_server的设置。
lvs_method NAT|DR
or
lvs_method TUN [type {ipip|gue port NUM|gre} [nocsum|csum|remcsum]]
当healthcheck #脚本执行
#认为服务。
notify_up
当healthcheck #脚本执行
#认为服务。
notify_down
#服务器最大连接数
uthreshold
#最小数量的连接到服务器
lthreshold
#发送电子邮件通知在状态转换过程中,
#使用地址上面global_defs(默认是的,
#除非全球smtp_alert / smtp_alert_checker集)
smtp_alert
#默认虚拟主机字符串HTTP_GET或SSL_GET
#如虚拟主机www.firewall.loc
#覆盖检查器的虚拟主机配置
virtualhost
alpha
connect_timeout
retry
delay_before_retry
warmup
delay_loop
inhibit_on_failure
log_all_failures
# healthcheckers。
# HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | DNS_CHECK | MISC_CHECK | BFD_CHECK | UDP_CHECK | PING_CHECK | FILE_CHECK
#所有的检查都有以下选项,除了MISC_CHECK只有
#选择α起,BFD_CHECK和FILE_CHECK没有
#标准的选择:
CHECKER_TYPE {
# = = = = = = = =通用连接选项
#可选的IP地址连接。
#默认是realserver的IP
connect_ip
#可选端口连接
#默认是realserver端口
connect_port
#可选地址使用
#产生连接
bindto
#可选的接口来使用;
# bindto地址是IPv6链接本地
bind_if
#可选的源端口
#产生连接
bind_port
#可选fwmark马克所有的外向
#检查数据包,
fwmark
alpha
connect_timeout
retry
delay_before_retry
warmup
delay_loop
}
#以下选项是特定于额外检查的
# HTTP和SSL healthcheckers
HTTP_GET|SSL_GET {
# HTTP协议版本,1.0,1.0,1.1加元
协议版本号1.0度意味着1.0版本的
#“连接:紧密”,这是包含在
#默认版本1.1。
http_protocol
#当α模式设置,或从失败中恢复时,
#检查每个URL, < delay_loop >之间的延迟
#每个检查。
# 3秒,需要1分钟前RS会出现
#启动后,或复苏失败。
# fast_recovery删除延迟,在启动之后
#复苏失败,意味着RS会出现
#曾经的所有url已经检查,没有之间的延迟
#检查每个URL。
fast_recovery [
#一个url来测试
#这里可以有多个条目
url {
#如路径/ / mrtg2 /或路径
path
# healthcheck需要消化
#或status_code和消化
#消化与genhash计算
# 9 b3a0c85a887a256d6939da88aabd8cd如消化
digest
#状态代码返回的HTTP头
200 #如status_code status_code 200 - 299 400 - 499 503 505
#默认是200 - 299
status_code
#传递字符串。
#如果没有设置,使用虚拟主机从真实或虚拟服务器
virtualhost
#正则表达式搜索返回的数据。
#未能匹配检查失败原因。
regex
#逆转比赛的感觉,所以一个匹配的
#返回文本检查失败原因。
regex_no_match
#空间分离的正则表达式选项列表。
#看到男人pcre2api选项的描述。
#支持以下选项:
# allow_empty_class alt_bsux auto_callout caseless
# dollar_endonly dotall dupnames扩展得力
# match_unset_backref多行never_ucp never_utf
# no_auto_capture no_auto_possess no_dotstar_anchor
# no_start_optimize跟单信用证ungreedy utf never_backslash_c
# alt_circumflex alt_verbnames use_offset_limit
regex_options
#为复杂的正则表达式的一个更大的堆栈
#可能需要,这使得开始和最大
#指定字节大小。
# pcre2_jit_stack_create的文档()
regex_stack
#的最小偏移量返回的数据开始
#检查正则表达式模式匹配。
如果返回的数据大#处理时间。
regex_min_offset
#的最大偏移到返回的数据
#话题开始比赛。
regex_max_offset
}
}
SSL_GET {
#提供时,发送服务器名称指示器在SSL握手
enable_sni
}
# TCP healthcheck
TCP_CHECK {
#没有额外的选项
}
# SMTP healthcheck
SMTP_CHECK {
#可选字符串使用SMTP直升机请求
helo_name
}
# DNS healthcheck
DNS_CHECK {
#重试默认是3。
# DNS查询类型
# A|NS|CNAME|SOA|MX|TXT|AAAA
#默认是SOA
type
#域名使用DNS查询
#默认。
name
}
# MISC healthcheck,运行一个程序
MISC_CHECK {
#重试默认是0。
#外部脚本或程序
misc_path
#脚本执行超时
misc_timeout
#如果设置,使用healthcheck的退出代码
#动态调整重量如下:
# 0退出状态:svc检查成功,重量
#不变。
#退出状态1:svc检查失败。
#退出状态2 - 255:svc检查成功,重量
#改为2小于退出状态。
#(例如:255将的退出状态
# 253重量)
#注意:没有超过一个动态MISC_CHECK / real_server。
misc_dynamic
#指定用户名/ groupname脚本应该
#下运行。
#如果没有指定GROUPNAME,集团用户
使用#
user USERNAME [GROUPNAME]
}
# BFD实例名来检查
BFD_CHECK {
name
}
#平healthcheck
#注意:使用此检查可能会导致/proc/sys/net/ipv4/ping_group_range
#允许根使用一个更新IPPROTO_ICMP插座。
PING_CHECK {
#没有额外的选项
}
# UDP healthcheck
#注意:检查器正常工作,它依赖于ICMP错误消息等
# HOST_UNREACH, NET_UNREACH PORT_UNREACH。
#超时,所以connect_timeout应该足够长的时间来允许这个(如。
#至少4秒)。
#也许你会想用PING_CHECK同一个服务器。
UDP_CHECK {
require_reply # Require a reply packet for check to be successful
}
#文件检查器
#这读和监视器文件的内容,在字符串指定的名称
#在track_file配置块(见上图)。
#注意:权重track_file真实的服务器还没有完全实现。
#特别允许重量0,处理消极的计算值和重新加载。
FILE_CHECK {
track_file
#如果动态设置,使用文件中的值
#动态调整体重增加的体重
#法定人数和lv的重量
dynamic
#重量乘数申请从文件读取的值
weight <-2147483647..2147483647> [reverse]
}
}
}
#参数用于SSL_GET检查。
#如果没有指定参数,SSL上下文
#将自动生成。
SSL {
#密码
password
# CA file
ca
#证书文件
certificate
#密钥文件
key
}
ADVANCED CONFIGURATION
配置解析器已经扩展到支持高级功能
例如条件配置和参数替换。这些
特性对于配置-
生成操作模板(数据中心)。
Conditional configuration and configuration id
config id默认为返回的节点名的第一部分
可以用-i或--config id命令行重写
选项。
任何以“@”开头的配置行都是条件配置
行。紧跟在“@”后面的单词(即没有空格)
字符与配置id进行比较,如果不匹配,
配置行被忽略。
或者,“@^”是一个否定的比较,所以如果immedi这个词-
下面的配置与配置id不匹配,配置行是
包括。
这样做的目的是允许使用单个配置文件
对于多个系统,唯一的区别可能是
路由器标识、vrrp实例优先级,可能还有接口名称和
单播地址。
For example:
global_defs {
@main router_id main_router
@backup router_id backup_router
}
...
vrrp_instance VRRP {
...
@main unicast_src_ip 1.2.3.4
@backup unicast_src_ip 1.2.3.5
@backup2 unicast_src_ip 1.2.3.6
unicast_peer {
@^main 1.2.3.4
@^backup 1.2.3.5
@^backup2 1.2.3.6
}
...
}
如果keepalived是用-i main调用的,那么将设置路由器_id
到主路由器,如果用-i backup调用,那么备份路由器,如果不是
如果使用-i或-i调用任何其他项,则路由器_id将不会
准备好了。main的单播对等机将是1.2.3.5和1.2.3.6。
Parameter substitution
可指定可替换参数。用于定义
参数为:
$PARAMETER=VALUE
其中“=”前面不能有空格,只有空格可以
前进到“$”。允许空值。
参数名可以由A-Za-z0-9和,
但不能以数字开头。以under开头的参数名-
分数应该被认为是keepalived将定义的保留名称
对于各种预定义的选项。
定义参数后,$parameter后跟
空白,或${PARAMETER}(不需要fol-
将被值替换。
替换是递归的,因此如果参数值本身包含
一个可替换的参数,然后在第一次替换之后,参数-
值中的ter将被替换;替换在
例如,在定义时间时,不替换:
$ADDRESS_BASE=10.2.${ADDRESS_BASE_SUB}
$ADDRESS_BASE_SUB=0
${ADDRESS_BASE}.100/32
$ADDRESS_BASE_SUB=10
${ADDRESS_BASE}.100/32
will produce:
10.2.0.100/32
10.2.10.100/32
请注意,在上面的示例中,ADDRESS_BASE和
ADDRESS_BASE_SUB需要大括号({}),因为参数不是
后面是空格(在第一次替换后
10.2.${ADDRESS_BASE_SUB}.100/32参数后面仍然没有
空白)。
如果一个参数没有定义,它就不会被替换,所以
示例${UNDEF_PARAMETER}将保留在配置中
未定义;这意味着包含“$”的现有配置
字符(例如在脚本定义中)不会这样更改
只要没有新的参数定义被添加到配置中。
参数替换与条件配置一起工作-
行动。例如:
@main $PRIORITY=240
@backup $PRIORITY=200
...
vrrp_instance VI_0 {
priority $PRIORITY
}
will produce:
...
vrrp_instance VI_0 {
priority 240
}
if the config_id is main.
$IF_MAIN=@main
$IF_MAIN priority 240
will produce:
priority 240
if the config_id is main and nothing if the config_id is not main,
although why anyone would want to use this rather than simply the
following is not known (but still possible):
@main priority 240
也支持多行定义,但使用时必须
参数名后面的行中没有任何内容。多行定义是
通过在除最后一行之外的每一行以“\”字符结尾来指定。
Example:
$INSTANCE= \
vrrp_instance VI_${NUM} { \
interface eth0.${NUM} \
use_vmac vrrp${NUM}.1 \
virtual_router_id 1 \
@high priority 130 \
@low priority 120 \
advert_int 1 \
virtual_ipaddress { \
10.0.${NUM}.254/24 \
} \
track_script { \
offset_instance_${NUM} \
} \
}
$NUM=0
$INSTANCE
$NUM=1
$INSTANCE
The use of multiline definitions can be nested.
Example:
$RS= \
real_server 192.168.${VS_NUM}.${RS_NUM} 80 { \
weight 1 \
inhibit_on_failure \
smtp_alert \
MISC_CHECK { \
misc_path "${_PWD}/scripts/vs.sh RS_misc.${INST}.${VS_NUM}.${RS_NUM}.0 10.0.${VS_NUM}.4:80->192.168.${VS_NUM}.${RS_NUM}:80" \
} \
MISC_CHECK { \
misc_path "${_PWD}/scripts/vs.sh RS_misc.${INST}.${VS_NUM}.${RS_NUM}.1 10.0.${VS_NUM}.4:80->192.168.${VS_NUM}.${RS_NUM}:80" \
} \
notify_up "${_PWD}/scripts/notify.sh RS_notify.${INST}.${VS_NUM}.${RS_NUM} UP 10.0.${VS_NUM}.4:80->192.168.${VS_NUM}.${RS_NUM}:80" \
notify_down "${_PWD}/scripts/notify.sh RS_notify.${INST}.${VS_NUM}.${RS_NUM} DOWN 10.0.${VS_NUM}.4:80->192.168.${VS_NUM}.${RS_NUM}:80" \
}
$VS= \
virtual_server 10.0.${VS_NUM}.4 80 { \
quorum 2 \
quorum_up "${_PWD}/scripts/notify.sh VS_notify.${INST} UP 10.0.${VS_NUM}.4:80" \
quorum_down "${_PWD}/scripts/notify.sh VS_notify.${INST} DOWN 10.0.${VS_NUM}.4:80" \
$RS_NUM=1 \
$RS \
$RS_NUM=2 \
$RS \
$RS_NUM=3 \
$RS \
}
$VS_NUM=0
$ALPHA=alpha
$VS
$VS_NUM=1
$ALPHA=
$VS
The above will create 2 virtual servers, each with 3 real servers
Pre-defined definitions
定义了以下预定义定义:
${u PWD}:当前配置的目录
文件(如果使用include指令,这可以更改)。
${u INSTANCE}:实例名(由-i定义
选项,默认为主机名)。
${u RANDOM[MIN[MAX]]}:这被RANDOM替换
范围为[MIN,MAX]的整数,其中MIN和MAX是可选的非-
负整数。默认值为MIN=0和MAX=32767。
根据需要,将添加额外的预定义定义-
提菲。通常添加额外的
预定义的定义,所以如果您需要一个,或者有一个好主意
一个,然后在
https://github.com/acassen/keepalived/issues请求。
Sequence blocks
一行起始序列(var,start,step,end)将导致
要多次处理的行的剩余部分,使用
变量$var初始设置为开始,
然后$var将递增
重复步进,大于时终止
结束。步骤可以省略,其中
case它默认为1或-1,这取决于是否结束
大于或小于起始值。开始
也可以省略,在这种情况下,如果
end>0或-1(如果end<0)。
~SEQx(…)与~SEQ(…)相同,但变量$var将用于
格式为十六进制,这对IPv6地址很有用。
注意:目前有必要为
~SEQ块来自任何先前定义的变量,包括用作
previous~SEQ块中的变量。这在将来可能会改变,
因此,不要依赖在结束后定义~SEQ块变量
街区。
示例:
~SEQ(SUBNET, 0, 3) ip_address 10.0.${SUBNET}.1
would produce:
ip_address 10.0.0.1
ip_address 10.0.1.1
ip_address 10.0.2.1
ip_address 10.0.3.1
and
~SEQx(SUBNET, 144, 16, 192) ip_address fe80::20:${SUBNET}:1
or better
~SEQx(SUBNET, 0x90, 0x10, 0xc0) ip_address fe80::20:${SUBNET}:1
would produce:
ip_address fe80::20:90:1
ip_address fe80::20:a0:1
ip_address fe80::20:b0:1
ip_address fe80::20:c0:1
Another example:
virtual_ipaddress {
~SEQx(AD2, 0x90, 0x10, 0xc0) ~SEQx(AD1, 0x12, -1, 0x0c) fe81::10:${AD2}:${AD1}
}
There can be multiple ~SEQ elements on a line, so for example:
$VI4= \
track_file offset_instance_4.${IF}.${NUM}.${ID} { \
file "${_PWD}/679/track_files/4.${IF}.${NUM}.${ID}" \
weight -100 \
} \
vrrp_instance vrrp4.${IF}.${NUM}.${ID} { \
interface bond${IF}.${NUM} \
use_vmac vrrp4.${IF}.${NUM}.${ID} \
virtual_router_id ${ID} \
priority 130 \
virtual_ipaddress { \
10.${IF}.${NUM}.${ID}/24 \
} \
track_file { \
offset_instance_4.${IF}.${NUM}.${ID} \
} \
}
~SEQ(IF,0,7) ~SEQ(NUM,0,31) ~SEQ(ID,1,254) $VI4
will produce 65024 vrrp instances with names from vrrp4.0.0.1 through to
vrrp4.7.31.254.
List blocks
列表块与序列块相似,只是
~LST规范中列出了变量的替换项。
以~LST(var,val1,val2,val3)开头的行将导致
要多次处理的行的剩余部分,使用
变量$var最初设置为val1,
然后是val2,最后是val3。任何
只要至少有一个值为
(尽管只有一个值是没有意义的)。
如果希望一次替换多个变量,则
变量和值需要包含在{…}块中。例如:
~LST({IP,IP1},{10,1},{20,4},{5,6},{12,8})192.168.${IP}.${IP1}
将首先设置IP=10和IP1=1,然后IP=20和IP1=4,依此类推-
杜塞斯:
192.168.10.1
192.168.20.4
192.168.5.6
192.168.12.8
List blocks can be nested, so:
~LST(IP, 1, 2, 3, 4) ~LST(IP1, 5,6,7) 192.169.${IP}.${IP1}
produces:
192.169.1.5
192.169.1.6
192.169.1.7
192.169.2.5
192.169.2.6
192.169.2.7
192.169.3.5
192.169.3.6
192.169.3.7
192.169.4.5
192.169.4.6
192.169.4.7
Finally, list blocks and sequence blocks can be combined, so:
~LST({IP, IP1}, {10,1},{20,4},{5,6},{12,8}) ~SEQ(IP2,168,2,172)
192.${IP2}.${IP}.${IP1}
produces:
192.168.10.1
192.170.10.1
192.172.10.1
192.168.20.4
192.170.20.4
192.172.20.4
192.168.5.6
192.170.5.6
192.172.5.6
192.168.12.8
192.170.12.8
192.172.12.8
KERNEL SETTINGS
已经确认,如果代理服务器
在具有
如果上面配置了VIP或EVIP,可能会导致ARP回复错误
由于代理响应ARP请求以及
保持不变的主人。两者都需要设置为0才能正常工作。
AUTHORS
首字母由Joseph Mack。Alexandre Cassen&Quentin提供的广泛更新
阿米蒂奇。
SEE ALSO
ipvsadm(8), ip --help.
Keepalived 2020-05-31 keepalived.conf(5)