作者:庄宇

在规划体系架构时,咱们有必要假设任何组件和任何基础设施或许会在任何时刻失效,例如:自然灾害,电力中断,网络中断,错误的体系变更等。为了应对应战,咱们有必要规划适宜的容灾架构。

本文介绍如何以 K8s 集群(包含:ACK 集群,他云集群和本地 IDC K8s 集群)为基础,结合阿里如此产品(网络,数据库,中间件,可观测),规划容灾架构,构建一个“耐性”体系。

容灾方针

Recovery time objective(RTO):

服务中断与服务康复之间可接受的最大延迟时刻。决定服务停机的可接受时长。

Recovery point objective(RPO):

自上一个数据康复点以来可接受的最大时刻量。决定可接受的数据丢失或重建。

依据 K8s 容器集群的容灾架构与计划

关于 RTO 和 RPO,数值越低代表停机时刻和数据丢失越少,可是越低的 RTO 和 RPO 会导致资源本钱和运维复杂性越高。因此,您需求依据工作负载的重要性,指定适当的 RTO 和 RPO。

容灾战略

依据 K8s 容器集群的容灾架构与计划

上图中,描绘的常见的 3 种容灾战略:备份与康复、主备、双活,不同的容灾战略对应了不同的收益和本钱。您需求综合分析事务的重要性、危险、可投入的本钱等,以挑选合适的容灾战略。

备份与康复(Backup-Restore)

在体系运转时,备份运用和数据,在灾祸产生时,在另一个地址康复运用和数据,并切换事务流量。因为数据无法实时备份,在康复数据时会有必定的数据丢失,一起假如数据量较大,康复数据时刻或许较长。

依据 K8s 容器集群的容灾架构与计划

主备(Active-Standby)

在主备模式中,主 Location 处理所有的事务流量,备用 location 能够启动较少的运用实例节约本钱,并周期发送测验流量以验证体系有效性。在灾祸产生时,做数据库主备切换,扩容运用实例数,并切换事务流量。

依据 K8s 容器集群的容灾架构与计划

双活(Active-Active)

在双活模式中,2 个 Location 启动相同的运用实例数,一起处理事务流量。在灾祸产生时,做数据库主备切换,并切换事务流量。

依据 K8s 容器集群的容灾架构与计划

容灾规模

多可用区(Multi-AZ)

阿里云地域(Region) [ 11] 包含多个可用区(AZ),可用区(AZ)是电力和网络互相独立的物理区域,对停电,断网等部分中断的容灾场景,能够运用多个可用区(AZ)规划容灾战略。因为可用区间的网络延时较短,能够更容易完成数据部分的容灾计划,包含数据库、缓存和音讯等。

多地域(Multi-Region)

为了应对更大规模的灾祸毛病事情,这些事情或许会影响同地域(Region)的多个可用区(AZ),您能够运用多个地域(Region)规划容灾战略。但因为地域间更大网络延时,容灾计划复杂度和完本钱钱较高。

在挑选多可用区(AZ)或许多地域(Region)容灾计划时,需求重点考虑有状况运用和依赖的云产品(例如:数据库、缓存和音讯)是否支撑多地域或许多可用区容灾。

计划示例

备份与康复(Backup & Restore)

公共云跨可用区和跨地域备份与康复

  1. 经过 ACK One 备份中心 [3 ] ,能够备份 ACK 集群中的运用,包含无状况运用和有状况运用,对有状况运用,在备份运用 YAML 的一起能够备份相关 Storage 数据。

  2. ACK One 备份中心集成云产品云盘快照 [ 12] ,文件存储 NAS [13 ] ,目标存储 OSS [14 ] 和云备份 [15 ] ,分别支撑运用 YAML,云盘 PV,文件体系 PV 的一键备份。

  3. 备份后,能够随时将运用和 Storage 数据,康复到恣意地域和可用区的 ACK 集群。

  4. 阿里云数据库服务的备份与康复,能够参阅相应数据产品的文档,例如:RDS MySQL 数据库备份康复 [ 16] ,RDS 实例间数据搬迁 [17 ]

