详情页标题前

腾讯云原生分布式云中心多集群应用和高可用容灾实践同尘

详情页1

概述

本文将通过配置和部署一个典型 Dubbo 项目 Q 云书城(Q Cloud Book Mall,QCBM)为例,详细介绍和展示如何在多云多集群场景下管理一个典型的微服务项目,通过简洁的操作实现多集群应用分发管理,调度和迁移,灰度更新等能力,最终搭建起具备多集群容灾能力的完整微服务业务。

前期准备

在开始部署服务前,请确认以下步骤已完成:注册腾讯云账号,并完成 实名认证。阅读 QCBM 项目,了解 Dubbo 微服务架构,详情可参见 QCBM 项目。阅读 Dubbo 应用托管到 TKE,了解 QCBM 项目如何能够部署在 TKE 集群上。掌握容器服务基础知识,详情见 容器服务 TKE 介绍。

技术架构

QCBM 是采用微服务架构,并使用 dubbo 框架开发的一个网上书城 Demo 项目,详情可参见 QCBM 项目。本文将 QCBM 扩展至多集群上统一管理,在整体架构上主要划分为接入层,应用层和数据层,配合相应管控和监控组件,实现多集群管理和多活容灾能力。整体架构图如下:

腾讯云原生分布式云中心多集群应用和高可用容灾实践同尘

接入层使用腾讯云 CLB 或其他云厂商 LB 产品结合 K8s ingress 和 service 实现流量接入和转发,也支持配置 Nginx 实现。本文以 腾讯云负载均衡 CLB 为例。数据层使用腾讯云数据库 MYSQL 和 Redis,或使用其他云厂商的数据库产品,同时也支持对接自建的 MySQL 和 Redis。本文以 腾讯云数据库 MYSQL 和 腾讯云数据库 Redis 为例说明。应用层由以下微服务应用组成,通过 应用治理 向多集群快速部署发布,并支持根据集群差异化配置进行灰度更新。QCBM-Front :使用 react 开发的前端项目,基于 Nginx 官方提供的 1.19.8 docker 镜像构建和部署。QCBM-Gateway :API 网关,接受前端的 http 请求,并转化为后台的 dubbo 请求。User-Service :基于 dubbo 的微服务,提供用户注册、登录、鉴权等功能。Favorites-Service :基于 dubbo 的微服务,提供用户图书收藏功能。Order-Service :基于 dubbo 的微服务,提供用户订单生成和查询等功能。Store-Service :基于 dubbo 的微服务,提供图书信息的存储等功能。

操作步骤

基础环境

1. 参考 搭建基础服务集群,分别在平台部署所需的基础服务,包括:Mysql、Redis、CLB、Nacos、TSW 等。2. 准备 QCBM 服务所运行的集群,本文以 TKE 集群为例进行演示,参考 创建集群 在两个不同地域创建 TKE 集群。注意在实际生产环境中,多个集群可位于不同地域、可用区、甚至不同云服务商,实现可控的基础设施故障域。

在 TDCC 注册集群

参考 创建注册集群,将集群注册至分布式云中心。例如,注册 “guangzhou-01” 和 “guangzhou-02” 集群,完成后查看集群状态正常。

腾讯云原生分布式云中心多集群应用和高可用容灾实践同尘

注意首次进入分布式云中心控制台,需要开通云原生分布式云中心 TDCC 服务,详情见 云原生分布式云中心快速入门

部署多集群应用

参考 应用管理 创建和管理多集群的应用,快速的将 QCBM 应用部署到多集群上。

创建分发策略

1. 登录 云原生分布式云中心控制台,进入分布式应用管理 > 分发策略页面。 2. 单击新建,创建分发策略 “qcbm-subscription”,在弹出的页面选择想要发布的目标集群,此处选择 “guangzhou-01” 集群。如下图所示:

腾讯云原生分布式云中心多集群应用和高可用容灾实践同尘

3. 单击创建完成创建,查看 qcbm-subscription 分发策略创建成功。

创建 Namespace

参考 QCBM 项目,创建 qcbm 命名空间,根据分发策略发布至指定集群。注意创建流程与单集群下创建的过程一致,仅需在配置页面最后选择指定的分发策略,例如:qcbm-subscription。方式 1:使用控制台方式 2:使用 YAML 部署1. 登录 云原生分布式云中心控制台,进入分布式应用管理 > 应用管理页面。2. 单击命名空间 > 新建,创建名称为 qcbm 的命名空间 Namespace,分发策略选择 qcbm-subscription。

