阿里云 ACK One 新特性:多集群网关,帮您快速构建同城容灾系统
云布道师
近日,阿里云分布式云容器平台 ACK One[1]发布“多集群网关”[2](ACK One Multi-cluster Gateways)新特性,这是 ACK One 面向多云、多集群场景提供的云原生网关,用于对多集群南北向流量进行统一管理。
基于 ACK One 多集群网关可以快速构建多集群应用的同城容灾系统,帮助企业以更简单、高效的方式为应用数据的连续性和可用性提供保障。
为什么需要同城容灾
由于故障的多样性和不确定性,在一些极端情况下(如发生断网断电、火灾、地震等),需要保证应用和数据的高可用,因此需要容灾方案,目前云上容灾主要分为三类:
-
同城跨 AZ 容灾
-
跨地域容灾
-
两地三中心
同城容灾包含多活和主备,同城中心之间物理距离较近,网络延迟低,可防范 AZ 级别性质的灾难损害(如火灾、发生断网断电等);跨地域容灾则网络延迟相对较高,但可防范地域性质的灾难损害(如地震、水灾等);两地三中心则将同城双中心和跨 Region 灾备结合起来,兼具了二者优点,适用于应用与数据连续性和可用性要求高的场景。
而从实际情况考虑,同城容灾相比于跨地域容灾,在数据容灾方面容易实现得多,所以同城容灾仍然具有非常重要的意义。
现有同城容灾方案及问题
在 K8s 集群中的应用,现有的同城多可用区/多集群容灾的方案,基本都是基于 DNS 和多个 Ingres Controller 来实现,一般架构图如下所示:
虽然在 DNS 与 SLB 之间可以增加类似于全局流量管理(GTM)等一些网关功能类产品,来支持用户就近接入、高并发负载均衡、健康检查与故障切换等能力,完善容灾方案,但现有的基于 DNS 的容灾方案仍具有一些问题:
-
基于 DNS 的方案,无法支持七层路由转发;
-
基于 DNS 的方案在 IP 切换时候,通常会有 Client 端缓存而造成服务短暂不可用,用户体验有所影响;
-
基于 DNS 的方案通常需要多个 LB(每个集群/可用区一个),并且需要在每个集群中都安装 Ingress Controller 和创建 Ingress 对象,管理和费用成本较高。
基于 ACK One 多集群网关实现的同城容灾方案
什么是 ACK One 多集群网关
多集群网关由 ACK One Fleet 通过集成 MSE 云原生网关[3]来实现,并使用 Ingress API 来管理多集群南北向流量,可以帮您管理七层流量,并进一步实现同城自动容灾、基于 Header 的灰度发布验证、基于副本数和权重的流量负载均衡等多集群应用相关的所需能力。
此外,多集群网关是地域级别的,所有操作都仅需在 ACK One Fleet 实例中操作(创建网关、Ingress 资源等),无需在每个 ACK 集群中都安装 Ingress Controller 和创建 Ingress 资源,提供地域级全局流量管理能力的同时,也减少了多集群管理的成本。
关于 MSE Ingress 与 MSE 云原生网关
MSE Ingress[4]是在 MSE 云原生网关之上提供更为强大的 Ingress 流量管理方式,兼容 Nginx Ingress 以及 50 多个 Nginx Ingress 的注解,覆盖 90% 以上的 Nginx Ingress 业务场景,支持多服务版本同时灰度发布、灵活的服务治理能力以及全方位的安全防护保障,能够满足大规模云原生分布式应用的流量治理诉求。其支持的 Annotation 详见 MSE Ingress 支持的 Annotation[5]。
在 ACK One Fleet 中,管理员可以通过 kubectl 创建 MseIngressConfig 资源来创建出 MSE 云原生网关,由其来管理多集群流量,并创建 Ingress 资源来管理流量路由。
Kubernetes 服务的流量管理概述
在 Kubernetes 的流量管理领域,Ingress Controller 是非常重要的方案,Ingress Controller 作为一个专门的 4 层和 7 层代理,用来管理南北向流量:将流量导入 K8s 集群,到达 services,再导出。
Kubernetes Ingress API[6]主要目标就是使用简单的、声明式的 API 来代理集群中服务,其在 Kubernetes 1.2 就已 Beta,有非常多的厂商支持 Ingress,并扩展了非常多的功能,使用也很广泛,所以使用 Ingress API 的学习成本较低。
值得一提的是,Kuberentes Gateway API[7]相比于 Ingress,提供了更通用的代理 API,支持更多协议,可实现更多的能力,MSE 在后续提供对 Gateway API 的支持,满足用户复杂的流量管理诉求。
综合各方面考虑,ACK One 当前选择以 Ingress API 的方式来支持多集群的南北向流量管理。
基于 ACK One 多集群网关实现的同城容灾方案
基于 ACK One 多集群网关可以快速构建多集群应用的同城容灾系统,包括同城多活容灾和同城主备容灾。整体架构如下:
- 一个地域两个不同可用区(AZ 1 和 AZ 2),各创建一个 ACK 集群(Cluster 1 和 Cluster 2)
- 在 ACK One Fleet 中通过 MseIngressConfig 资源在 Fleet 所在地域、所在 VPC 创建出 MSE 网关
- 通过 ACK One GitOps 将应用分发到多集群中(已创建的 Cluster 1 和 Cluster 2 集群)
- 在 Fleet 中通过创建 Ingress 来设置流量规则,支持跨多个 ACK 集群的以下能力:
HTTP routing:七层路由转发 § 如 header-based 路由:基于 header 将流量路由到指定集群、基于 header 的灰度验证
traffic splitting:根据权重路由流量、A/B 测试、蓝绿部署、金丝雀发布等
health-based 自动平滑容灾:流量在多集群/多可用区自动平滑容灾。某个集群或者集群内某个副本 unhealthy 后,流量会被自动平滑地路由到另一个集群或者其他健康的副本
traffic mirroring、基于副本数负载均衡流量等
方案优势
由以上架构,我们可以知道,基于 ACK One 多集群网关的容灾方案,相比于基于 DNS 流量分发的容灾方案具有以下优势:
- 基于 DNS 流量分发的容灾方案需要多个 LB IP(每个集群 1 个),而基于多集群网关的容灾方案在地域级别仅需要 1 个 LB
IP,且默认提供同地域多可用区的高可用性。 - 基于多集群网关的容灾支持七层路由转发能力,而基于 DNS 流量分发的容灾不支持七层路由转发。
- 基于 DNS 流量分发的容灾方案在 IP 切换时,通常会有客户端缓存而造成服务短暂不可用,而基于多集群网关的容灾方案则可以平滑地将流量 Fallback 到另一个集群的服务后端。
- 多集群网关是地域级别的,所以所有操作都仅需在 Fleet 实例中操作(创建网关、Ingress 资源等),无需在每个 ACK 集群中都安装 Ingress Controller 和创建 Ingress 资源,在提供地域级全局流量管理能力的同时,减少多集群管理成本。
基于多集群网关的同城多活容灾
基于多集群网关的同城多活容灾如下图所示:
- 在 cluster1 与 cluster2 中存在同名服务(K8s service 的 name 和 namespace
一致),且副本数为 1:1 - 网关会将流量按照 1:1 的比例路由到 cluster1 和 cluster2 中
- 当 cluster1 异常时(如副本数变为 0),cluster1 的 50% 流量会被自动迁移到 cluster2,此时 100%流量会被路由到 cluster2
基于多集群网关的同城主备容灾
基于多集群网关的同城主备容灾如下图所示:
- 在 AZ 1 cluster1 与 AZ 2 cluster2 中存在同名服务(K8s service 的 name 和
namespace 一致) - 服务以 cluster1 为主,cluster2 为备,默认只有主提供服务,100% 流量会路由到 cluster1
- 当主异常以后,100% 流量会被自动平滑地路由到备(AZ 2 的 cluster2)
总结
ACK One 多集群网关提供了强大的能力,与此同时,结合 ACK One GitOps[8]的应用多集群分发和持续部署能力,可以帮您快速、低成本地构建对多集群应用平滑容灾的同城容灾系统。更多详情可以查看基于多集群网关实现同城容灾[9]和多集群网关概述[10]。
欢迎使用钉钉扫描二维码或搜索群号加入我们。(钉钉群号:35688562)
相关链接:
[1] ACK One
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/product-overview/ack-one-overview?spm=a2c4g.11186623.0.0.6f5848b0idmr0L
[2] 多集群网关
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/multi-cluster-traffic-gateway-overview?spm=a2c4g.11186623.0.0.5fd048b0oh9MLf
[3] MSE 云原生网关
https://help.aliyun.com/zh/mse/product-overview/cloud-native-gateway-overview?spm=a2c4g.11186623.0.0.260a3db39PGupl
[4] MSE Ingress
https://help.aliyun.com/zh/mse/user-guide/overview-of-mse-ingress-gateways#task-2193958
[5] MSE Ingress 支持的 Annotation
https://help.aliyun.com/zh/mse/user-guide/annotations-supported-by-mse-ingress-gateways?spm=a2c4g.11186623.0.0.4c074ca8JGvcpx
[6] Kubernetes Ingress API
https://kubernetes.io/docs/concepts/services-networking/ingress/
[7] Kuberentes Gateway API
https://gateway-api.sigs.k8s.io/
[8] ACK One GitOps
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/gitops-overview?spm=a2c4g.11186623.0.0.596377b7htoy5W
[9] 基于多集群网关实现同城容灾
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/use-cases/zone-disaster-recovery-based-on-multi-cluster-gateway?spm=a2c4g.11186623.0.0.54b7681cMIMBoN
[10] 多集群网关概述
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/multi-cluster-gateway-overview?spm=a2c4g.11186623.0.0.c01b6fd6rNopUT
相关文章:

