• 实现基于Keepalived主从高可用集群网站架构


    背景

    上一期我们实现了基于lvs负载均衡集群的电商网站架构,随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,目前业务已经通过集群LVS架构可做到随时拓展,后端节点已经通过集群技术保障了可用性,但对于前端负载均衡器来说,是个比较大的安全隐患,因为当前端负载均衡器出现故障时,整个集群就处于瘫痪状态,因此,负载均衡器的可用性也显得至关重要,那么怎么来解决负载均衡器的可用性问题呢?

    技术说明

    集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。
    集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。
    集群组成后,可以利用多个计算机和组合进行海量请求处理(负载均衡),从而获得很高的处理效率,也可以用多个计算机做备份高可用),使得任何一个机器坏了整个系统还是能正常运行。集群在目前互联网公司是必备的技术,极大提高互联网业务的可用性和可缩放性。
    高可用(High Availability )高可用集群,英文原文为HighAvailability Cluster,简称HA Cluster,简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统 就是集群的节点(node)。高可用性集群(HA cluster)是指如单系统一样地运行并支持(计算机)持续正常运行的一个主机群。

    高可用集群技术

    高可用(High Availability )高可用集群,英文原文为HighAvailability Cluster,简称HA Cluster,简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统 就是集群的节点(node)。高可用性集群(HA cluster)是指如单系统一样地运行并支持(计算机)持续正常运行的一个主机群。
    高可用集群的出现是为了使集群的整体服务尽可能可用,从而减少由计算机硬件和软件易错性所带来的损 失。如果某个节点失效,它的备援节点将在几秒钟的时间内接管它的职责。因此,对于用户而言,集群永远不会停机。高可用集群软件的主要作用就是实现故障检查和业务切换的自动化。
    高可用(High Availability )
    HA(High Available), 高可用性群集是通过系统的可靠性(reliability)和可维护性(maintainability)来度量的。工程上,通常用平均无故障时间(MTTF)来度量系统的可靠性,用平均维修时间(MTTR)来度量系统的可维护性。于是可用性被定义为:HA=MTTF/(MTTF+MTTR)*100%(平均无故障时间/总时间,总时间=平均无故障时间+平均维修时间)
    具体HA(可用性)衡量标准:
    99% 一年宕机时间不超过4天
    99.9% 一年宕机时间不超过10小时
    99.99% 一年宕机时间不超过1小时
    99.999% 一年宕机时间不超过6分钟

    高可用集群技术实现

    高可用(High Availability )
    高可用工作方式:主从方式 (非对称方式)、双机双工方式(互备互援)、集群工作方式(多服务器互备方式)
    高可用的资源分类:网络高可用、服务器高可用、存储高可用、服务高可用等
    开源高可用解决方案:keepalived:通过实现vrrp协议来实现地址漂移;heartbeat(开源社区项目),cman+rgmanager (RHCS:redhat cluster suite),corosync+pacemaker(大型解决方案,一个用于心跳检测,一个用于资源转移。两个结合起来使用,可以实现对高可用架构的自动管理。)
     我们今天讲的就是基于keepalived通过vrrp协议来实现地址漂移从而来实现高可用。

    高可用技术演示图(主从)

    高可用技术演示图(双主)

    Keepalived是什么

    Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

    Keepalived的特性

    配置文件简单:配置文件比较简单,可通过简单配置实现高可用功能
    稳定性强:keepalied是一个类似于layer3,4&7交换机机制的软件,具备我们平时说的第3层、第4层和第7层交换机的功能,常用于前端负载均衡器的高可用服务,当主服务器出现故障时,可快速进行切换,监测机制灵活,成功率高。
    成本低廉:开源软件,可直接下载配置使用,没有额外费用。
    应用范围广:因为keepalived可应用在多个层面,所以它几乎可以对所有应用做高可用,包括LVS、数据库、http服务、nginx负载均衡等等
    支持多种类型:支持主从模式、主主模式高可用,可根据业务场景灵活选择。

    Keepalived工作流程图

    Keepalived工作流程图详解
    如上图,keepalived主要是模块是VRRP Stack和Cheackers,实现HA集群中失败切换(Failover)功能。Keepalived通过VRRP功能能再结合LVS负载均衡软件即可部署一个高性能的负载均衡集群系统。,Cheackers主要实现可实现对服务器运行状态检测和故障隔离。其中ipvs和realserver健康状态检查通过配置文件配置就可以实现,而其他服务高可用则需要通过自己编写脚本,然后配置keepalived调用来实现。
    Keepalived运行有3个守护进程。父进程主要负责读取配置文件初始化、监控2个子进程等;然后两个子进程,一个负责VRRP,另一个负责Cheackers健康检查。其中父进程监控模块为WacthDog,工作实现:每个子进程打开一个接受unix域套接字,父进程连接到那些unix域套接字并向子进程发送周期性(5s)hello包。
    上图是Keepalived的功能体系结构,大致分两层:用户空间(user space)和内核空间(kernel space)。
    内核空间:主要包括IPVS(IP虚拟服务器,用于实现网络服务的负载均衡)和NETLINK(提供高级路由及其他相关的网络功能)两个部份。

    什么是VRRP协议

    VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)可以认为是实现路由器高可用的协议,简单的说,当一个路由器故障时可以由另一个备份路由器继续提供相同的服务。

    VRRP根据优先级来确定虚拟路由器中每台路由器的角色(Master路由器或Backup路由器)。VRRP优先级的取值范围为0到255(数值越大表明优先级越高),可配置的范围是1到254,优先级0为系统保留给路由器放弃Master位置时候使用,255则是系统保留给IP地址拥有者使用。优先级越高,则越有可能成为Master路由器。当两台优先级相同的路由器同时竞争Master时,比较接口IP地址大小。接口地址大者当选为Master。

    Keepalived的应用场景
    网络层、数据链路层,运行着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、HTTP、DNS等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived的工作方式;例如:用户可以通过编写程序来运行keepalived。而keepalived将根据用户的设定检测各种程序或服务是否运行正常,如果Keepalived的检测结果与用户设定不一致时,Keepalived将把对应的服务从服务器中移除。

    实战架构图

    实现基于keepalived的高可用服务,在两台主机上分别实现主从,主主模型,通过keepalived实现IP地址高可用和LVS的主从高可用架构。

    实战演练

    实现基于keepalived主从模型高可用集群:

    一、环境准备:
    centos系统主从两台、yum源、防火墙关闭、各节点时钟服务同步、各节点之间可以通过主机名互相通信
    二、安装步骤:
    1、iptables -F && setenforing 清空防火墙策略,关闭selinux
    2、两台服务器都使用yum方式安装keepalived服务
    三、修改配置文件:
    1.修改/etc/keepalived/keepalived.conf配置文件内容
    2、对glob段进行定义,添加管理员邮箱等
    3、对vrrp_instance 进行配置,配置一主一从,定义一个基于虚拟IP的实例
    四、检验高可用的效果
    1、配置完成后,观察两侧IP的是情况,看是否虚拟IP在主上配置成功
    2、检查主从服务日志,服务是否运行正常,监测机制是否有效
    3、停掉主服务上的keepalived服务,看虚拟IP是否正常转移到从节点上
    4、观察日志,了解整个切换过程,之后启动主节点服务,看虚拟IP能否被主服务再接管

    实现keepalived企业级高可用基于LVS-DR模式的应用实战:

    一、环境准备:两台centos系统做DR、一主一从,两台后端服务器实现过基于LNMP的电子商务网站
    二、安装步骤:
    1、两台服务器都使用yum方式安装keepalived服务
    2、iptables -F && setenforing 清空防火墙策略,关闭selinux
    三、配置基于DR模式的LVS负载均衡集群:
    vim /etc/keepalived/keepalived.conf
    1.对glob段进行定义,添加管理员邮箱
    2、修改keepalived主(lvs-server-master)配置文件实现virtual_instance
    3、修改keepalived主(lvs-server-master)配置文件实现virtual_server
    4、修改keepalived从(lvs-server-master)配置文件实现real_server
     
    5、修改keepalived主(lvs-server-backu)配置文件实现virtual_instance
    6、修改keepalived从(lvs-server-backup)配置文件实现virtual_server
    7、修改keepalived从(lvs-server-backup)配置文件实现real_server

     

    四.在两台主从负载均衡器上开启路由转发
    vim /etc/sysctl.conf
    net.ipv4.ip_forward=1
    sysctl -p
    五,在后端服务器的回环网卡上配置vip,并将网关指向vip
    ifconfig lo:0 172.17.253.100 broadcast 172.17.253.100 netmask 255.255.255.255 up
    route add -host 172.17.253.100 dev lo:0
    六,在后端服务器关闭arp
    echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    #1 只回答目标IP地址是来访网络接口本地地址的ARP查询请求
    echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
    #2 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.
    echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
    #关闭arp应答
    (1): 仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
    (2):必须避免将接口信息向非本网络进行通告
    七,检验高可用的效果
    两台负载均衡器都开启keepalived服务,我停止了负载均衡器主服务器的keepalived服务(模拟负载均衡器主服务器宕机),立刻负载均衡器从服务器会将主服务器上的vip拿过来(地址漂移),接替负载均衡器主服务器的工作,一旦负载均衡器主服务器被修好了,从新开启keepalived服务,由于默认为抢占模式,主服务器再将从服务器的vip给拿回来,继续工作,不会影响客户端访问。
    好了,今天的内容就到这里,我们下期再见。
  • 相关阅读:
    初学网络编程
    Python模块(三)(正则,re,模块与包)
    Python模块(二)(序列化)
    idea2020.2安装与破解
    部署-jenkins发布项目到linux环境
    部署-jenkins发布项目到windows环境
    部署-jenkins与gitlab结合使用
    部署-docker推送镜像到远程仓库
    部署-gitlab克隆地址踩坑
    部署-docker安装jenkins
  • 原文地址:https://www.cnblogs.com/1477717815fuming/p/7874384.html
Copyright © 2020-2023  润新知