
# 可用区架构改造
CSS服务支持跨可用区的能力，在集群使用过程中遇到可用区资源不足或需要提升集群的高可用性时，可以切换集群可用区。
切换可用区包含两大场景：可用区高可用改造和可用区平移切换。
- 可用区高可用改造：适用于单AZ改造成两AZ、单AZ改造成三AZ或两AZ改造成三AZ的场景，目的是为了提升集群的高可用性。
- 可用区平移切换：适用于从一个AZ完全迁移到另一个AZ的场景，目的是为了解决当前可用区资源不足的问题。
 
切换可用区的变更流程：
1. 将待改造节点的数据迁移到其他可用节点。
   
2. 按照目标AZ重建节点，节点的ID、IP地址、规格等和原来保持一致。
3. 将节点重新加入集群，系统自动触发分片重平衡机制，逐步将部分数据分片迁移至该节点。
 
变更过程采用的是one-by-one的方式，不会中断业务。
#### 约束限制
- 为了保证业务的连续性，集群中数据节点数和冷数据节点数之和要大于或等于3，即"数据节点数+冷数据节点数 ≥ 3"。
- 切换过程中会逐一下线节点再重建节点，需要保证单节点下线后，其余节点的磁盘容量能够接纳该节点的所有数据，且磁盘使用率小于80%。
- 为确保集群中索引的所有分片能够被分配到剩余数据节点或冷数据节点中，防止切换过程中出现节点下线后副本无法分配的情况，需要确认数据节点数和冷数据节点数之和要大于索引副本数的最大值加1，即"数据节点数 + 冷数据节点数 \> 索引副本数的最大值 + 1"。
- 当集群处于切换可用区过程中，部分节点的AZ属性可能已经更改，此时节点的可用区可能会显示出中间状态，等待任务结束后，集群的可用区显示将恢复正常状态。
- **可用区高可用改造**是基于原可用区进行扩展，切换时必须保留原可用区。如果是单AZ改造成两AZ或单AZ改造成三AZ的场景，必须所有节点一起改造；如果是两AZ改造成三AZ的场景，则既支持同时操作集群中所有类型的节点，也支持单独操作集群中某一类型的节点（例如，在已有两AZ的集群中，可以只对Master节点进行切换可用区，将Master节点形变为三AZ，而其他节点依旧是两AZ）。
- 可用区高可用改造以最小节点迁移为原则重建集群。同类型节点中已迁移节点会更新AZ属性，未迁移节点的YML配置也需同步更新，因此该类型所有节点均需重启才能使改造生效。例外情况：当Master节点与数据节点共存时，仅改造数据节点需同时重启Master节点和数据节点；其他类型节点改造仅需重启该类型节点即可。
- 可用区高可用改造必须满足以下节点分配规则：
  - 为保障服务高可用性并避免单节点负载过高，多可用区部署需满足以下节点数量要求：
    - **双可用区部署**：数据节点/冷数据节点数量≥4，确保每个可用区至少具备2个节点；Client节点数量≥2，确保每个可用区至少具备1个节点。
    
    - **三可用区部署**：所有节点类型的节点数量分别≥3，确保每个可用区至少具备1个节点。
    
    - 如果某类型的节点未部署（如无冷数据节点），则不受最小节点数量约束。
     
  
  - 性能优化：建议确保数据节点或冷数据节点数量为可用区数量的整数倍，避免出现数据分布不均，影响集群的查询或写入性能。
   
- **可用区平移切换**一次只能迁移一个可用区，切换时选择的可用区只能有一个不同。平移切换支持同时操作集群中所有类型的节点，或者单独操作集群中某一类型的节点（例如，在已有两AZ的集群中，可以只对Master节点进行平移切换，将Master节点从当前AZ迁移到另一个AZ，而其他节点依旧在当前AZ）。除了单AZ平移切换场景，其他的多AZ平移切换场景均需要重启集群生效。
 
#### 变更影响
在切换集群可用区前，您需要了解以下关键影响和操作建议，以便合理规划变更，最小化业务影响。
- 性能影响 切换可用区不会中断业务，但是数据迁移会消耗IO性能，且切换过程中单节点下线可能影响集群性能。
  建议在业务低峰期提高数据迁移速率以缩短任务耗时，并在业务高峰期**前** 降低迁移速率以减轻对集群性能的影响。数据迁移速率由"indices.recovery.max_bytes_per_sec"参数决定，该参数值默认是"CPU核数 × 8MB"（如4核CPU默认32MB）。可根据业务需求调整。
  ```
  PUT /_cluster/settings  
  {  
    "transient": {  
      "indices.recovery.max_bytes_per_sec": "128MB"  
    }  
  }
  ```
  
- 请求处理影响 节点替换过程中，发送到该节点的请求可能会失败。为了降低影响可以采用如下措施：
  - 通过终端节点服务或独享型负载均衡器访问集群，确保请求自动路由到可用节点。
  
  - 在客户端实现指数退避重试机制（建议配置3次重试）。
  
  - 在业务低峰期进行规格变更。
   