阿里云 ACK One 新特性:多集群网关,帮您快速构建同城容灾系统
云布道师 近日,阿里云分布式云容器平台 ACK One[1]发布“多集群网关”[2](ACK One Multi-cluster Gateways)新特性,这是 ACK One 面向多云、多集群场景提供的云原生网关,用于对多集群南北向流量进行统一管理。 基于 …...

vscode自定义代码片段
前言 代码片段,指的是能够帮助输入重复代码模式,比如初始页面的模板。通过 snippet ,我们仅仅输入一小段字符串,就可以在代码片引擎的帮助下,生成预定义的模板代码,接着我们还可以通过在预定义的光标位置之…...

【贪心算法】专题练习一
欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析(3) 前言 1.什么是贪心算法?——贪婪鼠目寸光 贪心策…...

【JMeter】使用nmon进行性能资源监控
一、前言 在工作中可能会遇到需要在压测的时候对Linux服务器进行性能资源监控的情况。这时可以用nmon来对服务器进行监控。 二、nmon的下载安装 1.查看系统信息 shell cat /etc/os-release 结果为 shell PRETTY_NAME"Debian GNU/Linux 12 (bookworm)" NAME&…...

Unity预设体
目录 预设体是什么? 如何创建预设体? 如何修改预设体? 如何删除预设体? 预设体是什么? Unity中的预设体(Prefab)是一种可重复使用的游戏对象模板。它允许开发者创建一个或多个游戏对象&…...

