keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议
keepalived适合为没有状态变化的服务提供主备功能,例如:LVS、Nginx、Mycat、各种代理等。有状态变化的服务需要做主从同步。保证backup上线时与master状态基本相同。
基本工作流程:VIP漂移
将N台提供相同功能/服务的PC/服务器组成一个路由器组(vrrp_instance),这个组里面有一个master和多个backup,全部配置相同的VIP(虚拟IP),keepalived启动后VIP会加入master的网卡,master通过VIP对外提供服务。master会主动发VRRP广播,当backup一定时间收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,新master在网卡中加入配置的VIP接受外部请求。当master重新启动后backup自动下线进入待机状态(亦可配置成不自动替换)。这样的话就可以保证路由器组的高可用了。
基本配置说明
安装:CentOS 6.4以上使用yum安装
yum install keepalived -y
keepalived.conf
global_defs 全局配置
vrrpd
1. vrrp_script添加一个周期性执行的脚本。脚本的退出状态码会被调用它的所有的VRRP Instance记录。
2. vrrp_sync_group将所有相关的VRRP实例定义在一起,作为一个VRRP Group,如果组内的任意一个实例出现问题,都可以实现Failover
3. garp_group
4. vrrp_instance
vim /etc/keepalived/keepalived.conf
#主机配置:(从机主要不同点:router_id、state、priority)
global_defs {
notification_email {
linux@linux.com #报警接收邮箱
failover@firewall.loc
}
notification_email_from root@linux.com #报警发送邮箱
smtp_server 127.0.0.1 #指定smtp邮件服务器地址
smtp_connect_timeout 30 #指定smtp连接超时时间
router_id LVS_1 #负载均衡唯一标识,在局域网内应该是唯一的。故障发生时,邮件通知会用到
}
vrrp_instance VI_1 { #VRRP实例名称 主备一致
state MASTER #初始状态,备用服务器上为BACKUP
interface eth0 #监听本机的是eth0网卡端口,用来发VRRP包做心跳检测(ifconfig查看本机网卡接口、要开放广播)
virtual_router_id 51 #虚拟路由ID,取值在0-255之间,用来区分多个instance的VRRP组播,同一网段内ID不能重复;主备一致
advert_int 1 #检查间隔默认为1秒,即1秒进行一次master选举(可以认为是健康查检时间间隔)
priority 100 #优先级,备用服务器上为90
nopreempt #设置为不抢占(旧主机重新上线后,不替换当前主机)。默认是抢占
authentication { #通讯秘钥 主备一致
auth_type PASS #默认是PASS类认证
auth_pass 1111 #密码只识别前8位
}
virtual_ipaddress { #虚拟ip地址,可以有多个地址每个地址占一行,不需要子网掩码,主备一致
192.168.1.217 #VIP地址(对外暴露),IP添加到eth0网卡
192.168.1.218/24 #24位掩码
192.168.1.219 dev eth0
}
#virtual_ipaddress 中的ip需要通过ip add指令查看绑定状态(ipconfig看不到)。
#相当于linux指令 ip addr add 192.168.1.217 dev eth0
#正常情况只有MASTER的网卡中会有VIP,从机没有。当出现多机网卡存在VIP时,可能出现了脑裂问题
}
启动
systemctl start keepalived(在yum安装时直接使用此命令启动服务)
Shell脚本
正常情况下当master的keepalived停止运行时,backup收不到master的心跳会触发优先级最高的backup变成新master,VIP漂移到新master。
但如果希望keepalived监控本机的某个应用,应用挂掉后本机keepalived也停止运行主动触发VIP漂移。
此时需要keepalived执行sh脚本,检查目标功能/服务是否正常,若异常主动停止本机keepalived触发VIP漂移。
sh可以检查Nginx、Mysql、Http服务等等...
脑裂
比如两台keepalived一主一备,中间通信中断了,但是两台机器都正常运转。此时主机还正常可用,从机检测不到主机升级为主机。出现了一个集群双主的情况。
1、添加冗余的心跳线(网线/串口等),增加网络可高度,例如:双心跳线(心跳线也HA),,尽量减少“裂脑”发生几率;
2、监控keepalived从机出现ping不通主机IP时,无论主机是否真的挂了,从机可能会变成主机,已经出现脑裂风险了。此时发送报警人工检查,或是通过程序尝试强制终止主机上的keepalived进程。
注意监控从机比较保险。如果监控主机,主机ping不通从机,并不能确定从机是已经切换为主机了还是真的挂了。不确定是否真的存在脑裂风险。