keepalived介绍
- Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
- Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。
keepalived服务的三个重要功能
- 管理LVS负载均衡软件
- 实现LVS集群节点的健康检查中
- 作为系统网络服务的高可用性(failover)
keepalived高可用故障切换转移原理
- 在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活看,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
keepalived服务的工作原理
- keepalived高可用是通过VRRP进行通信的,VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
- 在 Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP组播包,告诉备它还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的组播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。
keepalived配置文件详解
! Configuration File for keepalived
global_defs { ##全局配置
notification_email { ##定义报警收件人邮件
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc ##定义报警发件人邮箱
smtp_server 192.168.200.1 ##邮箱服务器的地址
smtp_connect_timeout 30 ##定义邮箱超时时间
router_id LVS_DEVEL ##定义路由标识信息,同局域网内唯一
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 { ##定义示例
state MASTER ##指定keepalived节点的初始状态,可选值为master|backup
interface eth0 ##VRRP实例绑定的网卡接口,用户发送VRRP包
virtual_router_id 51 ##虚拟路由的ID,同一集群要一致
priority 100 ##定义优先级,按优先级来决定主备角色,优先级越大越优先
nopreempt ##设置不抢占
advert_int 1 ##主备通讯时间间隔
authentication { ##配置认证
auth_type PASS ##认证方式,此处为密码
auth_pass 1111 ##同一集群中的keepalived配置里的此处必须一致,推荐使用8位随机数
}
virtual_ipaddress { ##配置要使用的VIP地址
192.168.200.16
192.168.200.17
192.168.200.18
}
}
virtual_server 192.168.200.100 443 { ##配置虚拟服务器
delay_loop 6 ##健康检查的时间间隔
lb_algo rr ##LVS调度算法
lb_kind NAT ##LVS模式,模式有三种NAT、TUN、DR
persistence_timeout 50 ##持久化超时时间,单位是秒
protocol TCP ##第4层协议
real_server 192.168.201.100 443 { ##定义真实处理请求服务器
weight 1 ##给服务器指定权重,默认为1
SSL_GET {
url {
path / ##指定要检查的URL路径
digest ff20ad2481f97b1754ef3e12ecd3a9cc ##摘要信息
}
url {
path /mrtg/
digest 9b3a0c85a887a256d6939da88aabd8cd
}
connect_timeout 3 ##连接的超时时间
nb_get_retry 3 ##get尝试次数
delay_before_retry 3 ##在尝试之前延迟多长时间
}
}
}
配置文件中配置段详解
- vrrp_instance段配置
nopreempt :设置为不抢占。默认抢占,当高优先级的机器恢复后,会抢占低优先级的机器成为MASTER,而不抢占,则允许低优先级的机器继续成为MASTER,即使高优先级的机器已经上线。如果要使用这个功能,则“state”(初始化)状态必须为BACKUP。
preempt_delay :设置抢占延迟,单位是秒,范围0-1000,默认为0。发现低优先级的MASTER后多少秒开始抢占。
- vrrp_script段配置
作用:添加一个周期性执行的脚本。脚本的退出状态码会被调用它所有的VRRP Instance记录。
注意:至少有一个VRRP实例调用它并且优先级不能为0,优先级范围是1-254。
vrrp_script < SCRIPT_NAME > {
…
}
选项说明:
script “/path/to/somewhere”——指定要执行的脚本的路径。
interval < INTEGER >——指定脚本执行的间隔
timeout < INTEGER>——指定在多少秒后,脚本被认为执行失败
weight < -254~254 >——调整优先级,默认为2
rise < INTEGER >——执行成功多少次才认为是成功
fall < INTEGER >——执行失败多少次才认为失败
user < USERNAME> [GROUPNAME]——运行脚本的用户和组
init_fail——假设脚本初始状态是失败状态
//weight说明:
1)如果脚本执行成功(退出状态码为0),weight大于0,则priority增加
2)如果脚本执行失败(退出状态码为非0),weight小于0,则priority减小
其他情况,priority不变。
- real_server段配置
weight < INT >——给服务器指定权重,默认为1
inhibit_on_failure——当服务器健康检查失败时,将其weight设置为0,而不是重Virtual Server中移除
notify_up < STRING >——当服务器健康检查成功时,执行的脚本
notify_down < STRING >——当服务器健康检查失败时,执行的脚本
uthreshold < INT >——到这台服务器的最大连接数
lthreshold < INT >——到这台服务器的最小连接数
- tcp_check段配置
connect_ip < IP ADDRESS >——连接的IP地址。默认是“real_server”的ip地址
connect_port < PORT>——连接端口。默认是"real_server"的端口
bindto < IP ADDRESS >——发起连接的接口地址
bind_port < PORT >——发起连接的源端口
connect_timeout < INT >——连接超时时间。默认是5s
fwmark < INTEGER >——使用fwmark对所有出去的检查数据包进行标记
warmup < INT >——指定一个随机延迟,最大为N秒。可防止网络阻塞,如果为0,则关闭该功能
retry < INIT >——重试次数。默认是1次
delay_before_retry < INT >——默认是1秒。在重试之前延迟多少秒