keepalived高可用
一:相关术语解释:
1.HA: High Available :高可用
2.节点(node)
运行HA进程的一个独立主机,称为节点,节点是HA的核心组成部分,每个节点上运行着操作系统和高可用软件服务,在高可用集群中,节点有主次之分,分别称之为主节点/备份节点,每个节点拥有唯一的主机名,并且拥有属于自己的一组资源,例如,磁盘,文件系统,网络地址和应用服务等,主节点上一般运行着一个或多个应用服务,而备节点一般处于监控状态
3.资源(resource)
资源是一个节点可以控制的实体,并且当节点发生故障时,这些资源能够被其他节点接管,HA集群软件中,可以当做资源的实体有:
(1)磁盘分区、文件系统
(2)IP地址VIP
(3)应用程序服务
(4)NFS文件系统
4.事件(event)
也就是集群中可能发生的事情,例如节点系统故障,网络连通故障,网卡故障,应用程序故障等,这些事情都会发生节点资源发生转移,HA的测试也是基于这些事情来进行的
5.动作(action)
事件发生时HA的响应方式,动作是由shell脚本控制的,例如当某个节点发生故障后,备份节点将通过事先设定好的执行脚本进行服务的关闭或启动,进而接管故障节点的资源
二、keepalived简介
keepalived 是linux下一个轻量级的高可用解决方案,它与HACMP实现功能类似,都可以实现服务或者网络的高可用,但是又有差别:hacmp是一个专业的、功能完善的高可用软件,它提供了HA软件所需的基本功能,比如心跳检测和资源接管,检测集群中的系统服务,在集群节点间转移共享ip地址所有者等,hacmp功能强大,但是部署和使用相对麻烦,同时也是商业化软件,与hacmp相比,keepalived主要是通过虚拟路由冗余来实现高可用功能,虽然他没有hacmp功能强大,但是keepalived部署使用相对简单,所有配置只需要一个配置文件即可完成.
三、keepalived的用途
keepalived起初是为lvs设计的,专门用来监控集群系统中各个服务节点的状态,如果某个服务节点出现异常,或工作出现故障,keepaived将检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后,keepalived又可以自动将此服务节点重新加入到集群中,这些工作全部自动完成,不需要人工干预,需要人工完成的只是修复故障节点。
keepalived后来又加入了VRRP 的功能,VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写,它出现的目的是为了解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断的、稳定的运行,因此,keepalived一方面具有服务器状态监测和故障隔离功能,另一方面也具有HA Cluster(高可靠性服务器集群)功能,下面详细介绍下VRRP协议的实现过程
四、VRRP协议与工作原理
在现实的网络环境中,主机之间的通信都是通过配置静态路由完成的,而主机之间的路由器一旦出现故障,通信就会失败,因此在这种通信模式中,路由器就成了一个单点瓶颈,为了解决这个问题就引入了VRRP协议.VRRP协议是一种主备模式的协议,通过VRRP可以在网络发生故障时透明地进行设备切换不影响主机间的数据通信,这其中涉及两个概念:物理路由器和虚拟路由器
VRRP可以将两台或者多台物理路由器设备虚拟成一个虚拟路由器,这个虚拟路由器通过虚拟IP(一个或多个)对外提供服务,二在虚拟路由器内部,是多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务,这台物理路由器被称之为主路由器(处于master状态角色)。它拥有对外提供的虚拟ip,提供各种网络功能,比如arp请求、icmp、数据转发等,二其他物理路由器不拥有对外提供的虚拟ip,也不提供对外网络功能,仅仅接收master的vrrp状态通告信息,这些路由器被统称为备份路由器(处于backup角色)。当主路由器失效时,处于backup角色的备份路由器将重新进行选举,产生一个新的主路由器进入master角色继续对外服务,整个切换过程对于用户来说完全透明
在一个虚拟路由器中,只有处于master角色的路由器会一直发送vrrp数据包,处于backup角色的路由器只接受master发过来的报文信息,用来监控master运行状态,因此,不会发生master抢占的现象,除非它的优先级更高,而当master不可用时,backup也就无法收到master发过来的报文信息,于是就认定master出现故障,接着多台backup就会进行选举,优先级最高的backup将成为新的master,这种选举并进行角色的过程非常快,因此也就保证了服务的持续可用性
五、keepalived的体系结构
keepaived是一个高度模块化的软件,结构简单,但扩展性很强,下图是官方给出的keepalived的体系结构
可以看出来,keepalived的体系结构从整体上分为两层,分别是用户空间层和内核空间层。下面介绍一个keepalived两层结构的详细组成及实现的功能。
内核空间层处于最底层,它包括ipvs和netlink两个模块。ipvs模块是keepalived引入的一个第三方模块,通过ipvs可以实现基于ip的负载均衡集群。ipvs默认包含在lvs集群软件中。
这里有一个误区,由于keepalived可以和ipvs一起很好的工作,所以很多初学者都认为keepalived是一个负载均衡的软件,这种理解是错误的
步骤:
实验思维图:
作用:如果没有keepalived,只是LVS的话,那么如果其中一个RS down机,则还会继续访问,然后报错,说明服务器还是会按照负载均衡的原则给RS分配,但是搭建keepalived,如果RS2 down机,那么就会只访问另一个RS机,不会访问这台。
1.DS1(master)配置:
# yum - install keepalived
# ifconfig ens33:0 192.168.29.250 broadcast 192.168.29.250 netmask 255.255.255.255 up
# route add -host 192.168.29.250 dev ens33:0
修改配置文件:/etc/keepalived/keepalived.conf
! Configuration File for keepalived
#全局配置
global_defs {
notification_email {
#收件人地址
}
#邮件服务器
}
VRRP配置
vrrp_instance VI_1 {
state MASTER #角色类型MASTER|BACKUP
interface ens33 #网卡名称
virtual_router_id 49 #虚拟路由id(需要与BACKUP一致)
priority 100 #优先级
advert_int 1 #每1秒检查一次
#nopreempt #非抢占模式
authentication { #主备之间必须一样
auth_type PASS #认证类型
auth_pass 1111 #认证密码
}
virtual_ipaddress {
192.168.254.250 #虚拟ip(vip)
}
}
#LVS配置
virtual_server 192.168.254.250 80 {
delay_loop 3 #健康检查时间间隔
lb_algo rr #负载均衡调度算法
lb_kind DR #负载均衡转发规则
protocol TCP #协议
real_server 192.168.254.18 80 { #要监控的real_server的ip和端口号
weight 1 #权重
TCP_CHECK { #基于tcp协议的检查
connect_timeout 3 #连接时间超时
retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
}
}
real_server 192.168.254.19 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
启动keepalived服务
# systemctl restart keepalived.service
DS2端配置:
和DS1端一模一样,只有配置文件中有三点不一样
VRRP配置
vrrp_instance VI_1 {
state BACKUP #角色类型BACKUP
interface ens33 #网卡名称
virtual_router_id 49 #虚拟路由id(需要与BACKUP一致)
priority 50 #优先级(必须比master小)
advert_int 1 #DS1和DS2每1秒检查一次
#nopreempt #非抢占模式
RS端配置:
# ifconfig lo:0 192.168.29.250 broadcast 192.168.29.250 netmask 255.255.255.255 up
#route add -host 192.168.29.250 dev lo:0
# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
安装httpd服务
在RS1,RS2端/var/www/html目录下创建index.html文件
编辑:<h1>this is 138 host</h1>
<h1>this is 139 host</h1>
启动httpd服务
测试:
1.在客户端测试
在主DS查看
2.让RS1down机,在客户端测试,显示不会轮巡down机,只轮巡运行的RS
在主DS查看:显示只有运行的一台RS
3.让主DS down机,显示备DS接管
首先,查看两台的日志文件,tail -f /var/log/message,观察变化
然后关闭主DS的keepalived服务,主日志显示停止keepalived服务。备DS立马显示日志:接管250ip
备DS:
备日志:
主DS:
主日志:
4.现在让主DS再次恢复服务,同时监控日志文件,观察变化
备DS日志:显示有优先级更高的DS占用,现在进入备份状态,删除VIP协议。
备DS:
主DS日志:
主DS:
5.为了防止每一次的宕机恢复频繁的接管,现在要实现一个功能
不需要来回的接管,如果备DS接管,一旦主DS恢复,也不会让主抢占,依旧是备DS继续提供服务。
将主DS服务器中的非抢占模式打开,把MASTER也改为BACKUP。那么主DS宕机在恢复也不会从抢占备DS,那么将一直是备DS支持服务。
步骤:将DS1的keepalived服务关闭
现在DS2接管服务,不会变成DS1
注意,抢占优先MASTER,再看优先级。
优先级只是对于BACKUP抢占来说管用,如果是MASTER的话,永远是首先抢占,即使优先级没有BACKUP高。