Elasticsearch 写入优化探索:是什么影响了refresh 耗时?
1、问题背景: 数据写入后,refresh耗时过长,能达到1s-5s。 想通过测试,探索确认影响refresh的因素,比如:写入操作是新增还是更新,deleted文档占比是否有影响,是否有其他索引配置&…...
Java8新特性——函数式接口
目录 一、介绍 二、示例 (一)Consumer 源码解析 测试示例 (二)Comparator (三)Predicate 三、应用 四、总结 一、介绍 FunctionalInterface是一种信息注解类型,用于指明接口类型声明…...

Epson打印机连接wifi
环境 Epson L3153 打印机联通无线光猫 背景 最近家里的联通宽带不太稳定,经常断网。今天打了联通客服电话,师傅上门来,说可能是光猫用的时间太长了,换了一个新的联通光猫,问题解决。 wifi的名称是 CU_Y3ft 和 CU_Y3…...
Chapter 7 - 6. Congestion Management in Ethernet Storage Networks以太网存储网络的拥塞管理
Dedicated and Converged Ethernet Network专用和融合以太网网络 Just because a network is configured as a converged Ethernet network (lossy and lossless traffic), doesn’t necessarily mean that lossy and lossless traffic runs on it simultaneously. For exampl…...

【论文笔记】NeuRAD: Neural Rendering for Autonomous Driving
原文链接:https://arxiv.org/abs/2311.15260 1. 引言 神经辐射场(NeRF)应用在自动驾驶中,可以创建可编辑的场景数字克隆(可自由编辑视角和场景物体),以进行仿真。但目前的方法或者需要大量的训…...
通信原理 | 分贝dB、功率、功率谱、功率谱密度、信噪比
文章目录 分贝功率和分贝的关系能量谱功率谱功率谱和功率谱密度是不同的功率谱密度随机信号和确知信号信噪比基本定义分贝表示应用分贝 分贝:(用dB表示)是量度两个相同单位之间数量比例的计量单位,主要用于度量声音强度。 1贝尔(B)=10分布(dB),即1B = 10dB 分贝是以美国…...
Go中的Context是什么?
在 Go 编程语言(通常称为 Golang)中,术语 "上下文 "指的是上下文包及其定义的上下文类型。上下文包用于跨 API 边界和进程间传输截止日期、取消信号和其他请求范围值。 上下文包的主要目的是管理并发或分布式系统中操作的生命周期…...

