k8s集群概念「mysql高可用架构」

互联网 2023-08-06 14:21:56

今天给大家普及一下k8s集群概念「mysql高可用架构」相关知识,最近很多在问k8s集群概念「mysql高可用架构」,希望能帮助到您。

时下随着虚拟化云和容器技术的大力发展,将云和容器技术作为企业基础设施变得越来普遍。企业利用虚拟化技术实现规模的业务架构,不在关注物理硬件、硬件配置、CPU,内存和磁盘是不是够快是不是够大等诸如此列的问题,一切按照配置自动生成,自动横向扩展和收缩。随着应用程序开发的微服务的流行,应用程序变得越来越复杂,通过服务接口相互通信,应用容器化成了必然选择。尤其构建基于容器的开发测试演示环境成了必然选择。

云计算和容器技术开启全新的系统架构和思维方式。越来越多的公司开始将他们的工作负载转移到云中,应用程序变成了复杂的系统,由多个集成且不断发展的小部件组成,为了解决容器云的管理谷歌推出了容器编排系统Kubernetes,各公有云厂商也各自提供自己的类Kubernetes编排系统比如GKE,EKS,AKS等。

通过大型云提供商提供Kubernetes为软件开发人员和公司带来了许多好处。但是,仍有相当数量的公司因各种原因(例如法规,数据安全)不允许直接使用公有云。那么基于公司内部数据中心的Kubernetes私有容器云架构就成了唯一的选择。本文虫虫就给大家介绍Kubernetes私有容器云中涉及的基本概念(网络,安全性,高可用性,灾难恢复等),架构、工具栈等。

K8S体系结构

该部分我们来介绍K8S集群的体系架构图和各个集群的构成。介绍业界常见的集群类型及Kubernetes集群特性。

HAProxy集群

高可用性HAProxy负载均衡器由VIP和Corosync/Pacemaker集群堆栈构成。

VIP虚拟IP,也叫共享IP或浮动IP。VIP是分配给负载均衡调度器的普通IP地址。调度器以主备模式运行,正常情况下通过VIP访问到主调入器再调度到后端应用。如果主调度器发生故障,VIP自动转移到备用调度器,启用备用调度器完成调度,从而实现高可以避免单点故障。

HAProxy负载平衡器都配置对后端应用程序服务器调度,都单独可以承担流量。主调度器发生故障,所有流量自动迁移到备用调度器,实现故障迁移和业务流量的自动切换。

Kubernetes集群

Kubernetes管理一个高度可用的计算机集群,这些计算机连接起来作为一个单元工作。 Kubernetes中的抽象允许将容器化应用程序部署到集群,而无需将它们专门绑定到某个计算机上。为了利用这种新的部署模型,应用程序需要以一种将它们与单个主机分离的方式集装箱化打包。与以往的部署模型相比,容器化应用程序更加灵活和可用,应用程序直接安装到特定计算机上,程序包深度集成到主机中。Kubernetes以更有效的方式自动化在集群范围内分发和调度应用容器。

Gluster集群

GlusterFS是一个可扩展的分布式文件系统,适用于云存储和媒体流等数据密集型任务。 GlusterFS是免费的开源软件,可在常见的硬件上部署。Gluster的主要目的是为Kubernetes Pods提供GlusterFS卷服务。Gluser使得GlusterFS卷管理类似Kubernetes中的任何其他应用程序一样进行编排和管理。

群集分类

集群Cluster意思是聚集或集合在一起,可以应用于各种环境。在计算环境中,集群定义了一种能够以分布式方式将多台计算机组合在一起完成系统的架构和运行。集群的每个组成点称为节点Node,有节点组合形成群集。常见集群主要有四种主要类型:

高可用性(HA)

顾名思义,这种类型的集群的重点是使保持业务高可以用,持续可以访问和响应。无论每个节点发生什么问题,系统都能保持在线状态,并提供服务。为包保证高可用,一般来说多个节点以冗余的方式提供用户服务。该集群主要用于服务不可中断的情况,比如银行系统,电子商务系统等。

负载均衡