腾讯云原生分布式云中心多集群应用和高可用容灾实践同尘

3. 单击创建完成创建,命名空间 qcbm 成功创建并分发至指定集群上。1. 登录 云原生分布式云中心控制台,进入分布式应用管理 > 应用管理页面。2. 单击 YAML 创建资源,输入以下 YAML 配置。3. 单击创建完成创建,修改分发策略选择 qcbm-subscription。

  apiVersion: v1  kind: Namespace  metadata: name: qcbm  spec: finalizers: - kubernetes

创建 ConfigMap

参考 QCBM 项目,创建名称为 qcbm-env 的 ConfigMap 用于存放相关配置,根据分发策略发布至指定集群。注意创建流程与单集群下创建的过程一致,仅需在配置页面最后选择指定的分发策略,例如:qcbm-subscription。方式 1:使用控制台方式 2:使用 YAML 部署1. 登录 云原生分布式云中心控制台,进入分布式应用管理 > 应用管理页面。2. 单击配置管理 > ConfigMap > 新建,创建名称为 qcbm-env 的 ConfigMap,分发策略选择 qcbm-subscription。

腾讯云原生分布式云中心多集群应用和高可用容灾实践同尘

3. 单击创建完成创建,查看配置成功的创建并分发至指定集群上。1. 登录 云原生分布式云中心控制台,进入分布式应用管理 > 应用管理页面。2. 单击 YAML 创建资源,输入以下 YAML 配置。3. 单击创建完成创建,修改分发策略选择 qcbm-subscription。

  apiVersion: v1  data: MYSQL_HOST: ## 根据实际配置填写 MYSQL_PORT: ## 根据实际配置填写 NACOS_HOST: ## 根据实际配置填写 NACOS_PORT: ## 根据实际配置填写 REDIS_HOST: ## 根据实际配置填写 REDIS_PORT: ## 根据实际配置填写 SW_AGENT_COLLECTOR_BACKEND_SERVICES: ## 根据实际配置填写  kind: ConfigMap  metadata: name: qcbm-env namespace: qcbm

创建 Secret

参考 QCBM 项目,创建名称为 qcbm-keys 的 Secret 用于存放相关配置,根据分发策略发布至指定集群。注意创建流程与单集群下创建的过程一致,仅需在配置页面最后选择指定的分发策略,例如:qcbm-subscription。方式 1:使用控制台方式 2:使用 YAML 部署1. 登录 云原生分布式云中心控制台,进入分布式应用管理 > 应用管理页面。2. 单击配置管理 > Secret > 新建,创建名称为 qcbm-keys 的 Secret,分发策略选择 qcbm-subscription。3. 单击创建完成创建,查看配置成功的创建并分发至指定集群上。1. 登录 云原生分布式云中心控制台,进入分布式应用管理 > 应用管理页面。2. 单击 YAML 创建资源,输入以下 YAML 配置。3. 单击创建完成创建,修改分发策略选择 qcbm-subscription。

  apiVersion: v1  kind: Secret  metadata: name: qcbm-keys namespace: qcbm labels:   qcloud-app: qcbm-keys  data: # echo -n xxx | base64 , 加 -n 去掉 echo 默认加的换行 MYSQL_ACCOUNT: ## 根据实际配置填写 MYSQL_PASSWORD: ## 根据实际配置填写 REDIS_PASSWORD: ## 根据实际配置填写 SW_AGENT_AUTHENTICATION: ## 根据实际配置填写  type: Opaque

创建 Deployment

参考 QCBM 项目,创建 user-service、store-service、qcbm-gateway、qcbm-front、order-service、favorites-service 工作负载,根据分发策略发布至指定集群。注意创建流程与单集群下创建的过程一致,仅需在配置页面最后选择指定的分发策略,例如:qcbm-subscription。方式 1:使用控制台方式 2:使用 YAML 部署1. 登录 云原生分布式云中心控制台,进入分布式应用管理 > 应用管理页面。2. 单击工作负载 > Deployment > 新建,创建名称为 user-service、store-service、qcbm-gateway、qcbm-front、order-service、favorites-service deployment 工作负载,分发策略选择 qcbm-subscription。

