GLOBAL CONFIGURATION

Global definitions

global_defs
{
     notification_email
     {
         [email protected]
     }
     notification_email_from [email protected]
     stmp_server 112.3.3.3. 25
     stmp_hole_name   #用于指定发送hole消息的主机,一般是mx记录的主机
     stmp_connect_timeout 30
     router_id my_hostname              #指定一个字符串给keepalived,不一定是主机名,默认为本地主机名
     vrrp_mcast_group4  224.0.0.18  #指定vrrp的多播ipv4地址,默认是224.0.0.18
     vrrp_mcast_group6  ff02::12      #指定vrrp的多播ipv6地址,默认是ff02::12
     default_interface  p33p1.3         # 设置用户static ipaddress的默认网络接口,如果系统没有eth0接口或者想为多个static ipaddress配置不同的接口时,使用该配置将会简化配置。
     lvs_sync_daemon   [id ] [MAXLEN ] [port ]  [ttl ] [group ]
                                                            #该选项没有详细的官方文档说明,根据测试发现,该参数作用于ipvsad的sync daemon选项,lvs_sync的状态根据keepalived的状态一致,当kill掉master keepalived时,backup keepalive的state转变为master状态
     lvs_flush                                           #该功能新增于1.2.23版本。启动keepalived时刷新lvs配置,如果lvs没有配置,这不会刷新
     vrrp_garp_master_delay 10                  #设置当keepalived转变为master后,延迟多少秒发送第二组gratuitous arp。时间单位为秒,默认5秒,0表示不发送第二组gratuitous arp发送。
                                                                #注意第二组发送和第二次发送的区别
     vrrp_garp_master_repeat 1                  #keepalived状态转变为master后,每次发送多少组grntuitous APR 信息的数量,默认为5个
     vrrp_garp_lower_prio_repeat 1             #当master keepalived接收到一个较低优先级的广播后,一次发送gratuitous apr的数量组
     vrrp_garp_master_refresh 60               #master keepalived 每次发送gratuitous arp的最小时间间隔。默认是0,没有
     vrrp_garp_master_refresh_repeat 2      #master keepalived 每次发送gratuitous arp消息的组数量。
     vrrp_garp_interval  0.001                     #小数类型,单位秒,在一个网卡上每组gratuitous arp消息之间的延迟时间,默认为0,一个发送的消息=n组 arp报文
     vrrp_gna_interval    0.000001              #小数类型,单位秒, 在一个网卡上每组na消息之间的延迟时间,默认为0
     vrrp_lower_prio_no_advert                  #如果接收到一个低优先级的通告,只需要丢弃它,不用发送其他通告,字符类型:布尔值,false/true
     vrrp_version <2 or 3>                         #设置vrrp协议版本,默认是版本2
     vrrp_iptables                                        #该配置添加于1.2.21版本,添加vrrp_iptables全局配置选项。 iptables / ip6tables条目始终添加在INPUT链的末尾,但对于许多配置,这在处理中太晚了。 此修补程序允许指定要添加规则的链名称,            
                                                                 #并且还允许添加指定无规则的选项。 如果指定了链名称,则该链必须已经存在于iptables和/或ip6tables配置中,并且该链将从ip(6)表配置中的适当点调用。
                                                                 #默认是入站过滤
     vrrp_iptables keepalived_in keepalived_out          #或用于出站过滤。注意,出站过滤将不适用于IPv4,因为可以选择VIP作为出站连接的源地址。 对于IPv6,由于地址已过时,因此不太可能
     vrrp_iptables                                                     #不添加任何iptables规则
     vrrp_ipset [keepalived [keepalived_if [keepalived6 [keepalived_if6]]]]               #Keepalived可以选择将ipset与iptables结合使用。 如果是这样,则可以指定ipset名称,默认如下。如果没有指定名称,则不使用ipsets,否则将通过向先前指定的名称添加“_if”和/
                                                                                                                          #或“6”来构造任何省略的名称。ipset是iptables的扩展,它允许你创建匹配整个地址sets(地址集合)的规则。

     vrrp_check_unicast_src                        #该选项允许在unicast模式中,检查vrrp包的源ip地址是否是unicast peers中的一个
     vrrp_skip_check_adv_addr                    #检查vrrp报文中的所有地址比较耗时,设置此标志的意思是如果接收的到报文和上一个报文来至同一个路由器,则不执行检查。默认是跳过检查
     vrrp_strict                                             #严格遵守vrrp协议,下面这些功能将会禁止:1.   0 VIP   2. unicast(单播) peers    3. vrrp 版本2的ipv6功能

     #当vrrp或checker进程超时时,可以使用下面4个选项。这可以是备vrrp实例变为主vrrp状态。有时由于主或备系统太过繁忙,导致无法处理vrrp数据包,但这个时候主系统依然还在运行。 这时就需要使用下列四个选项来处理该问题。
     vrrp_priority <-20 to 19>                    #设置vrrp子进程优先级
     checker_priority <-20 to 19 >               #设置checker子进程优先级
     vrrp_no_swap                                        #设置vrrp子进程不可交换
     checker_no_swap                                   #设置checker子进程不可交换
      #keepalived已经构建了对SNMP的支持,keepalived,checker和RFC支持可以单独启用/禁用
     snmp_sockert udp:1.2.3.4:705           #用户指定连接到SNMP主代理的套接字(默认 unix:/var/agentx/master),除非使用的是网络空间名称,默认为udp:localhost:705
     enable_snmp_keepalived                    #enable keepalived MIB的vrrp元素的SNMP处理功能
     enable_snmp_checker                         #enable keepalived MIB的checker元素的SNMP处理功能
     enable_snmp_rfc                                  #enable RFC2787和RFC6527处理功能
     enable_snmp_rfcv2                              #enable RFC2787 vrrp MIB的处理功能
     enable_snmp_rfcv3                              #enable RFC6527 vrrp  MIB的处理功能
     enable_traps                                        #enable SNMP traps功能
}