依据 K8s 容器集群的容灾架构与计划

混合云备份与康复

  1. 经过 ACK One 注册集群 [ 4] ,能够将 IDC 自建或许非阿里云 K8s 集群,接入到阿里云 ACK 控制台。

  2. 接入 ACK One 注册集群后,经过 ACK One 备份中心,能够备份 IDC 自建和非阿里云 K8s 集群中的运用,包含无状况运用和有状况运用,对有状况运用,在备份运用 YAML 的一起能够备份相关 Storage 数据。

  3. 备份后,能够随时将运用(Deployment/Statefulset)和数据(PV/PVC),康复到恣意地域和可用区的 ACK 集群。

依据 K8s 容器集群的容灾架构与计划

总结

备份康复计划施行本钱较低,但 RTO 和 RPO 相对较长,取决于数据量的大小和运用的复杂度。备份中心能够供给的全量备份 增量备份才能,削减 RTO 和 RPO 时刻。

备份康复作为容灾的兜底计划,重要性高,在体系运维的过程中,要确保备份的及时性和可康复性。

别的,许多用户挑选经过备份康复功能完成运用的跨集群搬迁,场景如下:

  1. 事务上云,将本地 IDC 集群中的运用,搬迁到阿里云 ACK 集群中,参阅 IDC 运用上云搬迁 [ 18]

  2. 集群版别较老,版别升级有稳定性危险,能够先创立新版别集群,经过备份康复将运用搬迁到新版别集群运转,参阅跨版别集群搬迁 [ 19]

  3. 用户在收敛云账号或许组织调整时,需求跨账号集群接入 [ 20] 和跨集群搬迁运用 [21 ]

多集群 Service

在运用搬迁的过程中,因为运用的数量较多,需求分批搬迁,一起运用间存在调用联系。此时,在网络打通的前提下,能够运用 ACK One 舰队多集群 Service [ 5] ,完成运用 Kubernetes Service 跨集群访问。如下图所示,ACK One 舰队多集群 Service,能够将 Cluster1 的 Applcation2 的 Kubernetes Service(包含 endpoints)注入到 Cluster2,Cluster2 上的 Application1 能够访问 Cluster1 上的 Application2。

依据 K8s 容器集群的容灾架构与计划

在专线拉通的前提下,经过 ACK One 注册集群,IDC 和非阿里云的 K8s 集群也能够是用 ACK One 舰队多集群 Service。

单地域多可用区容灾

依据 DNS 流量分发

  1. 经过 ACK One GitOps 运用分发 [6 ] ,在 2 个 ACK 集群中布置运用,完成依据 Git 库房的继续一致性布置。

  2. 经过大局流量办理(GTM) [22 ] 做 DNS 解析完成负载分发,并监控体系运转健康状况,主动触发容灾切换。

  3. 每个 AZ 内,经过 ACK Ingress [ 7] 完成 7 层流量办理。

  4. 备集群和主集群的运用版别相同,但备集群节点较少,运用副本较少,节约本钱。

  5. 在主体系不行用时,大局流量办理(GTM)会将服务域名 DNS 解析到备用体系,完成主备切换。

  6. 因为流量的增加,备集群中 ACK HPA [8 ] 会扩容运用副本,从而触发 ACK Cluster Autocaler [9 ] 扩容集群节点。

  7. 阿里云中间件(音讯,缓存)的跨可用区容灾,可参阅相关文档,例如:云音讯行列 RocketMQ 版实例标准 [ 23] ,云音讯行列 Kafka 版实例标准 [ 24] ,云原生内存数据库 Tair 容灾计划 [ 25]

  8. 阿里云数据库服务的跨可用区容灾,可参阅相关文档,例如:RDS MySQL 数据库建立高可用架构 [ 26]