腾讯云原生分布式云中心多集群应用和高可用容灾实践同尘

3. 单击创建完成创建,查看配置成功的创建并分发至指定集群上。1. 登录 云原生分布式云中心控制台,进入分布式应用管理 > 应用管理页面。2. 单击 YAML 创建资源,输入以下 YAML 配置。3. 单击创建完成创建,修改分发策略选择 qcbm-subscription。

  apiVersion: apps/v1  kind: Deployment  metadata: name: user-service namespace: qcbm labels:   app: user-service   version: v1  spec: replicas: 1 selector:   matchLabels:     app: user-service     version: v1 template:   metadata:     labels:       app: user-service       version: v1   spec:     containers:       - name: user-service         image: ccr.ccs.tencentyun.com/qcbm/user-service:fdd3edd         imagePullPolicy: Always         env:           - name: NACOS_HOST  # dubbo 服务注册中心 nacos 的 IP 地址             valueFrom:               configMapKeyRef:                 key: NACOS_HOST                 name: qcbm-env                 optional: false           - name: MYSQL_HOST  # Mysql 地址             valueFrom:               configMapKeyRef:                 key: MYSQL_HOST                 name: qcbm-env                 optional: false           - name: MYSQL_PORT             valueFrom:               configMapKeyRef:                 key: MYSQL_PORT                 name: qcbm-env                 optional: false           - name: REDIS_HOST  # Redis 的 IP 地址             valueFrom:               configMapKeyRef:                 key: REDIS_HOST                 name: qcbm-env                 optional: false           - name: REDIS_PORT             valueFrom:               configMapKeyRef:                 key: REDIS_PORT                 name: qcbm-env                 optional: false           - name: MYSQL_ACCOUNT             valueFrom:               secretKeyRef:                 key: MYSQL_ACCOUNT                 name: qcbm-keys                 optional: false           - name: MYSQL_PASSWORD             valueFrom:               secretKeyRef:                 key: MYSQL_PASSWORD                 name: qcbm-keys                 optional: false           - name: REDIS_PASSWORD             valueFrom:               secretKeyRef:                 key: REDIS_PASSWORD                 name: qcbm-keys                 optional: false           - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES             valueFrom:               configMapKeyRef:                 key: SW_AGENT_COLLECTOR_BACKEND_SERVICES                 name: qcbm-env                 optional: false           - name: SW_AGENT_AUTHENTICATION             valueFrom:               secretKeyRef:                 key: SW_AGENT_AUTHENTICATION                 name: qcbm-keys                 optional: false         ports:           - containerPort: 20880 # dubbo 端口号             protocol: TCP         volumeMounts:           - name: dumpath             mountPath: /app/dumps           - name: logpath             mountPath: /app/logs     volumes:       - name: dumpath         hostPath:           path: /data/dumps/user-service           type: DirectoryOrCreate       - name: logpath         hostPath:           path: /data/logs/user-service           type: DirectoryOrCreate

创建 Service

参考 QCBM 项目,创建名称为 qcbm-front 和 api-gateway 的 Service,根据分发策略发布至指定集群。注意创建流程与单集群下创建的过程一致,仅需在配置页面最后选择指定的分发策略,例如:qcbm-subscription。方式 1:使用控制台方式 2:使用 YAML 部署1. 登录 云原生分布式云中心控制台,进入分布式应用管理 > 应用管理页面。2. 单击服务与路由 > Service > 新建,创建名称为 qcbm-front 和 api-gateway 的 Service,分发策略选择 qcbm-subscription。3. 单击创建完成创建,查看配置成功的创建并分发至指定集群上。1. 登录 云原生分布式云中心控制台,进入分布式应用管理 > 应用管理页面。2. 单击 YAML 创建资源,输入以下 YAML 配置。3. 单击创建完成创建,修改分发策略选择 qcbm-subscription。


  apiVersion: v1  kind: Service  metadata:    name: qcbm-front    namespace: qcbm  spec:    type: NodePort    selector:      app: qcbm-front      version: v1    ports:      - name: http        port: 80        targetPort: 80        nodePort: 30080  ---  apiVersion: v1  kind: Service  metadata:    name: api-gateway    labels:      app: api-gateway    namespace: qcbm    annotations:      service.kubernetes.io/qcloud-loadbalancer-internal-subnetid: ## 根据实际配置填写  spec:    externalTrafficPolicy: Cluster    ports:      - name: http        port: 8080        targetPort: 8080        protocol: TCP        nodePort: 32500    selector:  # 将后端服务 qcbm-gateway 和该 Service 进行映射      app: qcbm-gateway      version: v1    type: LoadBalancer



