Help Center/ Cloud Search Service/ API Reference/ API V1/ Cluster Management/ Change the specifications of a specified node type.
Updated on 2025-08-15 GMT+08:00

Change the specifications of a specified node type.

Function

If the workloads on a cluster's data plane change, you can scale the cluster vertically by changing its node specifications or node storage type.

  • Cluster types that support node specifications change: Elasticsearch, OpenSearch, and Logstash.

  • Cluster types that support node storage type (disk type) change: Elasticsearch and OpenSearch. All mission-critical data must be backed up before a node storage type (disk type) change. This helps to prevent data loss.

You can specify the following node types when calling this API:

  • ess: data node (only for Elasticsearch and OpenSearch).

  • ess-cold: cold data node (only for Elasticsearch and OpenSearch).

  • ess-client: client node (only for Elasticsearch and OpenSearch).

  • ess-master: master node (only for Elasticsearch and OpenSearch).

  • lgs: Logstash node (only for Logstash).

Constraints

  • Make sure the cluster status is Available and there are no ongoing tasks.

  • The node specifications and storage type cannot be changed for nodes that use local disks.

  • The node specifications and storage type cannot be changed at the same time.

  • The node storage type can be changed only for data nodes and cold data nodes.

  • When you change the node storage type, data needs to be migrated between different nodes. The timeout for data migration per node is 48 hours. Upgrade will fail if this timeout expires. When the cluster has large quantities of data, you are advised to manually adjust the data migration rate and avoid performing the migration during peak hours.

  • For a cluster without master nodes, the node storage type can be changed only if the number of data nodes plus cold data nodes is at least three.

  • For a cluster with master nodes, this operation is allowed only if the cluster has at least two data nodes.

  • During a node storage type change, there is always one node that is unavailable. To ensure service continuity, there has to be at least two nodes of each type for the cluster in each of its AZs, and the total number of data nodes and cold data nodes is greater than the maximum number of index replicas plus 1.

  • During a node specifications changes, nodes are brought offline in order to make the changes. To ensure service continuity, make sure all shards have replicas.

  • Make sure the disk usage is always less than 80/ %during the change.

Calling Method

For details, see Calling APIs.

URI

POST /v1.0/{project_id}/clusters/{cluster_id}/{types}/flavor

Table 1 Path Parameters

Parameter

Mandatory

Type

Description

project_id

Yes

String

Definition:

Project ID. For details about how to obtain the project ID and name, see Obtaining the Project ID and Name.

Constraints:

N/A

Value range:

Project ID of the account.

Default value:

N/A

cluster_id

Yes

String

Definition:

ID of the cluster whose specifications you want to change. For details about how to obtain the cluster ID, see Obtaining the Cluster ID.

Constraints:

N/A

Value range:

Cluster ID.

Default value:

N/A

types

Yes

String

Definition:

Type of the cluster node you want to modify.

Constraints:

N/A

Value range:

  • ess: data node

  • ess-cold: cold data node

  • ess-client: client node

  • ess-master: master node

  • lgs: Logstash node.

Default value:

N/A

Request Parameters

Table 2 Request body parameters

Parameter

Mandatory

Type

Description

new_flavor_id

Yes

String

Definition:

ID of the new node flavor or node storage type (disk type). It is determined by operation_type.

Constraints:

The value range depends on operation_type.

Value range:

  1. When operation_type is set to vm, newFlavorId indicates the node flavor ID after the change. This parameter is obtained by calling the Obtaining the Instance Specifications List API. The API selects a flavor_id based on the values of the name attribute.

  2. When operation_type is set to volume, new_flavor_id indicates the node storage type (disk type). The options are as follows:

  • COMMON: common I/O

  • HIGH: high I/O

  • ULTRAHIGH: ultra-high I/O

  • ESSD: ultra-fast SSD

Default value:

N/A

operation_type

No

String

Definition:

Operation type.

Constraints:

N/A

Value range:

  • vm: Change the node flavor.

  • volume: Change the disk type.

Default value:

vm

need_check_replica

No

Boolean

Definition:

Whether to verify replicas.

Constraints:

N/A

Value range:

  • *true: Enable replica verification.

  • false: Disable replica verification.

Default value:

true

is_auto_pay

No

Integer

Definition:

Whether to enable automatic payment from your Huawei Cloud account.

Constraints:

This parameter takes effect only for yearly/monthly clusters.

Value range:

  • 1: Yes. (Discounts and coupons are automatically selected. The fee will be automatically deducted from your Huawei Cloud account.) If the automatic payment fails, an unpaid order will be generated, and you need to manually complete the payment. (During manual payment, you can still modify the discounts and coupons that were automatically selected.)

  • 0: No. (The customer needs to manually pay for the bill. Discounts and coupons can be used.)

Default value:

0

need_check_cluster_status

No

Boolean

Definition:

Whether to check the cluster status. The value can be true or false. The default value is true.

Constraints:

N/A

Value range:

  • true: Enable cluster load check.

  • false: Cluster status verification is ignored.

Default value:

true

cluster_load_check

No

