更新时间:2024-11-06 GMT+08:00

创建集群

功能介绍

创建集群接口。

调用方法

请参见如何调用API

URI

POST /v1.1/{project_id}/clusters

表1 路径参数

参数

是否必选

参数类型

描述

project_id

String

项目ID,获取方法请参见项目ID和账号ID

请求参数

表2 请求Header参数

参数

是否必选

参数类型

描述

X-Auth-Token

String

用户Token。

通过调用IAM服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。

X-Language

String

请求语言。

表3 请求Body参数

参数

是否必选

参数类型

描述

cluster

cluster object

集群对象,请参见cluster参数说明。

auto_remind

Boolean

选择是否开启消息通知。开启后,支持配置20个手机号码或邮箱,作业(目前仅支持表/文件迁移的作业)失败时、EIP异常时会发送短信或邮件通知用。

phone_num

String

接收消息通知的手机号码。

email

String

接收消息通知的邮箱。

表4 cluster

参数

是否必选

参数类型

描述

scheduleBootTime

String

定时开机的时间,CDM集群会在每天这个时间开机。

isScheduleBootOff

Boolean

选择是否启用定时开关机功能。定时开关机功能和自动关机功能不可同时开启。

instances

Array of instance objects

节点列表,请参见instances参数说明。

datastore

Datastore object

集群信息,请参见datastore参数说明。

extended_properties

ExtendedProperties object

扩展属性,请参见extended_properties参数说明。

scheduleOffTime

String

定时关机的时间,定时关机时系统不会等待未完成的作业执行完成。

vpcId

String

指定虚拟私有云ID,用于集群网络配置。

name

String

集群名称。

sys_tags

Array of sys_tags objects

企业项目信息,请参见sys_tags参数说明。

isAutoOff

Boolean

选择是否启用自动关机功能,自动关机功能和定时开关机功能不可同时开启。如果选择自动关机,则当集群中无作业运行且无定时作业时,等待15分钟后集群将自动关机来帮您节约成本。

表5 instance

参数

是否必选

参数类型

描述

availability_zone

String

集群的可用分区。可通过https://developer.huaweicloud.com/intl/zh-cn/endpoint获取。

nics

Array of nics objects

网卡列表,最多两个网卡。请参见nics参数说明。

flavorRef

String

实例规格:

  • a79fd5ae-1833-448a-88e8-3ea2b913e1f6:表示cdm.small规格,2核CPU、4G内存的虚拟机。适合PoC验证和开发测试。

  • fb8fe666-6734-4b11-bc6c-43d11db3c745:表示cdm.medium规格,4核CPU、8G内存的虚拟机适合单张表规模<1000万条的场景。

  • 5ddb1071-c5d7-40e0-a874-8a032e81a697:表示cdm.large规格,8核CPU、16G内存的虚拟机。适合单张表规模≥1000万条的场景。

  • 6ddb1072-c5d7-40e0-a874-8a032e81a698:表示cdm.xlarge规格,16核CPU、32G内存的虚拟机。需要10GE高速带宽进行TB以上的数据量迁移时使用。

type

String

节点类型,当前只有“cdm”一种类型。

表6 nics

参数

是否必选

参数类型

描述

securityGroupId

String

安全组ID。

net-id

String

子网ID。

表7 Datastore

参数

是否必选

参数类型

描述

type

String

类型,一般为cdm。

version

String

集群版本。

表8 ExtendedProperties

参数

是否必选

参数类型

描述

workSpaceId

String

工作空间ID。

resourceId

String

资源ID。

trial

String

是否是试用集群。

表9 sys_tags

参数

是否必选

参数类型

描述

value

String

企业项目ID。

key

String

该值目前固定为“_sys_enterprise_project_id”。

响应参数

状态码: 202

表10 响应Body参数

参数

参数类型

描述

name

String

集群名称。

id

String

集群ID。

task

Task object

任务信息。

datastore

Datastore object

集群信息。

instances

Array of ClusterInstance objects

集群的节点信息。

表11 Task

参数

参数类型

描述

id

String

任务id。

name

String

任务名称。

表12 Datastore

参数

参数类型

描述

type

String

类型,一般为cdm。

version

String

集群版本。

表13 ClusterInstance

参数

参数类型

描述

id

String

节点的虚拟机ID。

name

String

节点的虚拟机名称。

type

String

节点类型,只支持一种类型“cdm”。

shard_id

String

分片ID。

请求示例

创建一个1.8.10版本,集群名为cdm-ab82的CDM集群。