创建 Ingress

参考 QCBM 项目,创建名称为 qcbm-ingress 的 Ingress,根据分发策略发布至指定集群。注意创建流程与单集群下创建的过程一致,仅需在配置页面最后选择指定的分发策略,例如:qcbm-subscription。方式 1:使用控制台方式 2:使用 YAML 部署1. 登录 云原生分布式云中心控制台,进入分布式应用管理 > 应用管理页面。2. 单击服务与路由 > Ingress > 新建,创建名称为 qcbm-ingress 的 Ingress,分发策略选择 qcbm-subscription。3. 单击创建完成创建,查看配置成功的创建并分发至指定集群上。1. 登录 云原生分布式云中心控制台,进入分布式应用管理 > 应用管理页面。2. 单击 YAML 创建资源,输入以下 YAML 配置。3. 单击创建完成创建,修改分发策略选择 qcbm-subscription。

  apiVersion: extensions/v1beta1  kind: Ingress  metadata: name: qcbm-ingress namespace: qcbm annotations:   ingress.cloud.tencent.com/direct-access: "false"   kubernetes.io/ingress.class: qcloud   kubernetes.io/ingress.extensiveParameters: '{"AddressIPVersion":"IPV4"}'   kubernetes.io/ingress.http-rules: '[{"host":"qcbm.com","path":"/","backend":{"serviceName":"qcbm-front","servicePort":"80"}}]'  spec: rules:   - host: qcbm.com     http:       paths:         - path: /           backend:             serviceName: qcbm-front             servicePort: 80

查看部署结果

至此,您已完成 QCBM 在 “guangzhou-01” 集群上的部署,可通过以下步骤查看部署结果:1. 登录 云原生分布式云中心控制台,进入分布式应用管理 > 应用管理页面。2. 单击服务与路由 > Ingress 进入 Ingress 页面,可查看到创建的 qcbm-ingress。单击进入详情 > 实例管理

腾讯云原生分布式云中心多集群应用和高可用容灾实践同尘

3. 通过 Ingress 的 VIP 即可访问 Q 云书城页面。

腾讯云原生分布式云中心多集群应用和高可用容灾实践同尘



多集群调度管理

新增集群发布

根据业务发展和容灾保障的需求,需要将 QCBM 应用部署至另外一个集群,可以通过编辑分发策略快速地实现。1. 登录 云原生分布式云中心控制台,进入分布式应用管理 > 分发策略页面。 2. 选择分发策略 qcbm-subscription,单击关联集群,添加 “guangzhou-02” 集群。3. 单击确定,分布式云中心将自动将所有 QCBM 应用分发至两个集群上。单击名称进入详情页面可查看详情信息和拓扑图。

腾讯云原生分布式云中心多集群应用和高可用容灾实践同尘



差异化配置集群下实例

QCBM 应用已部署在两个集群上,由于不同集群间环境的差异,QCBM 应用需要在不同集群上有差异化的配置,可以通过差异化策略实现。
例如 api-gateway Service 需要为 “guangzhou-02” 集群指定 subnet-id,可通过以下步骤实现:1. 登录 云原生分布式云中心控制台,进入分布式应用管理 > 应用管理页面。 2. 进入服务与路由 > Service,单击 api-gateway 名称进入详情 > 实例管理页面,选择 “guangzhou-02” 集群下的实例,新建差异化策略。

  apiVersion: apps.clusternet.io/v1alpha1  kind: Localization  metadata: name: qcbm-svc-gateway-override namespace: ## 根据实际配置填写   spec: priority: 300 feed:   apiVersion: v1   kind: Service   name: api-gateway   namespace: qcbm overrides:    - name: svc-override     type: JSONPatch     value: |-       [           {               "op": "replace",               "path": "/metadata/annotations/service.kubernetes.io~1qcloud-loadbalancer-internal-subnetid",               "value": ""  ## 根据实际配置填写           }       ]

