
# 实例内核版本升级
#### 功能介绍
GaussDB实例版本升级。包括就地升级，灰度升级，热补丁升级三种升级方式。
- 就地升级 就地升级需要停止业务进行，会一次性升级集群中所有节点。就地升级需要暂停业务30分钟来升级。
  
- 灰度升级
  每个主DN或者CN组件升级就有一次10秒业务中断。升级过程均是先管理面，再数据面，由备到主的升级方式。灰度升级支持升级自动提交和升级待观察两种操作方式。
  - 升级自动提交：所有节点进程一起升级，在升级过程中有大概10秒的业务中断，不阻塞其他业务操作。
  
  - 升级待观察：升级待观察，将数据库升级过程细分为升级，提交两个阶段。
    - 升级阶段可以根据部署方式细分为按分片或者按AZ的滚动升级。
      - 分布式实例：根据分片数滚动升级。
      
      - 集中式实例：根据AZ数进行滚动升级。
       
    
    - 提交阶段可以对升级完成后的实例进行业务测试，根据需要可以选择提交升级或者升级回退。
      - 提交升级：在升级完成进入提交阶段时，业务测试正常后提交升级，完成本次升级流程。
      
      - 升级回退：在升级完成进入提交阶段时，可以根据需要回退本次升级，回退到升级前的版本。
       
     
    
- 热补丁升级
  - 升级自动提交：热补丁自动升级并提交，中间无业务中断。
  
  - 升级回退：热补丁回退，无业务中断时间。
   