留意:

  1. 本计划依据 DNS 流量转发,因为 DNS 缓存,在灾祸事情产生时,部分事务仍然路由到主体系,造成必定的事务损失。

  2. 需求在 2 个集群中分别装备保护 7 层 ingress 规则,本钱高。体系正常运转状况:

依据 K8s 容器集群的容灾架构与计划

灾祸事情产生,AZ 不行用时,体系主备切换,GTM 将流量切换到 AZ2,ACK Cluste2 的运用实例主动扩展,中间件和数据库多可用区高可用切换。

依据 K8s 容器集群的容灾架构与计划

依据 ACK One 多集群网关

  1. 经过 ACK One GitOps 运用分发,在 2 个 ACK 集群中布置运用,完成依据 Git 库房的继续一致性布置。

  2. 经过 ACK One 多集群网关 [ 10] ,界说标准 K8s Ingress 规则(YAML 格局),完成 7 层流量治理,完成流量的主备模式分发。多集群网关为跨可用区高可用。

  3. 备集群和主集群的运用版别相同,但备集群节点较少,运用副本较少,节约本钱。能够发送特定 http header 的测验流量,多集群网关转发到备集群以验证工作状况。

  4. 在主体系不行用时,ACK One 多集群网关会主动将事务流量备用体系,完成主备切换。

  5. 因为流量的增加,备集群中 ACK HPA 会扩容运用副本,从而触发 ACK Cluster Autocaler 扩容集群节点。

  6. 阿里云数据库服务的跨可用区容灾,可参阅相关文档,例如:RDS MySQL 数据库建立高可用架构。

留意:

  1. 本计划为 HTTP 七层流量转发,合作 7 层健康检查,主备切换时相比 DNS 计划,大幅减低事务流量损失。

  2. 网关侧统一支撑依据 Ingress 规则的流量治理,相比 DNS 计划,合并了四层负载均衡 SLB 和七层 Ingress 网关,降低体系复杂度和保护本钱。

体系正常运转状况:

依据 K8s 容器集群的容灾架构与计划

灾祸事情产生,AZ 不行用时,体系主备切换,多集群网关(MSE 云原生网关)主动将流量切换到 AZ2 的 ACK Cluste2 中, 运用实例主动扩展。

依据 K8s 容器集群的容灾架构与计划

跨可用区双活

以上 2 个计划以主备模式为例,描绘了体系架构。同样的架构,依据 DNS 流量分发和 ACK One 多集群网关也支撑双活场景,能够装备流量分发比例(例如:50% : 50%),支撑主动 failover 切换。在双活的场景下,每个集群中的运用副本数,需求依据流量分发比例确定,集群中需求装备弹性伸缩,以支撑流量切换情况下的流量增加。

总结

单地域多可用区计划完成的本钱较低,能够运用云产品(包含:网关,容器,中间件,数据库)多可用区布置和多可用区高可用,快速完成容灾,对事务改造较小。但此计划仅可应对单个可用区的灾祸和毛病,无法应对地域级的灾祸毛病。

单地域云 IDC 容灾计划

计划架构与单地域多可用区容灾计划类似,要点如下:

  1. 云上 VPC 与 IDC 建立专线连接,打通管控与数据通道。

  2. 经过 ACK One 注册集群接入 IDC 集群,运用阿里云强壮可观测和安全才能,统一办理 IDC 集群和 ACK 集群。

  3. 经过 ACK One GitOps 运用分发,在 2 个集群中布置运用,完成依据 Git 库房的继续一致性布置。

依据 DNS 流量分发(单地域云上和云下双活)

依据 K8s 容器集群的容灾架构与计划

依据 ACK One 多集群网关(单地域云上和云下双活)

依据 K8s 容器集群的容灾架构与计划

多地域容灾

