keepalived(1)- keepalived集群概述



1. 高可用集群概述

高可用技术主要用于解决SPOF(single Point Of failure,单点故障)问题,其主要作用是使集群的整体服务尽可能可用,如果高可用集群中的主节点发生了故障,那么将由次节点代替它。次节点通常是主节点的镜像,与主节点保持完全一致。

高可用集群的重要参数如下:

  • MTBF:Mean Time Between Failure 平均无故障时间

  • MTTR:Mean Time To Restoration( repair)平均恢复时间,故障时间

高可用判断系数(以年为单位)

  • A=MTBF/(MTBF+MTTR) 取值范围:(0,1):99%, 99.5%, 99.9%, 99.99%, 99.999%

    假设系统一直能够提供服务,我们说系统的可用性是100%。

    如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。

    很多公司的高可用目标是4个9,也就是99.99%,这就意味着,系统的年停机时间为8.76个小时。

常用的高可用技术主要有:

  • keepalived
  • ais:应用接口规范
  • heartbeat
  • cman+rgmanager(RHCS)
  • coresync_pacemaker

keepalived和heartbeat/coresync的比较:

Keepalived是Linux下一个轻量级别的高可用解决方案。高可用:广义来讲,是指整个系统的高可用行;狭义的来讲就是主机的冗余和接管。

Keepalived与HeartBeat都可以实现服务或者网络的高可用,但是又有差别,HeartBeat是一个专业的、功能完善的高可用软件,它提供HA软件所需的基本功能,比如:心跳检测、资源接管,检测集群中的服务,在集群节点转移共享IP地址的所有者等等。HeartBeat功能强大,但是部署和使用相对比较麻烦,与HeartBeat相比,Keepalived主要是通过虚拟路由冗余vrrp技术来实现地址转移功能,虽然它没有HeartBeat功能强大,但是Keepalived部署和使用非常的简单,所有配置只需要一个配置文件即可以完成。

Heartbeat、Corosync是属于同一类型,Keepalived与Heartbeat、Corosync,根本不是同一类型的。Keepalived的目的是模拟路由器的高可用,Heartbeat或Corosync的目的是实现Service的高可用。

所以一般Keepalived是实现前端高可用,常用的前端高可用的组合有,就是我们常见的LVS+Keepalived、Nginx+Keepalived、HAproxy+Keepalived。

而Heartbeat或Corosync是实现服务的高可用,常见的组合有Heartbeat v3(Corosync)+Pacemaker+NFS+Httpd 实现Web服务器的高可用、Heartbeat v3(Corosync)+Pacemaker+NFS+MySQL 实现MySQL服务器的高可用。

Keepalived中实现轻量级的高可用,一般用于前端高可用,且不需要共享存储,一般常用于两个节点的高可用。而Heartbeat(或Corosync)一般用于服务的高可用,且需要共享存储,一般用于多节点的高可用。

2. keepalived概述

2.1 keepalived介绍

Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。