碳排放预测 | 基于ARIMA和GM(1,1)的碳排放预测(Matlab)
目录 预测效果基本介绍模型描述ARIMA模型GM(1,1)模型 程序设计参考资料 预测效果 基本介绍 基于ARIMA和GM(1,1)的碳排放预测(Matlab) 基于ARIMA(自回归移动平均模型)和GM(1,1)(灰色预测模型)的碳排放预测是…...

FPFA.一种二倍频电路代码描述以及测量详情
一、前言 1、因为需要倍频电路所以找了个二倍频的电路,通过fpga实际测量发现经过倍频后的电路峰值降低。不过这个也正常,因为该电路只要过触发点就会开始发生波形变化,而电路的触发值不是峰值。 2、继续对电路做倍频后信号做二…...

dotnet命令创建C#项目,VSCode打开
在命令行中创建项目并运行 1.首先安装.net 下载地址:.NET | 构建。测试。部署。 2.在 cmd 控制台输入 dotnet --vesion 检查版本号是否正常 3.我用git bash环境输入命令创建项目 // 创建文件夹 mkdir MyVSCode // 进入该文件夹 cd MyVSCode/ // 创建控制台项目 dotnet …...

在GitHub找开源项目
在 GitHub 的搜索框里: 使用搜索关键词可以在 GitHub 上快速的找你需要的开源项目: 限制搜索范围 通过 in 关键词 (大小写不敏感) 限制搜索范围: 公式搜索范围in:name xxx项目名包含xxxin:description xxx项目描述包含xxxin:readme xxx项目…...

GAMES101-LAB1
文章目录 一、问题简述二、框架准备三、作业参考3.1 模型矩阵3.1 参考代码 3.2 投影矩阵3.2.1 压扁操作(透视投影)3.2.2 正交投影3.2.3 参考代码 四、附件 一、问题简述 接下来的三次作业,将模拟一个基于CPU的光栅化渲染器的简化版本本次作业的任务是实现一个旋转矩…...

Docker 编译OpenHarmony 4.0 release
一、背景介绍 1.1、环境配置 编译环境:Ubuntu 20.04OpenHarmony版本:4.0 release平台设备:RK3568 OpenHarmony 3.2更新至OpenHarmony 4.0后,公司服务器无法编译通过,总是在最后几十个文件时报错,错误码4000…...
Vue 3 表单处理精讲:打造响应式注册表单的艺术
🧙♂️ 诸位好,吾乃诸葛妙计,编程界之翘楚,代码之大师。算法如流水,逻辑如棋局。 📜 吾之笔记,内含诸般技术之秘诀。吾欲以此笔记,传授编程之道,助汝解技术难题。 &…...

浅谈Guava Cache的参数使用
CacheLoader 用于数据加载方式比较固定且统一的场景,在缓存容器创建的时候就需要指定此具体的加载逻辑。通常开发中使用时我们需要继承CacheLoader类或写一个匿名实现类实现其load方法和reload方法 load方法 当执行get操作没有命中缓存或者判断缓存已经超出expir…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...