
# 使用集群联邦实现应用多活容灾
#### 应用场景
为了应对云单点宕机故障，UCS的集群联邦提供多云多活应用、秒级流量接管能力。业务应用的实例可以多云多活的部署在不同云上的容器服务中，当云单点宕机故障发生时，集群联邦可以秒级自动完成流量的切换，业务的可靠性大大提升。
多活容灾方案示意如[图1]所示，通过创建域名访问规则，将应用分发到3个Kubernetes集群，包括两个华为云CCE集群（部署在不同Region）和一个其他云的Kubernetes集群，实现应用的多活容灾。
图1多集群应用多活容灾示意图   
![](https://support.huaweicloud.com/bestpractice-ucs/zh-cn_image_0000001645761140.png "点击放大")
#### 准备工作
- 准备应用所运行的集群，本文以CCE集群为例进行演示，参考[购买CCE集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0028.html)在两个不同区域（如：华南-广州和华东-上海一）创建CCE集群，要求Kubernetes版本为1.19及以上，并且各个集群中至少拥有一个可用节点。
  ![](https://support.huaweicloud.com/bestpractice-ucs/public_sys-resources/note_3.0-zh-cn.png)
  在实际生产环境中，多个集群可位于不同区域、可用区，甚至不同云服务商，实现应用的多活容灾。
  
- 已购买公网域名，并添加至华为云云解析（DNS）服务，具体操作请参考[快速添加网站域名解析](https://support.huaweicloud.com/qs-dns/dns_qs_0002.html)。
 
#### 基础环境搭建
1. 将集群注册到UCS并接入网络。具体操作请参见[注册集群](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0002.html)。
   
   例如，将集群"ccecluster01"、"ccecluster02"注册到UCS的"ucs-group"容器舰队，并查看集群是否处于正常运行状态。
   
   
2. 为集群所在舰队开通集群联邦，并确保集群已成功接入集群联邦。具体操作请参见[集群联邦](https://support.huaweicloud.com/usermanual-ucs/ucs_01_0199.html)。
   
   图2集群管理   
   ![](https://support.huaweicloud.com/bestpractice-ucs/zh-cn_image_0000001694120117.png "点击放大")
   
   
3. 创建联邦工作负载。 
   为展示流量切换的效果，本文中两个集群的容器镜像版本不同（实际生产环境中并不会存在此差异）。
   - 集群ccecluster01：示例应用使用nginx:gz镜像，返回"ccecluster01 is in Guangzhou."。
   
   - 集群ccecluster02：示例应用使用nginx:sh镜像，返回"ccecluster02 is in Shanghai."。
   
   
   在开始操作之前，您需要将示例应用的镜像上传到对应集群所在区域的SWR镜像仓库中（也就是说，nginx:gz镜像需要上传至华南-广州，nginx:sh镜像上传至华东-上海一），否则联邦工作负载会因拉取不到镜像而异常。
   ![](https://support.huaweicloud.com/bestpractice-ucs/public_sys-resources/note_3.0-zh-cn.png)
   本文中的应用仅作示例，在实际生产环境中需替换为您的自有应用，且对集群的云服务商、区域、数量不作限制。
   1. 登录[UCS控制台](https://console.huaweicloud.com/ucs/?#/aether/dashboard)，选择左侧导航栏中的"容器舰队"。
   
   2. 单击已开通集群联邦的舰队名称，进入详情页面。
   
   3. 在左侧导航栏选择"联邦管理 \> 工作负载"，单击右上角"镜像创建"。
   
   4. 填写基本信息并配置容器参数，镜像可以任意设置，单击"下一步：调度与差异化"。
   
   5. 设置集群调度策略，完成集群差异化配置，单击"创建工作负载"。
      - 调度方式：选择"集群权重"，并设置两个集群的权重为1:1。
      
      - 差异化配置：单击集群左侧的![](https://support.huaweicloud.com/bestpractice-ucs/zh-cn_image_0000001851985473.png)图标开启差异化配置，设置集群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调度与差异化   
   ![](https://support.huaweicloud.com/bestpractice-ucs/zh-cn_image_0000001645761144.png "点击放大")
   
   
4. 创建LoadBalancer访问。
   
   1. 登录[UCS控制台](https://console.huaweicloud.com/ucs/?#/aether/dashboard)，选择左侧导航栏中的"容器舰队"。
   
   2. 单击已开通集群联邦的舰队名称，进入详情页面。
   
   3. 在左侧导航栏选择"联邦管理 \> 服务与路由"，单击右上角"创建服务"。
   
   4. 完成参数填写，单击"确认"。
      - 访问类型：选择"负载均衡"。
      
      - 端口配置：选择TCP协议，填写服务端口、容器端口，如8800、80。
      
      - 部署集群：单击![](https://support.huaweicloud.com/bestpractice-ucs/zh-cn_image_0000001694040869.png)，依次添加ccecluster01和ccecluster02集群，负载均衡器选择共享型ELB实例，且必须和集群处于相同VPC中，如果列表中无可用ELB实例，单击"创建负载均衡器"前往ELB控制台进行创建。其他参数保持默认即可。
      
      - 选择器：服务通过选择器与负载标签关联，这里通过引用负载标签的方式来添加标签。
      
      
      图4创建服务   
      ![](https://support.huaweicloud.com/bestpractice-ucs/zh-cn_image_0000001694120121.png "点击放大") 
   
   
   
   
5. 创建域名访问。
   
   1. 登录[UCS控制台](https://console.huaweicloud.com/ucs/?#/aether/dashboard)，选择左侧导航栏中的"容器舰队"。
   
   2. 单击已开通集群联邦的舰队名称，进入详情页面。
   
   3. 在左侧导航栏选择"联邦管理 \> 域名访问"，添加根域名。
   
   4. 单击右上角"创建域名访问"，完成参数填写。
      - 目标服务：选择[4]中创建的服务。
      
      - 流量配比模式：选择"自适应模式"，流量解析根据各集群后端实例数量自动分配权重。在本示例中，ccecluster01和ccecluster02集群的实例数均为1，那么正常情况下，两个集群将按照1:1的配比接收流量，如[图6]所示。
       
   
   
   图5配置流量配比   
   ![](https://support.huaweicloud.com/bestpractice-ucs/zh-cn_image_0000001645920420.png "点击放大")
   图6流量配比拓扑图   
   ![](https://support.huaweicloud.com/bestpractice-ucs/zh-cn_image_0000001645761148.png "点击放大")
   
   
 
#### 多活容灾场景验证
按照上述集群应用部署操作，示例应用分别部署在集群"ccecluster01"和"ccecluster02"中，并以"负载均衡"类型的服务对外提供访问。[5]中的域名访问创建成功后，系统自动为所选择的根域名添加解析记录，并且在UCS侧生成一个统一的对外访问路径（域名地址），因此，通过访问这个域名地址就可以验证流量的分配情况。
1. 获取域名访问地址。 
   1. 登录[UCS控制台](https://console.huaweicloud.com/ucs/?#/aether/dashboard)，选择左侧导航栏中的"容器舰队"。
   
   2. 单击已开通集群联邦的舰队名称，进入详情页面。
   
   3. 在左侧导航栏选择"联邦管理 \> 域名访问"，列表中的"域名地址"即为域名访问地址。
   
   
   图7域名地址   
   ![](https://support.huaweicloud.com/bestpractice-ucs/zh-cn_image_0000001694040873.png "点击放大")
   
   
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域名列表   
     ![](https://support.huaweicloud.com/bestpractice-ucs/zh-cn_image_0000001694120125.png "点击放大") 
   
   
   
   
 