假如事务规模大重要性高,服务的用户数量多规模广,单地域的容灾计划就无法满意事务高可用要求,这时需求多地域容灾计划。在多个地域独立布置事务体系,确保每个地域的事务体系具有单独闭环供给完好的服务才能。

  1. 经过大局流量办理(GTM)完成用户就近接入相应地域。

  2. 经过 ACK One GitOps 运用分发,在 2 个 ACK 集群中布置运用,完成依据 Git 库房的继续一致性布置。

  3. 缓存多地域高可用计划,能够参阅阿里云产品相关文档,例如:Tair 全球多话 [ 27]

  4. 数据库跨地域高可用计划,能够参阅阿里数据库云产品相关文档,例如:云原生数据库 PolarDB MySQL 全球数据库 [ 28]

  5. 地域内,能够采用单地域多可用区容灾计划。

依据 K8s 容器集群的容灾架构与计划

单元化多活布置

区别与前一计划,多地域单元化多活布置,需求规划分片规则对运用和数据进行分片,使得单元供给面向部分数据分片的完好服务才能,完成事务安全毛病隔离,水平扩展,服务巨大的用户群体。一般分为中心单元(拥有所有用户数据)和多个子单元(分片后详细数据)。此种方法需求事务体系支撑,自界说分流规则,数据拆分,单元间合作等,复杂度高。

依据 K8s 容器集群的容灾架构与计划

总结

各种灾祸事情会影响您事务的可用性,经过运用阿里云的相关云产品的容灾才能,能够减轻或许消除这些影响。首要,需求了解事务可用性需求,从而挑选一个适当的容灾战略,然后,运用阿里云相关云产品,包含:容器(容器服务 Kubernetes 版 ACK [ 1] 和分布式云容器渠道 ACK One [ 2] )、音讯、缓存、数据库等,规划容灾架构,快速达到您事务可用性要求的康复时刻方针 RTO 和康复点方针 RPO。

相关链接:

[1]容器服务 Kubernetes 版 ACK

help.aliyun.com/zh/ack/

[2]分布式云容器渠道 ACK One

help.aliyun.com/zh/ack/dist…

[3]ACK One 备份中心

help.aliyun.com/zh/ack/dist…

[4]ACK One 注册集群

help.aliyun.com/zh/ack/dist…

[5]ACK One 舰队多集群 Service

help.aliyun.com/zh/ack/dist…

[6]ACK One GitOps 运用分发

help.aliyun.com/zh/ack/dist…

[7]ACK Ingress

help.aliyun.com/zh/ack/ack-…

[8]ACK HPA

help.aliyun.com/zh/ack/ack-…

[9]ACK Cluster Autocaler

help.aliyun.com/zh/ack/ack-…

[10]ACK One 多集群网关

help.aliyun.com/zh/ack/dist…

[11]地域(Region)

help.aliyun.com/document_de…

[12]云盘快照

help.aliyun.com/zh/ecs/user…

[13]文件存储 NAS

help.aliyun.com/zh/nas/prod…

[14]目标存储 OSS

help.aliyun.com/zh/oss/prod…

[15]云备份

help.aliyun.com/zh/cloud-ba…

[16]RDS MySQL 数据库备份康复

help.aliyun.com/zh/flink/de…

[17]RDS 实例间数据搬迁

help.aliyun.com/zh/rds/apsa…

[18]IDC 运用上云搬迁

help.aliyun.com/zh/ack/dist…

[19]跨版别集群搬迁

help.aliyun.com/zh/ack/dist…

[20]跨账号集群接入

help.aliyun.com/zh/ack/dist…

[21]跨集群搬迁运用

help.aliyun.com/zh/ack/dist…

[22]大局流量办理(GTM)

help.aliyun.com/document_de…

[23]云音讯行列 RocketMQ 版实例标准

help.aliyun.com/zh/apsaramq…

[24]云音讯行列 Kafka 版实例标准

help.aliyun.com/zh/apsaramq…

[25]云原生内存数据库 Tair 容灾计划

help.aliyun.com/zh/tair/pro…

[26]RDS MySQL 数据库建立高可用架构

help.aliyun.com/zh/rds/apsa…

[27]Tair 全球多话

help.aliyun.com/zh/tair/use…

[28]云原生数据库 PolarDB MySQL 全球数据库

help.aliyun.com/zh/polardb/…