Keepalived - 高可用解决方案¶
Keepalived是一个基于VRRP [1] 协议来实现的服务高可用方案,主要有三个模块,分别是 core、check 和 VRRP。
core 模块为 keepalived 的核心,负责主进程的启动、维护以及全局配置文件的加载和解析,check 负责健康检查,包括常见的各种检查方式,VRRP 模块是来实现 VRRP 协议的。
基于这些模块,keepalived 采用了多进程的设计模式,每个进程对应一个模块。
安装¶
apt-get install keepalived
配置¶
keepalived只有一个配置文件keepalived.conf,里面主要包括以下几个配置区域,分别是global_defs、static_ipaddress、static_routes、vrrp_script、vrrp_instance和virtual_server。 [2]
global_defs¶
global_defs用于设置 keepalived 的通知机制和标识
global_defs
{
notification_email
{
lfzyx@lfzyx.org
}
notification_email_from lfzyx@lfzyx.org
smtp_server mail.lfzyx.org
smtp_connect_timeout 30
router_id hostname
}
- notification_email 指定 keepalived 发生事件时,用邮件通知的email地址
- router_id 设置机器的标识
vrrp_script¶
告诉 keepalived 在什么情况下降低优先级,可以有多个 vrrp_script
vrrp_script chk_nginx
{
script "pidof nginx"
interval 1
weight -5
fall 1
rise 2
}
- script : 自己写的检测脚本。也可以是一行命令如 pidof nginx
- interval 2 : 每2s检测一次
- weight -5 : 检测失败(脚本返回非0)则优先级 -5
- fall 2 : 检测连续 2 次失败才算确定是真失败。会用weight减少优先级(1-255之间)
- rise 2 : 检测 2 次成功就算成功。但不修改优先级
vrrp_instance¶
vrrp_instance用来定义对外提供服务的VIP区域及其相关属性 [3]
vrrp_instance MASTER
{
state MASTER
interface eth0
mcast_src_ip 10.10.10.71
virtual_router_id 73
priority 200
advert_int 1
authentication
{
auth_type PASS
auth_pass passwd
}
virtual_ipaddress
{
10.10.10.73
}
track_script
{
chk_nginx
}
}
- state : 指定instance(Initial)的初始状态,但启动后会发生竞选,高优先级的会抢占为MASTER
- interface : 实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的
- mcast_src_ip :发送多播数据包时的源IP地址,如果没有设置那么就用绑定的网卡的 primary IP
- virtual_router_id : 这里设置VRID,这里非常重要,相同的VRID为一个组,他将决定多播的MAC地址
- priority : 设置本节点的优先级,优先级高的为master
- advert_int : 检查间隔,默认为1秒。这就是VRRP的定时器,MASTER每隔这样一个时间间隔,就会发送一个advertisement报文以通知组内其他路由器自己工作正常
- authentication : 定义认证方式和密码,主从必须一样
- virtual_ipaddress : 这里设置的就是VIP,也就是虚拟IP地址,他随着state的变化而增加删除,当state为master的时候就添加,当state为backup的时候删除
- track_script : 引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
参考文献
[1] | VRRP全称 Virtual Router Redundancy Protocol,即 虚拟路由冗余协议。可以认为它是实现路由器高可用的容错协议,即将N台提供相同功能的路由器组成一个路由器组(Router Group),这个组里面有一个master和多个backup,但在外界看来就像一台一样,构成虚拟路由器,拥有一个虚拟IP(vip,也就是路由器所在局域网内其他机器的默认路由),占有这个IP的master实际负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。master会发组播消息,当backup在超时时间内收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,保证路由器的高可用。 |
[2] | linux/keepalived at master · chenzhiwei/linux |
[3] | Nginx+Keepalived实现站点高可用 | Sean’s Notes |