Keepalived介绍:
Keepalived是Linux下一个轻量级的高可用解决方案;起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态。它根据TCP/IP参考模型的第三、第四和第五层交换机机制检测每个服务节点的状态,如果某个服务节点出现异常,或工作出现故障,Keepalived将检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后,Keepalived又可以自动将此服务节点重新加入服务器集群中,这些工作全部自动完成,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。
Keepalived后来又加入了VRRP的功能,VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行。因此,Keepalived一方面具有服务器状态检测和故障隔离功能,另一方面也具有HA cluster 功能。
VRRP协议与工作原理
VRRP,它是一种主备模式的协议,通过VRRP可以在网络发生故障时透明地进行设备切换而不影响主机间的数据通信;这其中涉及两个概念:物理路由器和虚拟路由器。
VRRP可以将两台或多台物理路由器设备虚拟成一个虚拟路由器,这个虚拟路由器通过虚拟IP(一个或多个)对外提供服务,而在虚拟路由器内部是多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务,这台物理路由器被称为主路由器(处于MASTER角色)。一般情况MASTER由选举算法产生,它拥有对外服务的虚拟IP,提供各种网络功能,如ARP请求、ICMP、数据转发等。而其他物理路由器不拥有对外的虚拟Ip,也不提供对外网络功能,仅仅接收MASTER的VRRP状态通告信息,这些路由器被统称为备份路由器(处于BACKUP角色)。当主路由器失效时,处于BACKUP角色的备份路由器将重新进行选举,产生一个新的主路由器进入MASTER角色继续提供对外服务。
每个虚拟路由器独有一个唯一标识,称为VRID,一个VRID与一组IP地址构成了一个虚拟路由器。在VRRP协议中,所有的报文都是通过IP多播形式发送的,而在一个虚拟路由器中,只有处于MASTER角色的路由器会一直发生VRRP数据包,处于BACKUP角色的路由器只接收MASTER发送过来的报文信息,用来监控MASTER运行状态,因此,不会发生BACKUP抢占的现象,除非它的优先级更高。而当MASTER出现故障,多台BACKUP就会进行选举,优先级最高的BACKUP成为新的MASTER,这种选举并进行角色切换的过程非常快,因而保证了服务的持续可用性。
Keepalived工作原理
keepalive运行机制如下:
在网络层,运行着4个重要的协议:互联网协议IP、互联网控制报文协议ICMP、地址转换协议ARP以及反向地址转换协议RARP。Keepalived在网络层采用的最常见的工作方式是通过ICMP协议向服务器集群中的那个节点发送一个ICMP数据包(类似于ping实现的功能),如果某个节点没有返回响应数据包,那么认为此节点发生了故障,Keepalived将报告次节点失效,并从服务器集群中剔除故障节点。
在传输层,提供了两个主要的协议:传输控制协议TCP和用户数据协议UDP。传输控制协议TCP可以提供可靠的数据传输服务、Ip地址和端口代表TCP的一个连接端。要获得TCP服务,需要在发送机的一个端口上和接收机的一个端口上建立连接,而Keepalived在传输层就是利用TCP协议的端口连接和扫描技术来判断集群点是否正常的。比如,对于常见的WEB服务默认的80端口、SSH服务默认的22端口等,Keepalived一旦在传输层探测到这些端口没有响应数据返回,就认为这些端口发生异常,然后强制将此端口对应得节点从服务器集群组中移除。
在应用层,可运行FTP、TELNET、SMTIP、DNS等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived的工作方式;例如:用户可以通过编写程序来运行keepalived。而keepalived将根据用户的设定检测各种程序或服务是否运行正常,如果Keepalived的检测结果与用户设定不一致时,Keepalived将把对应的服务从服务器中移除。
Keepalived的组件:
核心组件:
VRRP Stack:实现HA集群中失败切换(Failover)功能。Keepalived通过VRRP功能能
再结合LVS负载均衡软件即可部署一个高性能的负载均衡集群系统。
ipvs wrapper:可以将设置好的IP VS规则发送到内核空间并提交给IP VS模块,最终实
现 IP VS模块的负载均衡功能。
checkers:这是Keepalived 最基础的功能,也是最主要的功能,可实现对服务器运行状
态检测和故障隔离。
HA Cluster的配置前提:
(1) 各节点时间必须同步;
ntp, chrony
(2) 确保iptables及selinux不会成为阻碍;
(3) 各节点之间可通过主机名互相通信(对KA并非必须);
建议使用/etc/hosts文件实现;
(4) 确保各节点的用于集群服务的接口支持MULTICAST通信;
D类:224-239;
Keepalived安装与配置:
Centos6.4以后版本可以直接yum安装:
yum install keepalived
程序环境:
主配置文件:/etc/keepalived/keepalived.conf
主程序文件:/usr/sbin/keepalived
Unit File:keepalived.service
Unit File的环境配置文件:/etc/sysconfig/keepalived
根据配置文件所实现的功能,将Keepalived配置分三类:
Global Configuration
VRRPD 配置、LVS配置
全局配置以”global_defs”作为标识,在“global_defs”区域内的都是
全局配置选项:
global_defs {
notification_email {
}
notification_email_from
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_mcast_group4 224.110.129.18
}
notification_email :用于设置报警邮件地址,可以设置多个,每行一个。注意,如果要开启邮 件报警,需要开启本机的Sendmail服务。
notification_email_from :用于设置邮件的发送地址,真正的能发邮件的地址。
smtp_server:用于设置邮件的smtp server地址
smtp_connect_timeout:设置smtp server的超时时间
router_id :表示运行keepalived服务器的一个标识,是发邮件时显示在邮件主题中的信息
vrrp_mcast_group4 :多播地址段
VRRP配置段主要用来配置节点角色(主或从)、绑定的网络接口、节点间验证机制、集群 服务IP等。
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.16
192.168.200.17
192.168.200.18
}
track_interface {
eth0
eth1
…
}
VRRP 配置以” vrrp_instance“作为标识,包含了若干配置选项:
vrrp_instance:是VRRP实例开始的标识,后跟VRRP实例名称
state:用于指定Keepalived的角色,MASTER表示此主机是服 务器,BAVKUP表示此 主机是备用服务器。
interface:虚拟IP配置指定的接口
virtual_router_id:虚拟路由标识,它是一个数字,同一个 VRRP配置段的唯一标识, 即在同一个vrrp_instance下,MASTER和BACKUP必须是一致的。
priority:用于定义节点优先级,数字越大优先级越高。
advert_int:设定MASTER和BACKUP主机之间同步检查的时间间隔,单位是秒。
authentication:用于设定节点间通信验证类型和密码,验证类型主要有PASS(简单字 符串认证,支持前8位,可以用:openssl rand -base64 8 获取随机密码)和AH两 种,在一个vrrp_instance下,MASTER和BACKUP必须使用相同的密码才能正常通信。
virtual_ipaddress:用于设置虚拟IP地址(VIP)。
track_interface:配置要监控的网络接口,一旦接口出现故障,则转为FAULT状态;
nopreempt:定义工作模式为非抢占模式;可以实现主节点故障恢复后不再切回到主节 点,让服务一直在备用节点工作,直到备用节点出现故障才会进行切换。在使 用不抢占时,只能在”state“状态为BACKUP的节点上设置,而且这个节点的优 先级必须高于其他节点。
preempt_delay 300:抢占式模式下,节点上线后触发新选举操作的延迟时长;
定义通知脚本
notify_master:指定当Keepalived进入MASTER状态时要执行的脚本,这个脚本可以是一个状 态报警脚本,也可以是一个服务管理脚本。Keepalived允许脚本出入参数,因此灵活性很强。
notify_backup:当Keepalived进入BACKUP状态时要执行的脚本,这个脚本可以是一个状态报警 脚本,也可以是一个服务管理脚本。
notify_fault:指定当Keepalived进入FAULT状态时要执行的脚本,脚本功能与前两个类似。
notify
实验: 单主配置示例
环境:
两台主机分别是:172.16.252.18/16(node1) 配置BACKUP
172.16.252.19/16 (node2) 配置MASTER
两台主机分别配置:/etc/keepalived/keepalived.conf
两台主机:systemctl restart keepalived
启动之后,可以在MASTER的主机上查看:
ip a l
下图中: 可以看出MASTER主机,一直向多播地址发送信息.
模拟MASTER主机宕机 :
iptables -A OUTPUT -d 224.110.129.18 -j REJECT
systemctl stop keepalived
BACKUP主机上:显示虚拟地址加进来了
ip a l 可以查看到虚拟地址了。如果MASTER主机再启动后,由于优先级高,VIP虚拟地址又被 抢回来了!
双主模型的配置:
所谓双主模型对于VRRP来讲还是单主,所不同的是在同一个接口上,配置了多个虚拟路由器。
在上个实验基础上配置:
在note2主节点上配置:
同一个接口上同一组物理服务器上配置第二个虚拟路由器:
vim /etc/keepalived/keepalived.conf
在原来基础上添加下图配置段:
同理在note1节点上配置:
测试效果:
note2: systemctl stop keepalived.service
note1: systemctl start keepalived.service
同理:把note2主机启动起来,查看效果,由于优先级高,会拿走一个地址;而note1主机就一个虚拟地址。
通知脚本的使用方式:
脚本的调用方法:
notify_master “/etc/keepalived/notify.sh master”
notify_backup “/etc/keepalived/notify.sh backup”
notify_fault “/etc/keepalived/notify.sh fault”
在单主模型的实验环境下:
在note1和note2节点上,分别执行以下操作:
cd /etc/keepalived/
vim notify.sh
note1、note2两台主机上:
systemctl stop keepalived
vim /etc/keepalived/keepalived.conf
当note1备用节点先启动时,它会变成MASTER,虚拟地址被添加:
systemctl restart keepalived.service
当再启动note2时,它从没有启动到变成主节点,而当前的note1变成了备用节点:
note2: systemctl restart keepalived.service
note1上查看:
root 又收到一份邮件:
而note2主机上:变成了主节点,虚拟地址被添加了:
Keepalived 简单配置,以及通知脚本的运用就介绍到这里。之后的高级集群架构,后期会继续整理,更新!
本文为马哥Linux运维学员原创,首发于178linux.com