- 调用接口前，您需要了解API [认证鉴权](https://support.huaweicloud.com/api-gaussdb/gaussdb_api_011.html)。
- 调用接口前，您需要提前获取到[地区和终端节点](https://developer.huaweicloud.com/endpoint)。
 
#### 调试
您可以在[API Explorer](https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=GaussDBforopenGauss&api=UpdateInstanceVersions)中调试该接口。
#### URI
PUT /v3/{project_id}/instance/{instance_id}/db-upgrade
表1参数说明 
| 名称          | 是否必选 | 参数类型   | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
|:---|:---|:---|:---|
| project_id  | 是    | String | **参数解释：** 租户在某一Region下的项目ID。 获取方法请参见[获取项目ID](https://support.huaweicloud.com/api-gaussdb/gaussdb_api_196.html)。 **约束限制：** 不涉及。 **取值范围：** 只能由英文字母、数字组成，且长度为32个字符。 **默认取值**： 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| instance_id | 是    | String | **参数解释：** 实例ID，此参数是用户创建实例的唯一标识。请参考[查询数据库实例列表 - QueryingDBInstances](https://support.huaweicloud.com/api-gaussdb/gaussdb_api_328.html)接口获取实例ID。 **约束限制：** 不涉及。 **取值范围：** 只能由英文字母、数字组成，且长度为36个字符。 **默认取值** **：** 不涉及。 |
   
#### 请求参数
表2请求Header参数 
| 参数           | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
|:---|:---|:---|:---|
| X-Auth-Token | 是    | String | **参数解释：** 用户Token。 通过调用IAM服务[获取用户Token](https://support.huaweicloud.com/api-iam/iam_30_0001.html)接口获取。 请求响应成功后在响应消息头中包含的"X-Subject-Token"的值即为Token值。 **约束限制：** 不涉及。 **取值范围** **：** 不涉及。 **默认取值** **：** 不涉及。 |
| X-Language   | 否    | String | **参数解释：** 指定接口返回信息的语言类型。 **约束限制：** 不涉及。 **取值范围** **：** - **zh-cn：**中文  - **en-us** **：**英文   **默认取值** **：** **en-us**                 |
   
表3请求Body参数 
| 参数                | 是否必选 | 参数类型    | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
|:---|:---|:---|:---|
| upgrade_type      | 是    | String  | **参数解释：** 实例升级类型，区分大小写。包括就地升级，灰度升级，热补丁升级三种，三种升级方式的异同，详见接口描述。 **约束限制：** 不涉及。 **取值范围：** - inplace：就地升级。  - grey：灰度升级。  - hotfix：热补丁升级。   **默认取值：** 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| upgrade_action    | 否    | String  | **参数解释：** 实例升级操作，区分大小写。 实例升级类型是就地升级时非必选。 灰度升级包括升级自动提交、升级待观察、提交升级和升级回退四种。 热补丁升级包括升级自动提交，升级回退两种。 **约束限制：** 不涉及。 **取值范围：** - upgradeAutoCommit：升级自动提交 。  - upgrade：升级待观察。  - commit：提交升级。  - rollback：升级回退。   **默认取值：** 不涉及。 |
| target_version    | 否    | String  | **参数解释：** 实例升级目标版本。 **约束限制：** - 热补丁升级场景下支持传入多个热补丁版本。   **取值范围：** 不涉及。 **默认取值：** 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| upgrade_shard_num | 否    | Integer | **参数解释：** 分布式实例灰度升级分片数。分布式实例灰度升级，升级待观察必填。该值不能大于实例未升级分片总数。 **约束限制：** 不涉及。 **取值范围：** 不涉及。 **默认取值：** 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| upgrade_az        | 否    | String  | **参数解释：** 灰度升级，升级待观察AZ值，升级待观察时必填。可以支持多AZ一起升级，AZ之间以英文逗号分隔。不能填入不属于该实例的AZ值。 **约束限制：** 不涉及。 **取值范围：** 不涉及。 **默认取值：** 不涉及。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   
#### 响应参数
表4响应Body参数 
| 参数       | 参数类型   | 描述                                                                                                                                                                                                                                                                                 |
|:---|:---|:---|
| job_id   | String | **参数解释：** 任务ID。按需实例时仅返回任务ID。 **取值范围：** 不涉及。   |
| order_id | String | **参数解释：** 订单ID。包周期实例时仅返回订单ID。 **取值范围：** 不涉及。 |
   
#### 请求示例
- 就地升级。
  ```
  PUT https://gaussdb-opengauss.cn-north-4.myhuaweicloud.com/v3/0483b6b16e954cb88930a360d2c4e663/instances/cc6fd964d93f4003851dfc29d57d30a5in14/db-upgrade
  { 
      "upgrade_type" : "inplace",
      "target_version": "xxx"
  }
  ```
  
- 热补丁升级
  - 实例热补丁升级。
    ```
    PUT https://gaussdb-opengauss.cn-north-4.myhuaweicloud.com/v3/0483b6b16e954cb88930a360d2c4e663/instances/cc6fd964d93f4003851dfc29d57d30a5in14/db-upgrade
    {
        "upgrade_type" : "hotfix",
        "target_version" : "xxxx,xxxx,xxxx",
        "upgrade_action" : "upgradeAutoCommit"
    }
    ```
    
  
  - 实例热补丁升级回退。
    ```
    PUT https://gaussdb-opengauss.cn-north-4.myhuaweicloud.com/v3/0483b6b16e954cb88930a360d2c4e663/instances/cc6fd964d93f4003851dfc29d57d30a5in14/db-upgrade
    {
        "upgrade_type": "hotfix",
        "target_version": "xxxx,xxxx,xxxx",
        "upgrade_action": "rollback"
    }
    ```
    
   
- 灰度升级
  - 实例灰度升级并采用升级自动提交升级方式升级。
    ```
    PUT https://gaussdb-opengauss.cn-north-4.myhuaweicloud.com/v3/0483b6b16e954cb88930a360d2c4e663/instances/cc6fd964d93f4003851dfc29d57d30a5in14/db-upgrade
    { 
        "upgrade_type" : "grey",
        "target_version": "xxx",
        "upgrade_action" : "upgradeAutoCommit" 
    }
    ```
    
  
  
  
  - 实例灰度升级并采用升级待观察方式升级。
    ```
    PUT https://gaussdb-opengauss.cn-north-4.myhuaweicloud.com/v3/0483b6b16e954cb88930a360d2c4e663/instances/cc6fd964d93f4003851dfc29d57d30a5in14/db-upgrade
    { 
        "upgrade_type" : "grey",
        "target_version": "xxx",
        "upgrade_action" : "upgrade", 
        "upgrade_shard_num" : 1, 
    }
    ```
    
  
  - 实例灰度升级并采用升级待观察方式升级，当实例处于升级待观察状态中，可进行升级回退，会回退全部已升级的分片，实例恢复正常后回退成功。
    ```
    PUT https://gaussdb-opengauss.cn-north-4.myhuaweicloud.com/v3/0483b6b16e954cb88930a360d2c4e663/instances/cc6fd964d93f4003851dfc29d57d30a5in14/db-upgrade
    { 
        "upgrade_type" : "grey",
        "target_version": "xxx",
        "upgrade_action" : "rollback"
    }
    ```
    
  
  - 实例灰度升级并采用升级待观察方式升级，当实例处于升级待观察状态中，且全部分片都升级完成后，可进行升级提交。实例恢复正常后升级完成。
    ```
    PUT https://gaussdb-opengauss.cn-north-4.myhuaweicloud.com/v3/0483b6b16e954cb88930a360d2c4e663/instances/cc6fd964d93f4003851dfc29d57d30a5in14/db-upgrade
    { 
        "upgrade_type" : "grey",
        "target_version": "xxx",
        "upgrade_action" : "commit"
    }
    ```
    
   
- 集中式实例灰度升级并采用升级待观察方式升级传参。
  ```
  PUT https://gaussdb-opengauss.cn-north-4.myhuaweicloud.com/v3/0483b6b16e954cb88930a360d2c4e663/instances/cc6fd964d93f4003851dfc29d57d30a5in14/db-upgrade
  { 
      "upgrade_type" : "grey", 
      "upgrade_action" : "upgrade", 
      "target_version": "xxx",
      "upgrade_az" : "az1,az2" 
  }
  ```
  
 
#### 响应示例
```
{ 
  "job_id" : "2b414788a6004883a02390e2eb0ea227" 
}
```
#### 状态码
- 正常 202
  
- 异常 请参见[状态码](https://support.huaweicloud.com/api-gaussdb/gaussdb_api_194.html)。
  
 
#### 错误码
请参见[错误码](https://support.huaweicloud.com/api-gaussdb/gaussdb_api_195.html)。
