keepalived
Keepalived起初是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康状态检查功能---判断LVS负载调度器、节点服务器的可用性、及时隔离并替换为新的服务器,当故障主机恢复后重新将其加入集群。可以实现高可用的VRRP/HSRP功能。因此,keepalived除了能够管理LVS软件外,还可以作为其他服务(Nginx、Haproxy、MySQL等)的高可用解决方案软件。
早期的LVS软件需要通过命令行或脚本实现管理,并且没有针对LVS节点的健康检查功能。为了解决LVS的这些使用不便的问题,keepalived就诞生了,可以说keepalived软件起初是专门解决LVS的缺陷而诞生的。因此,keepalived和LVS的通常情况下是同时出现在集群系统中的。
Keepalived可以通过在自身的keepalived.conf配置文件里配置LVS的节点IP和相关参数实现对LVS的直接管理;除此之外,当LVS集群中的某一个甚至是几个节点服务器同时发生故障无法提供服务时,keepalived服务会自动将失效的节点服务器从当前的工作列队中移除,并将请求转交到正常节点服务器中,从而保证用户的访问不受影响。当故障节点服务器被修复后,再自动加入工作列队,继续为用户提供服务。
Keepalived可以实现任意两台主机之间,例如Master和Backup主机之间的故障转移和自动切换,这个主机可以是普通的不能停机的业务服务器,也可以是LVS负载均衡、反向代理服务器。
Keepalived高可用功能实现的简单原理为,两台主机同时安装配置keepalived软件并启动服务,开始正常工作时,由角色为Master的主机获得所有资源并对用户提供服务,而Backup主机为备份主机,暂时不为用户提供服务,但是处于监听状态;当Master主机出现故障时,Backup通过keepalived高可用机制也发现了Master服务器无法正常工作,因此自动接管Master主机的所有工作,此时必然有一段时间处于用户无法正常访问服务,由于此机制响应速度较快,因此在进行故障切换时,用户几乎无法感知服务器有异常。当Master主机故障修复后,又会通过“抢占”机制获取对用户的服务权,继续为用户提供服务,而此时的Backup依旧为备服务器。也就是说,如果Master主机正常运行,那么Backup主机将一直处于待命状态。
Keepalived高可用服务对Master、Backup之间的故障切换转移是通过VRRP来实现的,在keepalived服务正常工作时,主Master节点会不断地向备服务器发送(以组播方式)心跳消息,用于告诉Backup主机我当前的状态是正常的,当Master主机出现故障时,就无法给Backup主机发送心跳消息,此时Backup主机也迟迟未接收到Master的心跳消息,因此Backup判断Master主机无法正常为用户提供服务,因此Backup主机接管了Master主机的所有服务。也就是说Backup主机从之前的待命状态变成了工作状态。当Master主机经过修复恢复正常后,通过对比双方的优先级,此时的Master主机将会从Backup主机中夺回服务权,而Bakcup主机此时继续待命。
Keepalived采用虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)热备份协议,以软件的方式实现Linux服务器的多机热备功能,VRRP是针对路由器的一种备份解决方案---由多台路由器组成一个热备份组,通过共用虚拟IP地址(简称VIP)对外提供服务,每个热备组内同一时刻只能有一台路由器提供服务,其他路由器处于冗余状态,若当前在线的路由器失效,则其他路由器会自动接替(优先级决定接替顺序)虚拟IP地址为客户继续提供服务。热备组内的每台路由器都有可能成为主路由器,虚拟路由器的IP地址可以在热备组内的路由器之间进行转移,所以也称为漂移IP地址,漂移地址的实现不需要配置网卡子接口,而是通过keepalived配置文件实现。
VRRP协议实现拓扑图如下图所示:
Keepalived安装方式一般通过编译安装、rpm包/yum安装两种方式实现,这两种方式安装都非常简单,因为keepalived安装时所需要依赖的包极少,可以忽略不计。在特殊环境下,可能有附加的包需要安装,具体根据实际情况实施安装,在此通过yum方式安装keepalived软件,不管哪种安装方式,使用时的配置都是一样的。
# yum install -y keepalived ipvsadm
# systemctl enable keepalived
# rpm -qa keepalived
keepalived-1.2.13-8.el7.x86_64
keepalived配置文件
在keepalived高可用功能模块中,keepalived配置文件主要包含三部分:
全局配置区域:主要用来定义keepalived故障通知机制和Route ID标识
VRRP实例定义区域:此区域主要定义具体服务的实例配置,包括keepalived主备状态、接口、优先级、认证方式和IP信息等。
LVS负载的服务器池区域:定义VIP地址、健康状态检查时间、LVS负载均衡调度算法、负载均衡模式、节点服务器IP、权重、重连时间等信息。
全局配置区域:
# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived //等同于#,表示这是一个关于keepalived的配置文件
global_defs { //全局配置区域起始
notification_email { //定义一个邮件通知项目
acassen@firewall.loc //此三行定义收件人,一般为管理员邮箱地址
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc //定义发件人地址,可以专门为此服务器申请一个邮箱地址用于发送keepalived信息邮件
smtp_server 192.168.200.1 //定义邮件服务器IP地址
smtp_connect_timeout 30 //定义连接邮件服务器的超时时间
router_id LVS_DEVEL //定义当前服务器主机名,具有唯一性
}
注意:在以上的邮件配置方面,生产环境中可以不用配置,此类报警通告可通过更加专业的监控工具来时间,如zabbix、nagios等。而花括号{}表示一个项目的开始和截止,因此一个项目开始若有花括号{,那么结尾也应该有个花括号}。
VRRP实例定义区域:
vrrp_instance VI_1 { //定义第一个vrrp实例,实例名称为VI_1,主和备可以不一样,在主中的多个实例中,此名称不应该一样
state MASTER //声明当前服务器角色为Master主服务器,BACKUP为备
interface ens32 //当前用于和集群中其他主机通信的网卡编号,而不是随意的一个编号