net_namespace NAME                      #设置要运行的网络命名空间,/var/run/keepalived目录将被创建为非共享挂载点,例如pid文件.syslog条目将_NAME附加到ident。注意,不能在重新加载配置是更改命名空间
                                                          # 在Linux协议栈中引入网络命名空间,是为了支持网络协议栈的多个实例,而这些协议栈的隔离就是由命名空间来实现的(有点像进程的线性地址空间,协议栈不能访问其他协议栈的私有数据)。
                                                          #需要纳入命名空间的元素包括进程,套接字,网络设备。进程创建的套接字必须属于某个命名空间,套接字的操作也必须在命名空间内进行,网络设备也必须属于某个命名空间,但可能会改变,因为网络设备属于公共资源
instance NAME                                  #如果有多个keepalived实例运作在同一个命名空间,将会创建一个pid文件,将NAME作为文件名的一部分,在/var/run/keepalived。 注意:配置重启时无法更改实例名称
use_pid_dir                                         #在/var/run/keepalived中创建pid文件
linkbeat_user_poling                           #轮询以件车媒体链路故障,否则尝试使用ETHTOOL或MII接口
##Static routes/address/rules
#keepalived可以配置静态地址,路由和跪着,这些地址不会被vrrpd移除,他们留在服务器上。如果你的机器上已经有ip和路由,并且你的计算机可以相互ping通对方,则可以不需要这个部分。路由和规则的语法和 ip rule add /ip route add 相同。
#虚拟地址和虚拟路由的语法相同,如果没有指定dev元素,默认的接口为eth0
static_ipaddress
{
     192.168.1.1/24 dev eth0  scope  global                 ##指定192.168.1.1/24在eth0,范围为全局地址
     ......
}
static_routes
{
     192.168.2.0/24 via 192.168.1.100 dev eth0
     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 100 hoplimit 100advmss 101 rtt 102 rttvar 103 reordering 104 window 105  cwnd           106 ssthresh
     lock 107 rto_min 108 initcwnd 109 initrwnd 110 features ecn
     ...
}
static_rules
{
     from 192.168.2.0/24 table 1
     to 192.168.2.0/24 table 1
     from 192.168.28.0/24 to 192.168.29.0/26 table small iff 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
     ...
}
##VRRPD CONFIGURATION
     该选项包含4个子块: subblocks of VRRP script(s), VRRP synchronization group(s), VRRP gratuitous ARP and unsolicited neighbour advert delay group(s) and VRRP instance(s)
##VRRP script(s)
#添加一个用于定期指定的脚本,它的退出码将被所有的VRRP instance记录,它以非0的权重监视
vrrp_script {
     script   |   #执行脚本的路径
     interval     #调用脚本两次之间的间隔,默认为1秒
     timeout      #第二次调用脚本后多长时间没有回应的超时时间
     weight     #根据该权重,动态调整调用该脚本选项的vrrp实例优先级,默认是2. 当脚本执行码为0,权重大于0时,vrrp实例优先级增加;当脚本执行码为非0,权重小于0时,vrrp实例优先级减小,其他情况优先级不变。
                                                       #当该值为0时,不改变实例的优先级
     rise     ##设置脚本返回值连续为0的次数。加入该参数后,当脚本执行码连续为0的次数为rise次,且权重大于0时,vrrp实例优先级增加
     fall      ##设置脚本返回值连续为0的次数。加入该参数后,当脚本执行码连续为非0的次数为rfall次,且权重小于0时,vrrp实例优先级增加
}
##VRRP synchronization group(s)
 #字符串类型,共同故障转移的ip群组的名称