POST /v1.1/1551c7f6c808414d8e9f3c514a170f2e/clusters

{
  "cluster" : {
    "scheduleBootTime" : "",
    "isScheduleBootOff" : false,
    "instances" : [ {
      "availability_zone" : "xx-xxx",
      "nics" : [ {
        "securityGroupId" : "c37852d2-2d12-41cb-af47-65c80e995c80",
        "net-id" : "2d120298-6130-44d4-a438-454912fff901"
      } ],
      "flavorRef" : "5ddb1071-c5d7-40e0-a874-8a032e81a697",
      "type" : "cdm"
    } ],
    "datastore" : {
      "type" : "cdm",
      "version" : "1.8.10"
    },
    "scheduleOffTime" : "",
    "vpcId" : "67c06084-2212-4242-bcd4-d2144c2385a9",
    "name" : "cdm-ab82",
    "sys_tags" : [ {
      "value" : "1ce45885-4033-40d2-bdde-d4dbaceb387d",
      "key" : "_sys_enterprise_project_id"
    } ],
    "isAutoOff" : false
  },
  "auto_remind" : false,
  "phone_num" : "",
  "email" : ""
}

响应示例

状态码: 202

Accepted。

{
  "id" : "befc862c-9286-46a0-a1d6-300d98b63aad",
  "name" : "cdm-4ef213",
  "task" : {
    "id" : "2c9080047f1b1185017f1ef6ad0500ac",
    "name" : "rdsCreateBackupJob"
  },
  "datastore" : {
    "type" : "cdm",
    "version" : "2.9.1.100"
  },
  "instances" : [ {
    "id" : "b2672e7d-2faf-423f-96bb-0664cd743cfd",
    "name" : "cdm-4ef213-cdm-dn-1-1",
    "type" : "cdm",
    "shard_id" : "dn-1"
  } ]
}

SDK代码示例

SDK代码示例如下。

创建一个1.8.10版本,集群名为cdm-ab82的CDM集群。

 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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.cdm.v1.region.CdmRegion;
import com.huaweicloud.sdk.cdm.v1.*;
import com.huaweicloud.sdk.cdm.v1.model.*;

import java.util.List;
import java.util.ArrayList;

public class CreateClusterSolution {

    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);

        CdmClient client = CdmClient.newBuilder()
                .withCredential(auth)
                .withRegion(CdmRegion.valueOf("<YOUR REGION>"))
                .build();
        CreateClusterRequest request = new CreateClusterRequest();
        CdmCreateClusterReq body = new CdmCreateClusterReq();
        List<SysTags> listClusterSysTags = new ArrayList<>();
        listClusterSysTags.add(
            new SysTags()
                .withValue("1ce45885-4033-40d2-bdde-d4dbaceb387d")
                .withKey("_sys_enterprise_project_id")
        );
        Datastore datastoreCluster = new Datastore();
        datastoreCluster.withType("cdm")
            .withVersion("1.8.10");
        List<Nics> listInstancesNics = new ArrayList<>();
        listInstancesNics.add(
            new Nics()
                .withSecurityGroupId("c37852d2-2d12-41cb-af47-65c80e995c80")
                .withNetId("2d120298-6130-44d4-a438-454912fff901")
        );
        List<Instance> listClusterInstances = new ArrayList<>();
        listClusterInstances.add(
            new Instance()
                .withAvailabilityZone("xx-xxx")
                .withNics(listInstancesNics)
                .withFlavorRef("5ddb1071-c5d7-40e0-a874-8a032e81a697")
                .withType("cdm")
        );
        CdmCreateClusterReqCluster clusterbody = new CdmCreateClusterReqCluster();
        clusterbody.withScheduleBootTime("")
            .withIsScheduleBootOff(false)
            .withInstances(listClusterInstances)
            .withDatastore(datastoreCluster)
            .withScheduleOffTime("")
            .withVpcId("67c06084-2212-4242-bcd4-d2144c2385a9")
            .withName("cdm-ab82")
            .withSysTags(listClusterSysTags)
            .withIsAutoOff(false);
        body.withEmail("");
        body.withPhoneNum("");
        body.withAutoRemind(false);
        body.withCluster(clusterbody);
        request.withBody(body);
        try {
            CreateClusterResponse response = client.createCluster(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());
        }
    }
}

创建一个1.8.10版本,集群名为cdm-ab82的CDM集群。

 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# coding: utf-8

