文档首页/ 华为云UCS/ 最佳实践/ 集群联邦/ 使用集群联邦实现应用多活容灾
更新时间:2024-11-01 GMT+08:00

使用集群联邦实现应用多活容灾

应用场景

为了应对云单点宕机故障,UCS的集群联邦提供多云多活应用、秒级流量接管能力。业务应用的实例可以多云多活的部署在不同云上的容器服务中,当云单点宕机故障发生时,集群联邦可以秒级自动完成应用实例的弹性迁移以及流量的切换,业务的可靠性大大提升。

多活容灾方案示意如图1所示,通过创建域名访问规则,将应用分发到3个Kubernetes集群,包括两个华为云CCE集群(部署在不同Region)和一个其他云的Kubernetes集群,实现应用的多活容灾。

图1 多云集群应用多活容灾示意图

准备工作

  • 准备应用所运行的集群,本文以CCE集群为例进行演示,参考购买CCE集群在两个不同区域(如:华南-广州和华东-上海一)创建CCE集群,要求Kubernetes版本为1.19及以上,并且各个集群中至少拥有一个可用节点。

    在实际生产环境中,多个集群可位于不同区域、可用区,甚至不同云服务商,实现应用的多活容灾。

  • 已购买公网域名,并添加至华为云云解析(DNS)服务,具体操作请参考配置网站解析

基础环境搭建

  1. 将集群注册到UCS并接入网络。具体操作请参见注册集群

    例如,将集群“ccecluster01”、“ccecluster02”注册到UCS的“ucs-group”容器舰队,并查看集群是否处于正常运行状态。

  2. 为集群所在舰队开通集群联邦,并确保集群已成功接入集群联邦。具体操作请参见集群联邦

    图2 集群管理

  3. 创建联邦工作负载。

    为展示流量切换的效果,本文中两个集群的容器镜像版本不同(实际生产环境中并不会存在此差异)。

    • 集群ccecluster01:示例应用使用nginx:gz镜像,返回“ccecluster01 is in Guangzhou.”。
    • 集群ccecluster02:示例应用使用nginx:sh镜像,返回“ccecluster02 is in Shanghai.”。

    在开始操作之前,您需要将示例应用的镜像上传到对应集群所在区域的SWR镜像仓库中(也就是说,nginx:gz镜像需要上传至华南-广州,nginx:sh镜像上传至华东-上海一),否则联邦工作负载会因拉取不到镜像而异常。

    本文中的应用仅作示例,在实际生产环境中需替换为您的自有应用,且对集群的云服务商、区域、数量不作限制。

    1. 登录UCS控制台,选择左侧导航栏中的“容器舰队”。
    2. 单击已开通集群联邦的舰队名称,进入详情页面。
    3. 在左侧导航栏选择“联邦管理 > 工作负载”,单击右上角“镜像创建”。
    4. 填写基本信息并配置容器参数,镜像可以任意设置,单击“下一步:调度与差异化”。
    5. 设置集群调度策略,完成集群差异化配置,单击“创建工作负载”。
      • 调度方式:选择“集群权重”,并设置两个集群的权重为1:1。
      • 差异化配置:单击集群左侧的图标开启差异化配置,设置集群ccecluster01的镜像名称为“swr.cn-south-1.myhuaweicloud.com/kubernetes-test2/nginx:gz”(nginx:gz镜像在SWR镜像仓库中的地址),集群ccecluster02的镜像名称为“swr.cn-east-3.myhuaweicloud.com/kubernetes-test2/nginx:sh”。
    图3 调度与差异化

  4. 创建LoadBalancer访问。

    1. 登录华为云UCS控制台,选择左侧导航栏中的“容器舰队”。
    2. 单击已开通集群联邦的舰队名称,进入详情页面。
    3. 在左侧导航栏选择“联邦管理 > 服务与路由”,单击右上角“创建服务”。
    4. 完成参数填写,单击“确认”。
      • 访问类型:选择“负载均衡”。
      • 端口配置:选择TCP协议,填写服务端口、容器端口,如8800、80。
      • 部署集群:单击,依次添加ccecluster01和ccecluster02集群,负载均衡器选择共享型ELB实例,且必须和集群处于相同VPC中,如果列表中无可用ELB实例,单击“创建负载均衡器”前往ELB控制台进行创建。其他参数保持默认即可。
      • 选择器:服务通过选择器与负载标签关联,这里通过引用负载标签的方式来添加标签。
      图4 创建服务

  5. 创建域名访问。

    1. 登录华为云UCS控制台,选择左侧导航栏中的“容器舰队”。
    2. 单击已开通集群联邦的舰队名称,进入详情页面。
    3. 在左侧导航栏选择“联邦管理 > 域名访问”,添加根域名。
    4. 单击右上角“创建域名访问”,完成参数填写。
      • 目标服务:选择4中创建的服务。
      • 流量配比模式:选择“自适应模式”,流量解析根据各集群后端实例数量自动分配权重。在本示例中,ccecluster01和ccecluster02集群的实例数均为1,那么正常情况下,两个集群将按照1:1的配比接收流量。
    图5 配置流量配比
    图6 流量配比拓扑图

多活容灾场景验证

按照上述集群应用部署操作,示例应用分别部署在集群“ccecluster01”和“ccecluster02”中,并以“负载均衡”类型的服务对外提供访问。5中的域名访问创建成功后,系统自动为所选择的根域名添加解析记录,并且在UCS侧生成一个统一的对外访问路径(域名地址),因此,我们通过访问这个域名地址就可以验证流量的分配情况。

  1. 获取域名访问地址。

    1. 登录UCS控制台,选择左侧导航栏中的“容器舰队”。
    2. 单击已开通集群联邦的舰队名称,进入详情页面。
    3. 在左侧导航栏选择“联邦管理 > 域名访问”,列表中的“域名地址”即为域名访问地址。
    图7 域名地址

  2. 在一台已连接公网的机器上执行如下命令,持续访问域名地址,查看集群应用处理状态。

    • 正常情况下,两个集群上的应用均接收流量,并且各处理50%流量。
      while true;do wget -q -O- helloworld.default.mcp-xxx.svc.xxx.co:8800; done
      ccecluster01 is in Guangzhou.
      ccecluster02 is in Shanghai.
      ccecluster01 is in Guangzhou.
      ccecluster02 is in Shanghai.
      ccecluster01 is in Guangzhou.
      ccecluster02 is in Shanghai.
      ...
    • 当集群ccecluster01上的应用异常时(通过集群节点关机来模拟应用异常),系统将所有的流量路由到ccecluster02集群处理,用户感知不到异常。
      while true;do wget -q -O- helloworld.default.mcp-xxx.svc.xxx.co:8800; done
      ccecluster02 is in Shanghai.
      ccecluster02 is in Shanghai.
      ccecluster02 is in Shanghai.
      ccecluster02 is in Shanghai.
      ccecluster02 is in Shanghai.
      ccecluster02 is in Shanghai.
      ...

      返回UCS控制台,可以看到域名列表中的集群流量比例发生变化,由ccecluster02集群接管100%的流量,这与我们配置的流量配比模式以及观测到的现象均吻合。

      图8 域名列表