后来Keepalived又加入了VRRP的功能,VRRP(VritrualRouterRedundancyProtocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied一方面具有服务器状态检测和故障隔离功能,另外一方面也有HAcluster功能。

健康检查和失败切换是keepalived的两大核心功能。所谓的健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活;而失败切换主要是应用于配置了主备模式的负载均衡器,利用VRRP维持主备负载均衡器的心跳,当主负载均衡器出现问题时,由备负载均衡器承载对应的业务,从而在最大限度上减少流量损失,并提供服务的稳定性。

2.2 keepalived体系架构

image

  • SchedulerI/OMultiplexer是一个I/O复用分发调度器,它负载安排Keepalived所有内部的任务请求;

  • Memory Mngt是一个内存管理机制,这个框架提供了访问内存的一些通用方法;

  • Control Plane 是keepalived的控制版面,可以实现对配置文件编译和解析;

  • Core componets 这部分主要包含了5个部分;

    • Watchdog:是计算机可靠领域中极为简单又非常有效的检测工具,通常为硬件,Keepalived正是通过它监控Checkers和VRRP进程的。
    • Checkers:这是Keepalived最基础的功能,也是最主要的功能,可以实现对服务器运行状态检测和故障隔离。
    • VRRP Stack:这是keepalived后来引用VRRP功能,可以实现HA集群中失败切换功能。负责负载均衡器之间的失败切换FailOver;
    • IPVS wrapper:这个是IPVS功能的一个实现,IPVSwarrper模块将可以设置好的IPVS规则发送到内核空间并且提供给IPVS模块,最终实现IPVS模块的负载功能。
    • Netlink Reflector:用来实现高可用集群Failover时虚拟IP(VIP)的设置和切换,

keepalived运行时,会启动3个进程,分别为:core(核心进程),check和vrrp

  • core:负责主进程的启动,维护和全局配置文件的加载;

  • check:负责健康检查

  • vrrp:用来实现vrrp协议

2.3 keepalived实现原理

keepalived主要的两个功能为检测后端服务器状态和高可用故障转移,两个功能实现的原理如下:

  • Keepalived对服务器运行状态和故障隔离的工作原理:

    Keepalived可以工作在TCP/IP模型的三层、四层、五层:

    • 网络层(3):Keepalived通过ICMP协议向服务器集群中的每一个节点发送一个ICMP数据包,如果某个节点没有返回响应数据包,那么认为该节点发生了故障,Keepalived将报告这个节点失效,并从服务器集群中剔除故障节点。

    • 传输层(4):Keepalived在传输层里利用了TCP协议的端口连接和扫描技术来判断集群节点的端口是否正常,比如对于常见的WEB服务器80端口。或者SSH服务22端口,Keepalived一旦在传输层探测到这些端口号没有数据响应和数据返回,就认为这些端口发生异常,然后强制将这些端口所对应的节点从服务器集群中剔除掉。

    • 应用层(5):,Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived工作方式,例如:可以通过编写程序或者脚本来运行Keepalived,而Keepalived将根据用户设定的参数检测各种程序或者服务是否允许正常,如果Keepalived的检测结果和用户设定的不一致时,Keepalived将把对应的服务器从服务器集群中剔除。

  • Keepalived高可用故障切换转移原理

    Keepalived高可用故障切换,是通过VRRP协议来实现的。  

    在Keepalived服务正常工作时,Master节点会不断以组播形式地向备节点发送心跳消息,组播地址为224.0.0.18,用以告诉Backup节点自己还活着,当Master节点发生故障时,就无法发送心跳消息,备节点无法检测到来自主Master节点心跳了,于是调用自身的接管程序,接管Master节点的IP资源及服务。而当Master节点恢复时,备Backup节点会根据是否配置抢占决定是否释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

    两台运行VRRP的设备会根据vrrp组号形成虚拟IP和虚拟MAC地址,其他设备都使用该VIP和VMAC与keepalived设备进行通信,MASTER和BACKUP节点都正常的情况下VIP和VMAC都存在于MASTER节点上,由MASTER节点处理用户请求,(注意:虽然VRRP会产生VMAC,但是其他节点的ARP表中记录的VIP对用的MAC并不是VMAC,而是MASTER节点的真实MAC地址)当MASTER节点故障时,VIP和VMAC都会迁移到BACKUP节点上,BACKUP节点会发送免费ARP报文让其他节点重新学习自己的MAC地址,让终端的ARP表中记录的VIP切换成BACKUP的真实MAC地址,完成VRRP主备切换。

    当MASTER节点恢复时,若MASTER没有配置抢占,则vrrp主备不会发生切换,若配置了抢占,则vrrp会再次发生主备切换,VIP会迁移到MASTER节点上。

    其中VRRP的节点中,配置的优先级最高的设备会称为MASTER设备。

2.4 keepalived配置准备工作

  • 各节点时间必须同步;

    ntp, chrony

  • 确保iptables及selinux不会成为阻碍;

  • 各节点之间可通过主机名互相通信(对keepalived并非必须);

建议使用/etc/hosts文件实现;

  • 确保各节点的用于集群服务的接口支持MULTICAST通信;

D类:224-239;

ip link set multicast on eth1用于开启接口组播功能,默认开启

ip link set multicast off eth1用于关闭接口组播功能

可通过ifoncfig命令查看:

[root@nginx-lb01 ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.123  netmask 255.255.255.0  broadcast 192.168.2.255
        inet6 fe80::4809:4d0d:96a:b68e  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:33:71:c6  txqueuelen 1000  (Ethernet)
        RX packets 7609  bytes 8962242 (8.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3194  bytes 195272 (190.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
posted @ 2021-07-10 16:57  向往自由的独行者  阅读(271)  评论(0编辑  收藏  举报