import os
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkcdm.v1.region.cdm_region import CdmRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkcdm.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 = CdmClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(CdmRegion.value_of("<YOUR REGION>")) \
        .build()

    try:
        request = CreateClusterRequest()
        listSysTagsCluster = [
            SysTags(
                value="1ce45885-4033-40d2-bdde-d4dbaceb387d",
                key="_sys_enterprise_project_id"
            )
        ]
        datastoreCluster = Datastore(
            type="cdm",
            version="1.8.10"
        )
        listNicsInstances = [
            Nics(
                security_group_id="c37852d2-2d12-41cb-af47-65c80e995c80",
                net_id="2d120298-6130-44d4-a438-454912fff901"
            )
        ]
        listInstancesCluster = [
            Instance(
                availability_zone="xx-xxx",
                nics=listNicsInstances,
                flavor_ref="5ddb1071-c5d7-40e0-a874-8a032e81a697",
                type="cdm"
            )
        ]
        clusterbody = CdmCreateClusterReqCluster(
            schedule_boot_time="",
            is_schedule_boot_off=False,
            instances=listInstancesCluster,
            datastore=datastoreCluster,
            schedule_off_time="",
            vpc_id="67c06084-2212-4242-bcd4-d2144c2385a9",
            name="cdm-ab82",
            sys_tags=listSysTagsCluster,
            is_auto_off=False
        )
        request.body = CdmCreateClusterReq(
            email="",
            phone_num="",
            auto_remind=False,
            cluster=clusterbody
        )
        response = client.create_cluster(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)

创建一个1.8.10版本,集群名为cdm-ab82的CDM集群。

 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package main

import (
	"fmt"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    cdm "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cdm/v1"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cdm/v1/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cdm/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 := cdm.NewCdmClient(
        cdm.CdmClientBuilder().
            WithRegion(region.ValueOf("<YOUR REGION>")).
            WithCredential(auth).
            Build())

    request := &model.CreateClusterRequest{}
	var listSysTagsCluster = []model.SysTags{
        {
            Value: "1ce45885-4033-40d2-bdde-d4dbaceb387d",
            Key: "_sys_enterprise_project_id",
        },
    }
	typeDatastore:= "cdm"
	versionDatastore:= "1.8.10"
	datastoreCluster := &model.Datastore{
		Type: &typeDatastore,
		Version: &versionDatastore,
	}
	var listNicsInstances = []model.Nics{
        {
            SecurityGroupId: "c37852d2-2d12-41cb-af47-65c80e995c80",
            NetId: "2d120298-6130-44d4-a438-454912fff901",
        },
    }
	var listInstancesCluster = []model.Instance{
        {
            AvailabilityZone: "xx-xxx",
            Nics: listNicsInstances,
            FlavorRef: "5ddb1071-c5d7-40e0-a874-8a032e81a697",
            Type: "cdm",
        },
    }
	scheduleBootTimeCluster:= ""
	isScheduleBootOffCluster:= false
	scheduleOffTimeCluster:= ""
	vpcIdCluster:= "67c06084-2212-4242-bcd4-d2144c2385a9"
	nameCluster:= "cdm-ab82"
	isAutoOffCluster:= false
	clusterbody := &model.CdmCreateClusterReqCluster{
		ScheduleBootTime: &scheduleBootTimeCluster,
		IsScheduleBootOff: &isScheduleBootOffCluster,
		Instances: &listInstancesCluster,
		Datastore: datastoreCluster,
		ScheduleOffTime: &scheduleOffTimeCluster,
		VpcId: &vpcIdCluster,
		Name: &nameCluster,
		SysTags: &listSysTagsCluster,
		IsAutoOff: &isAutoOffCluster,
	}
	emailCdmCreateClusterReq:= ""
	phoneNumCdmCreateClusterReq:= ""
	autoRemindCdmCreateClusterReq:= false
	request.Body = &model.CdmCreateClusterReq{
		Email: &emailCdmCreateClusterReq,
		PhoneNum: &phoneNumCdmCreateClusterReq,
		AutoRemind: &autoRemindCdmCreateClusterReq,
		Cluster: clusterbody,
	}
	response, err := client.CreateCluster(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

更多编程语言的SDK代码示例,请参见API Explorer的代码示例页签,可生成自动对应的SDK代码示例。

状态码

状态码

描述

202

Accepted。

400

请求错误。

401

鉴权失败。

403

没有操作权限。

404

找不到资源。

500

服务内部接口异常。

503

服务不可用。

错误码

请参见错误码