keepalived.conf
global_defs
global_defs 是定义全局的配置信息
global_defs {
router_id 10086
notification_email {
wangjj@hrloo.com
}
notification_email_from jiankong@staff.tuge.com
smtp_server mail.tuge.com
smtp_connect_timeout 10
}
global_defs {
notification_email {
admin@example.com
admin2@example.com
}
notification_email_from admin@example1.com
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 <INTERFACE> <VRRP_INSTANCE> [id <SYNC_ID>] [MAXLEN <LEN>] [port <PORT>] [ttl <TTL>] [group <IP ADDR>]
#该选项没有详细的官方文档说明,根据测试发现,该参数作用于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)
- router_id : 用户标识本节点的名称,通常为hostname 。也可以不配置
- notification_email: 是 Keepalived 状态发生变化时使用 email 通知的对象。这里的事件例如:vip漂移
- notification_email_from : 定义发送邮件的邮箱
- smtp_server :邮件服务器,pop地址
- smtp_connect_timeout :连接超时时间,单位是 秒
vrrp_script
vrrp_script 定义 vip 状态判断的脚本
vrrp_script check_nginx {
script "/root/check_nginx.sh"
interval 2
weight 2
}
- script: 脚本路径,需要是具有可执行权限,根据执行完成后的返回值判断脚本是否执行成功
- interval: 监控时间间隔
- weight: 负载参数
vrrp_instance 实例定义块
vrrp_instance VI_1 {
state MASTER
interface eth0
lvs_sync_daemon_inteface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_nginx
}
virtual_ipaddress {
192.168.200.100
192.168.200.101
192.168.200.102
}
}
- vrrp_instance vrrptest : 定义vrrptest实例
- state: 服务器状态,BACKUP和MASTER,建议都配置成 BACKUP.状态只有MASTER和BACKUP两种,并且要大写,MASTER为工作状态,BACKUP是备用状态。
- interface: VIP监听的网卡,
- lvs_sync_daemon_inteface: 这个默认没有,相当于心跳线接口,DR模式用的和上面的接口一样,也可以用机器上的其他网卡eth1,用来防止脑裂。
- virtual_router_id: routeid,虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换.虚拟路由标识,同一个vrrp_instance的MASTER和BACKUP的vitrual_router_id 是一致的。
- priority: 服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER.优先级,同一个vrrp_instance的MASTER优先级必须比BACKUP高
- advert_int: 服务器之间的存活检查时间.#MASTER 与BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒。
authentication
- auth_type: 认证类型,验证authentication。包含验证类型和验证密码。类型主要有PASS、AH 两种,通常使用的类型为PASS,据说AH 使用时有问题。验证密码为明文,同一vrrp 实例MASTER 与BACKUP 使用相同的密码才能正常通信
- auth_pass: 认证密码,一组lvs 服务器的认证密码必须一致,
track_script: 执行监控nginx进程的脚本
- virtual_ipaddress: 虚拟IP地址,可以有多个地址,每个地址占一行,不需要子网掩码,同时这个ip 必须与我们在lvs 客户端设定的vip 相一致!
虚拟服务器定义块
虚拟IP,来源与上面的虚拟IP地址,后面加空格加端口号
virtual_server 192.168.200.100 443 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.201.100 80 {
weight 1
TCP_CHECK
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
- virtual_server: 虚拟IP,来源与上面的虚拟IP地址,后面加空格加端口号
- delay_loop: 健康检查间隔,单位为秒
- lb_algo: 负载均衡调度算法,一般用wrr、rr、wlc
- lb_kind: 负载均衡转发规则。一般包括DR,NAT,TUN 3种
- persistence_timeout: 会话保持时间,会话保持,就是把用户请求转发给同一个服务器,不然刚在1上提交完帐号密码,就跳转到另一台服务器2上了
- protocol: 转发协议,有TCP和UDP两种,一般用TCP,没用过UDP
real_server
真实服务器,包括IP和端口号
- weight: 权重,数值越大,权重越高
- TCP_CHECK: 通过tcpcheck判断RealServer的健康状态
- connect_timeout: 连接超时时间
- nb_get_retry: 重连次数
- delay_before_retry: 重连时间间隔
- connect_port: 检测端口
注意: 其实配置文件中主要要修改的选项没有很多,有三个参数要注意 route_id XXX #MASTER和BACKUP不同 virtual_router_id 51 #同一个实例下,MASTER和BACKUP相同 priority 100 #优先级,同一个实例下,MASTER高于BACKUP