- 变更过程特性 切换可用区任务一旦启动就无法中止，直到任务成功或失败才会结束。
  
 
#### 切换可用区时长
切换可用区的时长估算公式如下：
**变更时长（分钟）= 15（分钟）x 待切换的节点个数 + 数据迁移时长（分钟）**
其中：15分钟为初始化等非数据迁移操作的基准耗时，是经验值。
**数据迁移时长（分钟）= 待切换节点的数据总量（MB）÷ \[ 数据节点的CPU核数 × 8（MB/s）× 60（秒）\]**
其中：
- 8MB/s表示每个CPU核每秒可处理8MB数据，是经验值。
- 以上公式为理想状态下的理论估算值，实际迁移速率受集群负载影响。
 
#### 前提条件
- 集群处于"可用"状态，且无正在进行的任务。
- 确认集群不存在非标操作。当集群进行过修改回程路由、系统参数等非标操作时，这些操作无法被记录到系统中，因此在切换过程中将无法继承，切换后可能会影响业务。
- 变更前，建议备份所有关键数据，以免造成数据丢失。操作指导请参见[创建快照备份数据](https://support.huaweicloud.com/usermanual-css/css_01_0267.html)。
 
#### 切换可用区
1. 登录[云搜索服务管理控制台](https://console.huaweicloud.com/elasticsearch/)。
2. 在左侧导航栏，选择"集群管理 \> Elasticsearch"。
3. 在集群列表，选择目标集群，单击操作列的"更多\>形态变更"进入形态变更页面。
4. 选择"切换可用区"页签。
5. 在切换可用区页面，配置切换参数。
   ![](https://support.huaweicloud.com/usermanual-css/public_sys-resources/caution_3.0-zh-cn.png)
   在切换可用区时，如果数据节点数量或冷数据节点数量与可用区数量不是整数倍关系，则集群的数据分布可能不均匀。例如，当有2个可用区和3个数据节点时，某个节点的数据量可能是另外两个节点的两倍。这种数据分布不均可能影响集群的查询或写入性能。
   表1切换可用区的参数说明 
   | 参数     | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   |:---|:---|
   | 切换类型   | - 可用区高可用改造：支持单AZ改造成两AZ、单AZ改造成三AZ或两AZ改造成三AZ。  - 可用区平移切换：支持从一个AZ迁移到另一个AZ。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | 当前节点类型 | 选择进行AZ切换的节点类型。 每次可选择一种节点类型操作，当集群有多种节点类型时，可选择"所有节点"进行全部切换。如果是单AZ改造成两AZ或单AZ改造成三AZ的场景，则只支持所有节点一起改造，因此只能选择"所有节点"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 当前AZ集合 | 显示当前集群所在的可用区。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | 目标AZ集合 | 选择需要切换的目标可用区。 - 可用区高可用改造：高可用区改造是基于原可用区进行扩展，因此"目标AZ集合"必须包含"当前AZ集合"且至少再选择一个可用区，最多选择3个可用区。  - 可用区平移切换：一次切换任务只能迁移一个AZ，因此"目标AZ集合"只能有一个可用区和"当前AZ集合"不同。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | 配置委托   | 重建节点时会重新绑定网卡，需要VPC的操作权限。选择IAM委托，授权当前账号访问和使用VPC的权限。 - 当首次配置委托时，可以单击"自动创建委托"新建委托"css_upgrade_agency"直接使用。  - 当已有自动创建的委托时，可以单击"委托一键授权"，自动删除委托中VPC Administrator系统角色和VPC FullAccess系统策略的权限，且自动新增如下自定义策略授权委托到最小化权限。 ``` "vpc:subnets:get", "vpc:ports:*" ```   - 执行"自动创建委托"和"委托一键授权"的用户需要如下最小权限。 ``` "iam:agencies:listAgencies", "iam:roles:listRoles", "iam:agencies:getAgency", "iam:agencies:createAgency", "iam:permissions:listRolesForAgency", "iam:permissions:grantRoleToAgency", "iam:permissions:listRolesForAgencyOnProject", "iam:permissions:revokeRoleFromAgency", "iam:roles:createRole" ```   - 使用委托的用户需要如下最小权限。 ``` "iam:agencies:listAgencies", "iam:agencies:getAgency", "iam:permissions:listRolesForAgencyOnProject", "iam:permissions:listRolesForAgency" ```    |
      
   
6. 配置完成后，单击"提交申请"。确认是否进行全量索引快照备份检测，单击"确定"启动切换任务。
   ![](https://support.huaweicloud.com/usermanual-css/public_sys-resources/note_3.0-zh-cn.png)
   建议选择进行全量索引快照备份检测，保证数据有备份，防止任务失败，数据丢失。
   当下方任务记录列表的"任务状态"为"成功"时，表示可用区切换完成。
   
7. （可选）除了单AZ平移切换场景，其他的可用区改造场景均需重启集群才能使改造生效。
8. 切换完成后，确认操作结果。
   1. 在集群列表，单击目标集群名称，进入集群详情页。
   
   2. 选择"概览"页签，在基础信息下方查看集群可用区，确认是否切换成功。
      图1查看可用区   
      ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002319640461.png) 
    
 
#### 查看切换任务
在切换可用区页面的"任务记录"列表，可以查看当前切换任务，了解任务进度和状态。
展开任务列表，单击"查看进度"查看详细的切换进度，确认节点的切换状态。
当"任务状态"为"失败"时，可以重试任务以尝试恢复，或终止任务以结束当前操作。
- 重试切换任务：在任务列表的操作列，单击"重试"，重新切换可用区。
- 终止切换任务：在任务列表的操作列，单击"终止"，结束切换可用区。终止任务前，请确保所有节点都未完成可用区切换。
 