在这种类型的体系结构中,所有节点都负责执行任务。无论是响应传入的流量请求,还是提供资源,任务总是分配给组成系统的各节点。实际上是一种"一对一"的方法。最简单到最复杂的任务是通过所有可用资源的并集产生的计算能力来执行的。在负载均衡模式中,优先考虑性能,如果任何节点发生故障,它将从系统中删除,并由余节点接管他的任务。

并行处理

在这种类型的集群中,大型任务在不太复杂的活动之间划分,由系统分布并由组成集群的各个节点并行执行。因此,这种类型的集群非常适合非常复杂的计算任务。比如Hadoop集群的MapReduce模型。

组合模型

在很情况下,性能和稳定性都要兼顾不。所以采用够结合高可用和负载平衡的集群就成了必然的选择。这样通过组合不同性质的节点,是的集群既具有一定冗余来保证高可以用性,同时以负载均衡来提供集群的性能。

Kubernetes集群就是采用综合了故障转移和高可用性,它支持POD在不同节点上运行,即使一个(或多个)POD发生故障也能保持应用的正常运行。同时具有负载平衡的特性,可以把集群的请求调度分发到在不同节点的POD,避免特定节点成为热点并最终影响系统的性能。

技术组件

本部分我们将介绍K8S集群中各个技术组件,K8S集群是一个由大量的工具栈组成的体系结构,每一个组件都是K8S不可或缺的有机组成部分。

HAProxy

第二部分K8S体系架构中,我们将了HAProxy集群是K8S体系结构中最重要的组成部分之一。

HAProxy是一种免费开源的代理软件,是最常用的负载均衡调度器。可用于TCP和HTTP的应用的代理、高可用性和负载平衡,是一种快速可靠的调度器解决方案。被大量的高负载网站所使用,国内大的网站架构中也大量采用HAProxy作为调度层或者代理层。多年来,HAProxy已成为事实上的开源负载均衡器标准,在大多数主流Linux发行版一起都提供该软件的打包,在云平台中也通常默认安装该组件。

在K8S集群中,HAProxy用于负载均衡器(LB)调度器, 用于Kubernetes API。

让我们假设一个场景:如果只有一个HAProxy实例执行负载平衡,会发生什么?架构将存在单点故障(SPOF):不论由于何种原因,单一的HAProxy失败了,我们将完全失去对Kubernetes API的访问权限。为了解决这个问题,HAProxy将成为由VIP驱动的高可用性集群(HA)的一部分,并且至少配置了两个HAProxy服务。总之,需要创建一个高度可用的负载平衡群集。

Corosync

Corosync集群引擎是一个消息通讯系统,实现应用程序高可用性的附加功能。Corosync被Apache Qpid和Pacemaker等项目用作高可用性框架。Corosync有两个主要用途:保持集群的状态(知道节点何时加入或离开集群)并将消息分发给所有集群成员。

节点加入群集

要更新群集状态,群集的所有节点都应安装Corosync并以相同方式配置。因此,每次启动包含Corosync的节点时,将会发生如下会话:

新节点发送广播消息,说:"那里有Corosync成员吗?"

网络中现有的Corosync实例收到消息并回复:"我在这里!"

新节点从这些现有实例接收响应并说:"您好!我想加入群集。这是我的凭据!"

现有Corosync实例接收此请求加入消息,验证收到的凭据(配置),并根据仲裁配置决定是否接受该新节点。

节点离开集群

在节点加入集群后,它会知道所有其他节点。同样,所有其他节点都知道该新节点,并且他们已经知道所有以前的成员。Corosync会持续监视节点成员的运行状况:

每个节点都有一个包含所有其他节点地址的列表。

每个节点将与其本地列表中的节点进行交互。

如果由于任何原因,节点无法与此本地列表中的给定节点进行交互,那么它将认为该节点不健康。

然后,节点将咨询所有其他成员,以检查他们是否可以看到这个可能不健康的节点。

然后每个节点都会进行一次投票,说明该节点是健康的还是不健康的。

Corosync将根据收到的投票评估仲裁配置,以确定该节点应标记为健康或不健康。如果节点标记为运行状况不佳,则群集仍然可以知道该节点,但在该状态下将不会使用该节点。

Pacemaker

