方案概述
分布在同城多个机房内的应用同时对外提供服务。同城机房物理距离较小,一般小于 50 公里。同城多活架构的难点有三个:
当某机房出现故障,能不能做到机房级的快速切换?
如何实现非对等部署下的全局的流量负载均衡?
对流量的精细化管控?
常见的同城多活实现方式(如下图),在这个架构里。DNS 本身存在缓存,DNS 的域名是映射到机房的网关 IP,网关又是每个机房一个局部的。很难做到机房级故障的秒级自动转移和非对等状态下的全局负载均衡。如果两个机房的微服务应用如果共用一套注册中心,就没办法保证微服务调用单元内闭环。
应用场景
借助云原生微服务引擎 MSE 产品,配置注册中心的同城容灾多活微服务应用。提供一个经典微服务场景在云上实现同城容灾的步骤,通过云原生相关产品在用户应用上云时解决高可用,同城容灾,多活等需求。主要步骤:
通过 CADT 快速完成应用环境部署;
同城双 MSE 注册中心接入;
MSE 网关接入。
方案适合场景和优势
MSE 云原生网关
云原生网关默认双可用区部署,既使一个可用区的节点都挂了,另一个可用区的节点依旧可以正常工作。
MSE 注册中心
MSE 注册中心默认三可用区部署,即使两个可用区的节点都挂了依然不会影响业务。
机房级故障的秒级自动转移
云原生网关对于关联服务的每个节点都建立了主动健康检查的机制,默认是 2 秒(也可以自己调整)。主动健康检查发现节点不健康,则会自动剔除,健康检查除了 TCP 的端口探测外,也支持 HTTP 的探测,通过健康检查机制,可以实现机房级故障的秒级自动转移。
非对等部署状态下的全局流量负载均衡
云原生网关会把两个集群的同名服务进行合并,然后在合并后的节点数量的基础上实现多种负载均衡策略,通过这种方式可以很好的实现两个机房在非对等部署状态下的负载均衡,例如:两个机房的同应用各部署了 5 个节点,这个时候云原生网关会把两个机房的同名服务的节点进行合并,变成 10 个。然后云原生网关在这 10 个中实现轮询等负载均衡策略,假设机房 1 的节点挂了 4 个,还剩一个。那这时分配给机房 1 的流量会自动的从 50% 降到 10%,分配给机房 2 的流量会自动的从 50% 提升到 90%。
流量的精细化管控
每个集群一套注册中心,应用启动的时候只像本可用区的注册中心注册。这样可以保证微服务调用在可用区内闭环。微服务调用可用区闭环以后,可以配合云原生网关的多种流量路由能力实现蓝绿和灰度等发布策略。
部署架构
架构说明
2 个 MSE 注册配置中心, 2 个 ACK 集群,1 个高可用 MSE 云原生网关。
每个可用区的微服务只注册到本 AZ 的 MSE 注册配置中心,实现闭环调用。
两个 AZ 共享 1 个 NAT 网关,用于容器节点拉取镜像。
产品介绍
专有网络 VPC(Virtual Private Cloud): 是用户基于阿里云创建的自定义私有网络, 不同的专有网络之间二层逻辑隔离,用户可以在自己创建的专有网络内创建和管理云产品实例,比如 ECS、负载均衡、RDS 等。
容器服务 Kubernetes 版 ACK: 容器服务 Kubernetes 版(简称 ACK)提供高性能且可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。在 2021 年,ACK 成为国内唯一连续三年入选 Gartner 公共云容器报告的产品,同时在 2022 年成为国内唯一进入 Forrester 领导者象限的产品。ACK 整合了阿里云的虚拟化、存储、网络和安全能力,助力企业高效运行云端 Kubernetes 容器化应用。
微服务引擎 MSE: 微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持 Higress/Nginx/Envoy,遵循 Ingress 标准)、微服务治理和分布式任务调度能力(兼容开源 XXL-JOB/ElasticJob/K8s Job/Spring Schedule)。
云速搭 CADT(Cloud Architect Design Tools): 是一款为上云应用提供自助式云架构管理的产品,显著地降低应用云上管理的难度和时间成本。本产品提供丰富的预制应用架构模板,同时也支持自助拖拽方式定义应用云上架构;支持较多阿里云服务的配置和管理。用户可以方便的对云上架构方案的成本、部署、运维、回收进行全生命周期的管理。
NAT 网关: 阿里云 NAT 网关(NAT Gateway,简称 NAT)提供公网 NAT 和私网 NAT 两种功能。公网 NAT 网关通过自定义 SNAT、DNAT 规则可为云上服务器提供对外公网服务、及主动访问公网能力;私网 NAT 网关(也即 VPC NAT 网关)可使 VPC 内的 ECS 实例通过私网地址转换服务,实现 VPC 与 VPC 之间、及 VPC 与线下 IDC 互访能力。
弹性公网 IP: 弹性公网 IP 是独立的公网 IP 资源,可与阿里云专有网络 VPC 类型的云服务器 ECS、NAT 网关、ENI 网卡、私网负载均衡 SLB 绑定,并可以动态解绑满足灵活管理的要求。弹性公网 IP 可为您在云上部署的网站提供 Internet 访问服务。
前置条件
在进行本文操作之前,您需要完成以下准备工作:
1)注册阿里云账号,并完成实名认证。您可以登录阿里云控制台,并前往实名认证页面 (https://account.console.aliyun.com/v2/#/authc/home) 查看是否完成实名认证。
2)购买按量付费资源,阿里云账户余额需要大于 100 元。考虑到部署后每小时会产生费用,建议账号内余额或者代金卷金额大于 200 元。您可以登录阿里云控制台,前往账户总览页面 (https://usercenter2.aliyun.com/home) 查看账户余额。
操作步骤
基础环境搭建
在 ACK 集群中部署 Demo 应用
2.1. 打开部署好的应用2.2. 获取 J 和 K 区 MSE 注册中心地址
配置 MSE 网关及路由
3.1. 配置 MSE 网关
多活场景验证
4.1. 通过云原生网关进行路由调试
4.2. 多活验证
4.3. 切流验证
4.4. PTS 压测验证(可选)
一键释放资源
最佳实践全部内容,请点击此处查看。对方案和产品感兴趣的朋友,可以加入钉钉群交流(群号:31852400)。
往期文章:
云原生最佳实践系列 1:借助云速搭 CADT 如何实现 Kafka 的性能压测?