vrrp_sync_group VG_1 {
     group {
     inside_network      #每个vrrp_instance 的名称
     ouside_network      #每个vrrp_instance 的名称  暂没有查询到相关的详细文档,关于这两个选项的用户,网上的解释各有差异,在lvs的DR和NAT模式中,可能用法各不相同,后期验证
     }
     ##指定选项中带有参数是,需用引号,如“ notify_master /path/to_master.sh   master”
     notify_master /path/to_master.sh   #转换成master时,执行的脚本,网上的一种用法是,执行一个邮件发送脚本
     notify_backup /path/to_backup.sh   ##转换成backup时,执行的脚本,网上的一种用法是,执行一个邮件发送脚本
     notify_fault  /path/to_fault.sh    ##转换成fault状态是,执行的脚本,网上的一种用法是,执行一个邮件发送脚本

     #该一下几个选项,用户任何状态的转换。"notify“脚本在notify_* 之后调用,并使用keepalived提供的3个参数执行(所有notify中没有指定参数),如果使用下面选项,建议停用上面选项
     #$1        #"GROUP|INSTANCE",参数为GROUP或INSTANCE
     #$2        #指定GROUP或INSTANCE的名称
     #$3        #“MASTER"|"BACKUP"|"FAULT",指定转换的状态
     notify /path/notify.sh
     smtp_alter    #当状态发生变化后,发送通知邮件,使用配置文件上面”global_defs“定义的邮件地址

     global_tracking   #所有的VRRP共享相同的跟踪配置

}     #end of vrrp_sync_group VG_1
VRRP grantuitous ARP and unsolicited neighbour advert delay group(s)
#指定VRRP grantuitous ARP 和 unsolicited neighbour advert设置,这是用于当上游的角环境无法处理大量的ARPS/NAS流。
#当限制适用的接口为物理接口时,使用“interface”;当限制适用的接口为一组接口时,使用“interfaces”。
#如果已经设置了vrrp_grap_interval/vrrp_gna_interval,且在garp_group中没有指定的接口,将使用全局配置参数
garp_group {
     garp_interval    #设置发送gratuitous ARPs时,两次之间的延时时间。单位秒,分辨率微秒
     gna_interval      #设置两次unsolicited neighbour advers时间的延时时间。单位秒,分辨率微秒
     interface              #用于以上两个选项的物理接口
     interfaces {                          #用于以上两个选项的接口列表
         
         
          ...
     }
}   end of garp_group
VRRP instance(s)
#描述vrrp_sync_group中每个实例组的可移动ip。这里描述了两个ip(inside_network outsid和outside_network),在机器“my_host_name”,它们属于同一个组VG_1,并且在任何情况下都会一起转换状态。
#你将需要为“outside_network”写入另一个块中
vrrp_instance inside_network {
     state MASTER                #初始状态,MASTER|BACKUP ,一旦有其他机器加入,将会举行选举,具有最高优先级的机器将会成为MASTER,所以这个条目的并不重要
     interface eth0                #指定该实例用户vrrp的网卡,用于发送vrrp
     user_vmac []     #指定VRRP虚拟mac地址
     vmac_xmit_base          #从基本接口发送和接受vrrp消息,而不是VMAC接口
     native_ipv6                    #强制instance使用ipv6(当混合ipv4和ipv6的配置)
     dont_track_primary     #忽略VRRP接口错误
     track_interface {               #可选项,以下网卡中如果任意个网卡不通,所有的网卡都会进入FAULT状态
          eth0
          eth1
          eth2 weight <-254..254>
          ...
     }
     track_script {
             #增加一个跟踪脚本到网口上(是vrrp_script条目的名称)
           weight <-254..254>
     }

     #在网卡上,用于绑定vrrpd的默认ip是主ip,如果你想隐藏本地vrrpd,可以使用这个ip作为多播和单播vrrp报文的源地址(如果是多么,vrrpd将会接收到数据包,无论使用什么样的源IP地址)
     mcast_src_ip           #指定多播源ip地址
     unicast_src_ip           #指定单播源ip地址
     version <2 or 3>           #指定运行在这个网卡上的vrrp版本,默认使用的是全局配置的参数“vrrp_version”
     unicast_peer {           #不通过vrrp组播群组发送vrrp广播报文。相反,通过单播的方式将广告发送到一下ip列表中。在某些不支持多播的网络环境中
                    #使用VRRP  FSM(Finite State Machine有限状态机)和功能也是不错的。
          ...                         #指定的ip可以是IPV4 和IPV6
     }
     #指定网卡口设置,和全局参数一样,默认使用的是全局参数
     garp_master_delay     10
     garp_master_repeat     1
     garp_lower_prio_delay     10
     garp_lower_prio_repeat     1
     garp_master_refresh     10
     garp_master_refresh_repeat     2
     garp_interval     100
     gna_interval      100
     lower_prio_no_advert []
     #任意一个0-255之间的数字
     #用户区分运行在相同NIC(和相同套接字)上的vrrpd的多个实例
     virtual_router_id 51

     advert_int 1          #VRRP广告的时间间隔(e.g. 0.92)(使用默认值)

     #注意:2004年,RFC3768C从VRRPv2规范中删除了认证。使用此选项是不合规的,可能会导致一些问题。如果可能,尽量避免使用,除非使用单播是,他可能会有帮助。
     authentication {     #认证块
          #PASS|AH
          #PASS-Simple password(建议)
          #AH-IPSEC(不推荐)
          auth_type PASS
          auth_pass 12345668     #用户访问vrrpd的密码,在所有的机器上应该是相同的。只会使用前8个字符。
     }
     #指定状态在MASTER与BACKUP之间切换时,添加或删除的ip地址。其他与之有相同条目配置的机器,将会发送想法的状态转换。
     virtual_ipaddress {
          / brd  dev  scope  label