Pacemaker是一个开源,高可用性资源管理器,适用于小型和大型集群。主要用于在Corosync中创建和和配置资源,从而实现负载均衡调度器高度可用。为此,集群使用Pacemaker声明一个VIP和一个HAProxy资源,这两个资源都将在Corosync集群管理的节点中设置。Pacemaker使用声明式方法创建一个配置文件,指定每个节点上应该存在哪些资源以及这些资源如何相互关联。如果HAProxy在同一节点中处于活动状态,则VIP应仅在给定节点中处于活动状态,反之亦然。简单来说,当节点处于活动模式时,我们希望将VIP和HAProxy分配给它并在其上执行,而所有其他节点将处于被动模式,直到由于某种原因,节点或资源附在它上面失败了。当发生这种情况时,分配给活动节点的资源被"迁移到"(或启动)其中一个可以满足所有依赖条件被动节点,所选节点将成为活动节点,之前的活动节点将转换为被动状态。

dnsmasq

Dnsmasq为小型网络提供网络基础设施:DNS,DHCP,路由器设施和网络引导。Dnsmasq涉及轻巧,占用资源少,适用于资源受限的路由器和防火墙。它还被广泛用于智能手机和便携式热点(AP)的网络共享,还用于虚拟化框架中的虚拟网络。支持的平台包括Linux,Android,*BSD和Mac OS X等系统。Dnsmasq提供完整的IPv6支持。"

在K8S集群中dnsmasq主要用为节点提供DNS和DHCP功能。

DHCP将负责为加入网络的每个新主机(节点)分配IP地址和网络配置。这样就无需为每个加入网络的新主机创建过多设置,也无需手动执行此操作。主机向网络执行广播,DHCP服务以所需的设置进行响应。

DNS负责解析内部网络中的域名以及来自公共DNS的域名。

DHCP和DNS协同工作,对于每个加入网络的新主机,DHCP都会使用此主机名到其IP的映射来更新DNS服务,这样集群(所有节点)就可以通过其名称引用新主机,而无需关心其IP地址。

VirtualBox

VirtualBox是一款功能强大的x86和AMD64/Intel64虚拟化产品,适用于企业和家庭用户。VirtualBox不仅是一款功能丰富,功能强大的企业客户产品,它也是唯一一款依据GNU通用公共许可证GPLv2免费提供的开源软件专业解决方案。

Coud-INIT

cloud-init是在GPLv3开源许可证和Apache V2.0下免费软件开发和发布的软件。最初用于Amazon EC2中的Linux的Ubuntu发行版,但现在每个主要云中的Linux和UNIX发行版都大都支持它。

LVM逻辑卷管理器

与传统的磁盘和分区视图相比,逻辑卷管理提供了计算机系统上磁盘存储的更高级抽象。这为系统管理员提供了更大的灵活性,可以为应用程序和用户分配存储。在逻辑卷管理器的控制下创建的存储卷可以调整大小并随意移动。LVM允许我们对磁盘进行动态的管理。

在特定情况下,需要创建一个VM映像,它会成为许多其他映像(Gateway,HAProxy,Kubernetes主/工作节点和Gluster)的基础,每个服务都有自己的空间需求(比如/ var,/usr,/tmp,/opt,/etc),LVM将为我们提供根据需要动态调整分区卷大小的灵活性,而无需事先关注这些细节。

Gluster

Gluster是一个免费的开源软件可扩展的网络文件系统。详细介绍见上一部分的Gluster集群。

Docker

Docker基于Linux内核的轻量系统虚拟化技术,通过在Docker容器中打包软件和气基础依赖包可以实应用的快速发布和交付部署,并且保持基础环境的高度统一。Docker容器由Docker Engine服务进行运行和管理。Docker项目由Docker.Inc开发,并与2013年开源免费提供。Docker最初基于namespace,cgroup和LXC技术使用Golang语言开发,源码以Apache 2.0协议开源。。它不仅提供运行容器,还可以轻松创建,构建,上载和控制版本镜像(基于Git思想)。

Kubernetes

Kubernetes(K8s)是一个开源系统,用于自动化容器化应用编排、部署

扩展和管理的系统

Kubernetes是一个开源容器编排系统,用于自动化应用程序部署,扩展和管理,能够智能,干净地管理容器。