3. 单击确定保存,分布式云中心将根据该差异化策略自动调整对应集群下的配置。4. 进入 “guangzhou-02” 集群的 Ingress 页面,找到 qcbm-ingress 地址,通过该地址即可访问 “guangzhou-02” 集群下的 Q 云书城页面。

腾讯云原生分布式云中心多集群应用和高可用容灾实践同尘



多活容灾能力验证

按照以上云原生分布式云中心 TDCC 多集群应用管理的操作,QCBM 业务应用分别部署在 “guangzhou-01” 和 “guangzhou-02” 集群上,对外暴露 ingress 地址提供 Q 云书城的服务。此时可以使用已有或 新申请域名,添加 ingress 地址解析,实现基本的多活容灾能力。例如参考以下步骤验证多集群高可用:1. 配置本地 hosts 域名 “tke-demo.cn”,默认访问 “guangzhou-01” 集群的 ingress 地址,页面能够正常访问,工作正常。2. 手动驱逐该集群的节点或停止应用,模拟环境故障,此时访问 “tke-demo.cn” 返回错误。3. 通过修改 hosts 配置来模拟 DNS 切换。

# /etc/hosts#1.14.x.x   tke-demo.cn     # guangzhou-01 ingress address129.226.x.x   tke-demo.cn   # guangzhou-02 ingress address

4. 重新打开浏览器访问 “tke-demo.cn”,页面能够正常访问,工作正常。按照以上步骤可以验证,通过 TDCC 分布式云中心部署的多活容灾 QCBM 业务,实现了多集群高可用容灾,保证了业务对灾难级别事件的保护的能力。更进一步按照同样的流程,可以将 QCBM 业务部署至本地集群、第三方云服务商集群、边缘集群上,实现跨云服务和容灾的能力。
官网1折活动,限时活动,即将结束,速速收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/146857.html

(0)
上一篇 2023年12月9日
下一篇 2023年12月9日
详情页2

相关推荐

  • 腾讯云对象存储清单

    简介 本文档提供关于清单的 API 概览以及 SDK 示例代码。 API 操作名 操作描述 PUT Bucket inventory 设置清单任务 设置存储桶的清单任务 GET Bucket inventory 查询清单任务 查询存储桶的清单任务 DELETE Bucket inventory 删除清单任务 删除存储桶的清单任务 SDK API 参考 SDK…

    腾讯云 2023年12月9日
  • 腾讯云云直播直播时移

    云直播对直播时移进行了全新升级,您可以在控制台创建时移模板便捷开通新版直播时移功能。按拼接规则对直播时移播放地址进行组装,可以在直播中回看直播内容。同时直播时移功能已接入API3.0,请参见 新版直播时移相关接口。通过本文,您将了解新版直播时移的原理和播放请求方式。 注意事项 新版直播时移目前支持3万人同时观看,如有更大并发时移播放需求,请 提交工单 与我们…

    腾讯云 2023年12月9日
  • 腾讯云TDSQL-C MySQL版日志服务 CLS

    TDSQL-C MySQL 版提供日志服务(CLS)功能,可采集来源为 TDSQL-C MySQL 版实例的慢日志数据,并投递至日志服务(Cloud Log Service,CLS)进行分析,实现从日志采集,日志存储到日志检索等全方位的日志服务,以便快速监控和定位业务问题。本文为您介绍如何通过控制台开启或关闭日志服务(CLS)功能。说明:本功能陆续发布中,如…

    2023年12月9日
  • 腾讯云云函数(SCF)命名空间管理-云淘科技

    操作场景 命名空间为函数提供了相对独立的运行环境,在创建云函数时,您可以选择函数所在的命名空间,从而更有效地管理您的云函数。 使用限制 针对命名空间的使用,有如下限制:命名空间名称最长60个字符,以字母开头,名称可包含 a – z,A – Z,0 – 9,-,_,且需要以数字或字母结尾,例如 Tencent-Cloud_S…

    2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云对象存储版本控制

    简介 本文档提供关于版本控制的 API 概览以及 SDK 示例代码。 API 操作名 操作描述 PUT Bucket versioning 设置版本控制 设置存储桶的版本控制功能 GET Bucket versioning 查询版本控制 查询存储桶的版本控制信息 设置版本控制 功能说明 PUT Bucket versioning 接口实现启用或者暂停存储桶的…

    腾讯云 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。