Boolean

Definition:

Whether to check the cluster load. The value can be true or false. The default value is true.

Constraints:

N/A

Value range:

  • true: enable cluster load check.

  • false: Skip cluster load check.

Default value:

true

Response Parameters

Status code: 200

Request succeeded.

None

Example Requests

Change the disk type of data nodes for a yearly/monthly Elasticsearch cluster. Before the change, disable index replica verification, and enable cluster status and cluster load check. The change in fees will apply automatically.

POST https://{Endpoint}/v1.0/{project_id}/clusters/4f3deec3-efa8-4598-bf91-560aad1377a3/ess/flavor

{
  "need_check_replica" : false,
  "new_flavor_id" : "HIGH",
  "is_auto_pay" : 1,
  "need_check_cluster_status" : true,
  "operation_type" : "volume",
  "cluster_load_check" : true
}

Example Responses

None

SDK Sample Code

The SDK sample code is as follows.

Java

Change the disk type of data nodes for a yearly/monthly Elasticsearch cluster. Before the change, disable index replica verification, and enable cluster status and cluster load check. The change in fees will apply automatically.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.huaweicloud.sdk.test;

import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.css.v1.region.CssRegion;
import com.huaweicloud.sdk.css.v1.*;
import com.huaweicloud.sdk.css.v1.model.*;


public class UpdateFlavorByTypeSolution {

    public static void main(String[] args) {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = System.getenv("CLOUD_SDK_AK");
        String sk = System.getenv("CLOUD_SDK_SK");
        String projectId = "{project_id}";

        ICredential auth = new BasicCredentials()
                .withProjectId(projectId)
                .withAk(ak)
                .withSk(sk);

        CssClient client = CssClient.newBuilder()
                .withCredential(auth)
                .withRegion(CssRegion.valueOf("<YOUR REGION>"))
                .build();
        UpdateFlavorByTypeRequest request = new UpdateFlavorByTypeRequest();
        request.withClusterId("{cluster_id}");
        request.withTypes("{types}");
        UpdateFlavorByTypeReq body = new UpdateFlavorByTypeReq();
        body.withIsAutoPay(1);
        body.withNewFlavorId("HIGH");
        body.withNeedCheckReplica(false);
        request.withBody(body);
        try {
            UpdateFlavorByTypeResponse response = client.updateFlavorByType(request);
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}

Python

Change the disk type of data nodes for a yearly/monthly Elasticsearch cluster. Before the change, disable index replica verification, and enable cluster status and cluster load check. The change in fees will apply automatically.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# coding: utf-8

import os
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkcss.v1.region.css_region import CssRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkcss.v1 import *

if __name__ == "__main__":
    # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak = os.environ["CLOUD_SDK_AK"]
    sk = os.environ["CLOUD_SDK_SK"]
    projectId = "{project_id}"

    credentials = BasicCredentials(ak, sk, projectId)

    client = CssClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(CssRegion.value_of("<YOUR REGION>")) \
        .build()

    try:
        request = UpdateFlavorByTypeRequest()
        request.cluster_id = "{cluster_id}"
        request.types = "{types}"
        request.body = UpdateFlavorByTypeReq(
            is_auto_pay=1,
            new_flavor_id="HIGH",
            need_check_replica=False
        )
        response = client.update_flavor_by_type(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)

Go

Change the disk type of data nodes for a yearly/monthly Elasticsearch cluster. Before the change, disable index replica verification, and enable cluster status and cluster load check. The change in fees will apply automatically.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package main

import (
	"fmt"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    css "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/css/v1"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/css/v1/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/css/v1/region"
)

func main() {
    // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak := os.Getenv("CLOUD_SDK_AK")
    sk := os.Getenv("CLOUD_SDK_SK")
    projectId := "{project_id}"

    auth := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        WithProjectId(projectId).
        Build()

    client := css.NewCssClient(
        css.CssClientBuilder().
            WithRegion(region.ValueOf("<YOUR REGION>")).
            WithCredential(auth).
            Build())

    request := &model.UpdateFlavorByTypeRequest{}
	request.ClusterId = "{cluster_id}"
	request.Types = "{types}"
	isAutoPayUpdateFlavorByTypeReq:= int32(1)
	needCheckReplicaUpdateFlavorByTypeReq:= false
	request.Body = &model.UpdateFlavorByTypeReq{
		IsAutoPay: &isAutoPayUpdateFlavorByTypeReq,
		NewFlavorId: "HIGH",
		NeedCheckReplica: &needCheckReplicaUpdateFlavorByTypeReq,
	}
	response, err := client.UpdateFlavorByType(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

More

For SDK sample code of more programming languages, see the Sample Code tab in API Explorer. SDK sample code can be automatically generated.

Status Codes

Status Code

Description

200

Request succeeded.

400

Invalid request.

Modify the request before retry.

409

The request could not be completed due to a conflict with the current state of the resource.

The resource that the client attempts to create already exists, or the update request fails to be processed because of a conflict.

412

The server did not meet one of the preconditions contained in the request.

Error Codes

See Error Codes.