华为云用户手册

  • URI GET /v1.0/{project_id}/asset/obs/host/stock/task/details 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,获取方法请参考获取项目ID 表2 Query参数 参数 是否必选 参数类型 描述 task_id 是 String 任务ID。 page 否 Integer 分页编号,默认为0。 size 否 Integer 每页记录数。 默认10,范围[1,100]
  • 请求参数 表3 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 否 String 用户Token,使用Token鉴权方式时必选。 通过调用 IAM 服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。 Authorization 否 String 使用AK/SK方式认证时必选,携带的鉴权信息。 X-Sdk-Date 否 String 使用AK/SK方式认证时必选,请求的发生时间。
  • 请求消息头 附加请求头字段,如指定的URI和HTTP方法所要求的字段。例如定义消息体类型的请求头“Content-Type”,请求鉴权信息等。 详细的公共请求消息头字段请参见表3。 表3 公共请求消息头 名称 描述 是否必选 示例 Content-Type 消息体的类型(格式)。推荐用户使用默认值application/json,有其他取值时会在具体接口中专门说明。 是 application/json Accept 接收消息体的类型(格式),当前只支持application/json。 否 application/json X-Auth-Token 用户Token。 用户Token也就是调用获取用户Token接口的响应值,该接口是唯一不需要认证的接口。 请求响应成功后在响应消息头(Headers)中包含的“X-Subject-Token”的值即为Token值。 是 使用Token认证时该字段必选。 注:以下仅为Token示例片段 MIIPAgYJKoZIhvcNAQcCo...ggg1BBIINPXsidG9rZ
  • 请求消息体(可选) 该部分可选。请求消息体通常以结构化格式(如JSON或XML)发出,与请求消息头中Content-Type对应,传递除请求消息头之外的内容。若请求消息体中的参数支持中文,则中文字符必须为UTF-8编码。 每个接口的请求消息体内容不同,也并不是每个接口都需要有请求消息体(或者说消息体为空),GET、DELETE操作类型的接口就不需要消息体,消息体具体内容需要根据具体接口而定。 对于创建查询任务接口,您可以从接口的请求部分看到所需的请求参数及参数说明。将消息体加入后的请求如下所示,字段需要根据实际值填写。 POST https://esm-api.cn-south-1.myhuaweicloud.com/meter/v1/{domain_id}/query-jobs Content-Type: application/json { "hcso_id": "********", "region_id": "********", "min_sdr_time": "2022-01-01 00:00:00", "max_sdr_time": "2022-02-01 00:00:00" } 到这里为止这个请求需要的内容就具备齐全了,您可以使用curl、Postman或直接编写代码等方式发送请求调用API。对于获取用户Token接口,返回的响应消息头中“x-subject-token”就是需要获取的用户Token。有了Token之后,您就可以使用Token认证调用其他API。
  • 请求方法 HTTP请求方法(也称为操作或动词),它告诉服务您正在请求什么类型的操作。 表2 HTTP方法 方法 说明 GET 请求服务器返回指定资源。 PUT 请求服务器更新指定资源。 POST 请求服务器新增资源或执行特殊操作。 DELETE 请求服务器删除指定资源,如删除对象等。 在创建查询任务的URI部分,您可以看到其请求方法为“POST”,则其请求为: POST https://esm-api.cn-south-1.myhuaweicloud.com/meter/v1/{domain_id}/query-jobs
  • 请求URI 请求URI由如下部分组成: {URI-scheme}://{Endpoint}/{resource-path}?{query-string} 尽管请求URI包含在请求消息头中,但大多数语言或框架都要求您从请求消息中单独传递它,所以在此单独强调。 表1 URI中的参数说明 参数 描述 URI-scheme 表示用于传输请求的协议,当前所有API均采用HTTPS协议。 Endpoint 指定承载REST服务端点的服务器 域名 或IP,不同服务不同区域的Endpoint不同。您可以从地区和终端节点查询服务的终端节点。 例如ESM服务在“华南-广州”区域的Endpoint为“esm-api.cn-south-1.myhuaweicloud.com”。 resource-path 资源路径,即API访问路径。从具体API的URI模块获取,例如“创建查询任务”API的resource-path为“/meter/v1/{domain_id}/query-jobs”。 query-string 查询参数,是可选部分,并不是每个API都有查询参数。查询参数前面需要带一个“?”,形式为“参数名=参数取值”,例如“?limit=10”,表示查询不超过10条数据。 例如您需要获取ESM在“华南-广州”区域的Token,则需使用“华南-广州”区域的Endpoint(esm-api.cn-south-1.myhuaweicloud.com),并在创建查询任务的URI部分找到resource-path(/meter/v1/{domain_id}/query-jobs),拼接起来如下所示。 https://esm-api.cn-south-1.myhuaweicloud.com/meter/v1/{domain_id}/query-jobs 图1 URI示意图 为方便查看,在每个具体API的URI部分,只给出resource-path部分,并将请求方法写在一起。这是因为URI-scheme都是HTTPS,而Endpoint在同一个区域也相同,所以简洁起见将这两部分省略。
  • 基本概念 账号 用户的账号对其所拥有的资源及云服务具有完全的访问权限,可以重置用户密码、分配用户权限等。由于账号是付费主体,为了确保账号安全,建议您不要直接使用账号进行日常管理工作,而是创建用户并使用他们进行日常管理工作。 用户 由账号在IAM中创建的用户,是云服务的使用人员,具有身份凭证(密码和访问密钥)。 区域(Region) 从地理位置和网络时延维度划分,同一个Region内共享弹性计算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。Region分为通用Region和专属Region,通用Region指面向公共租户提供通用云服务的Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region。 可用区(AZ,Availability Zone) 一个可用区是一个或多个物理数据中心的集合,有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个集群。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 项目 区域默认对应一个项目,这个项目由系统预置,用来隔离物理区域间的资源(计算资源、存储资源和网络资源),以默认项目为单位进行授权,用户可以访问您账号中该区域的所有资源。如果您希望进行更加精细的权限控制,可以在区域默认的项目中创建子项目,并在子项目中创建资源,然后以子项目为单位进行授权,使得用户仅能访问特定子项目中的资源,使得资源的权限控制更加精确。 图1 项目隔离模型 企业项目 企业项目是项目的升级版,针对企业不同项目间的资源进行分组和管理,是逻辑隔离。企业项目中可以包含多个区域的资源,且项目中的资源可以迁入迁出。
  • 注意事项 服务监管流程未完成的订单,订单状态为“处理中”,待用户确认验收后3个小时内,订单状态会同步为“已完成”,代表订单全流程已完成。 服务监管状态为已完成的订单,次月结算时系统自动出账。服务监管状态未完成的订单,结算时不出账。 商家线下交付包周期(包年、包月)SaaS 商品订单的资源开始时间为商家交付时填写的服务实际开通时间。如商家未填写服务实际开头时间则以用户验收成功时间作为实际开头时间,即用户验收后,资源才开始计时。 举例:用户购买涉及服务监管商品A,于1月1日购买1个月并于同日开通完成,投入使用。2月1日用户在系统点击确认验收。 场景一:商家实施服务完成时未填写服务实际开通时间 用户实际的使用周期为1月1日到2月1日,云商店订单系统显示有效期则为2月1日至3月1日。 场景二:商家实施服务完成时填写了服务实际开通时间,填写的时间为1月1日 用户实际的使用周期为1月1日到2月1日,云商店订单系统显示有效期则为1月1日至2月1日。
  • 注意事项 商家线下邮寄硬件商品后需在“服务商实施服务”节点线上录入物流信息。订单服务监管流程将流转至用户侧,订单状态显示为“用户确认验收”。 当订单处于“用户确认验收”状态,且快递物流信息显示已签署超过10天,系统将会对订单执行自动关单验收操作。 服务监管流程未完成的订单,订单状态显示为“处理中”。当用户线上点击确认验收后3个小时内,订单状态显示为“已完成”。已完成的订单即代表服务监管全流程结束。
  • 注意事项 服务监管流程未完成的订单,订单状态为“处理中”,待用户确认验收后3个小时内,订单状态会同步为“已完成”,代表订单全流程已完成。 应用编排类商品,根据服务监管状态出账。服务监管状态为已完成的订单,次月结算时系统自动出账。服务监管状态未完成的订单,结算时不出账。 应用编排类商品订单涉及服务监管流程,包周期(包年、包月)订单的资源开始时间为商家交付时填写的服务实际开通时间。如商家未填写服务实际开头时间则以用户验收成功时间作为实际开头时间,即用户验收后,资源才开始计时。 举例:用户购买涉及服务监管商品A,于1月1日购买1个月并于同日开通完成,投入使用。2月1日用户在系统点击确认验收。 场景一:商家实施服务完成时未填写服务实际开通时间 用户实际的使用周期为1月1日到2月1日,云商店订单系统显示有效期则为2月1日至3月1日。 场景二:商家实施服务完成时填写了服务实际开通时间,填写的时间为1月1日 用户实际的使用周期为1月1日到2月1日,云商店订单系统显示有效期则为1月1日至2月1日。
  • 服务监管总体流程 图1 通用商品服务监管流程 服务监管过程中,商家可执行“申诉”操作,详情请参见服务监管申诉说明。 用户服务监管操作说明,请参考《数据文件类商品服务监管(用户)》。 如用户对已完成服务监管的商品订单进行续费,新续费的订单将不涉及服务监管流程。 服务监管流程中,商家可以执行以下操作: 接收到用户需求后,在卖家中心查看需求信息,选择执行确认需求或者驳回需求操作。 确认需求后实施服务。 服务交付完成后,反馈确认服务已完成。
  • 注意事项 数据文件类交付方式下的商品分为标准类服务监管流程,如服务监管流程在用户处未处理,商家可联系用户沟通交付问题。 服务监管流程未完成的订单,订单状态为“处理中”,待用户确认验收后3个小时内,订单状态会同步为“已完成”,代表订单全流程已完成。 标准服务流服务监管,订单在商家侧(商家确认需求、商家实施服务)长期无进展,用户可发起申诉;建站服务流服务监管,订单在商家侧(商家确认需求、商家首页设计、商家网站搭建)长期无进展,用户可发起申诉。
  • SDK列表 表1提供了 MRS 服务支持的SDK列表,您可以在GitHub仓库查看SDK更新历史、获取安装包以及查看指导文档。 如果无法正常打开GitHub仓库,请检查您所使用的网络是否可以正常访问公网。由于GitHub的服务器部署在国外,国内用户访问时容易遇到无法打开的情况,请切换网络后再尝试打开。 表1 SDK列表 编程语言 Github地址 SDK中心 地址 参考文档 Java huaweicloud-sdk-java-v3 Java Java SDK使用指导 Python huaweicloud-sdk-python-v3 Python Python SDK使用指导 Go huaweicloud-sdk-go-v3 Go Go SDK使用指导 NodeJs huaweicloud-sdk-nodejs-v3 NodeJs NodeJs SDK使用指导 PHP huaweicloud-sdk-php-v3 PHP PHP SDK使用指导
  • 在线生成SDK代码 API Explorer 能根据需要动态生成SDK代码功能,降低您使用SDK的难度,推荐使用。 您可以在API Explorer中具体API页面的“代码示例”页签查看对应编程语言类型的SDK代码,如图1所示。 图1 获取SDK代码示例 当您在中间的填充栏填入对应内容时, 右侧代码示例栏会自动拼装参数到代码中供您进行使用。 图2 设置输入参数 在场景示例中可查看本服务更详细的场景SDK使用方法。 图3 场景示例
  • 为什么访问控制日志页面数据为空? 访问控制日志展示的是ACL防护策略(防护规则或黑/白名单)匹配到的流量,您需要在开启防护后配置ACL策略才能查看访问控制日志。 开启防护: 开启EIP防护请参见开启弹性公网IP防护。 开启VPC边界防护请参见开启VPC边界流量防护。 添加ACL防护策略: 添加防护规则请参见添加防护规则。 添加黑/白名单请参见添加黑/白名单 查看其它日志: 通过 云防火墙 的所有流量记录请查看流量日志。 攻击事件记录请查看攻击事件日志。 父主题: 故障排查
  • SDK列表 在开始使用之前,请确保您安装的是最新版本的SDK。使用过时的版本可能会导致兼容性问题或无法使用最新功能。您可以在SDK中心查询版本信息。 表1提供了 GaussDB 支持的SDK列表,您可以在GitHub仓库查看SDK更新历史、获取安装包以及查看指导文档。 如果无法正常打开GitHub仓库,请检查您所使用的网络是否可以正常访问公网。由于GitHub的服务器部署在国外,国内用户访问时容易遇到无法打开的情况,请切换网络后再尝试打开。 表1 SDK列表 编程语言 Github地址 参考文档 Java huaweicloud-sdk-java-v3 Java SDK使用指导 Python huaweicloud-sdk-python-v3 Python SDK使用指导 Go huaweicloud-sdk-go-v3 Go SDK使用指导
  • 操作步骤 指定limit查询云服务器详情列表 接口相关信息 URI格式: GET /v1/{project_id}/cloudservers/detail 详情请参见“查询云服务器详情列表”。 请求示例 GET https://{endpoint}/v1/743b4c0428d945316666666666666666/cloudservers/detail?offset=1&limit=100 {endpoint}信息请从地区和终端节点获取。 limit值可根据云服务器数据调整。 响应示例 { "count":2, "servers":[ { "fault":null, "id":"743b4c0428d945316666666666666666", "name":"ecs-5e70", "addresses":{ "140fd038-c4ae-4c32-ac07-34b525eb6b95":[ { "version":"4", "addr":"192.168.0.206", "OS-EXT-IPS-MAC:mac_addr":"fa:16:3e:95:88:3f", "OS-EXT-IPS:port_id":"7b5d615c-186d-4646-9cb8-444addfe9b92", "OS-EXT-IPS:type":"fixed" }, { "version":"4", "addr":"192.168.0.8", "OS-EXT-IPS-MAC:mac_addr":"fa:16:3e:1d:88:43", "OS-EXT-IPS:port_id":"dda2027b-2f03-497b-8d42-620da2baacc3", "OS-EXT-IPS:type":"fixed" } ] }, "flavor":{ "disk":"0", "vcpus":"2", "ram":"1024", "id":"c3.large.2", "name":"c3.large.2", "gpus": [], "asic_accelerators": [] }, "accessIPv4":"", "accessIPv6":"", "status":"SHUTOFF", "image":{ "id":"1ce5800a-e487-4c1b-b264-3353a39e2b4b" }, "hostId":"f92345b97fd291f67a29ed735a82a8983f370175d2ba3d18d66893f4", "updated":"2018-08-14T07:26:49Z", "created":"2018-08-13T13:46:09Z", "metadata":{ "metering.image_id":"af60e0d5-6952-4f3d-b0ed-31bb19d4a692", "metering.resourcespeccode":"c3.large.2.linux", "image_name":"HEC_Public_Cloudinit_CentOS_7.4_64bit", "metering.product_id":"00301-253164-0--0", "os_bit":"64", "lockSourceId":"", "lockScene":"", "metering.order_id":" CS 1808132145NRVRE", "lockCheckEndpoint":"", "metering.imagetype":"gold", "lockSource":"", "metering.resourcetype":"1", "vpc_id":"164489f6-cbf7-45b4-b6d0-d407c48cf7fc", "os_type":"Linux", "charging_mode":"1" }, "tags":[ ], "description":"ecs-4cff", "locked":false, "config_drive":"", "tenant_id":"edcb94a885a84ed3a3fdf8ea4d2741da", "user_id":"bb7f23e27e7e46f3aaceb5f53a158bdc", "os-extended-volumes:volumes_attached":[ { "device":"/dev/sda", "bootIndex":"0", "id":"2edc879f-022e-4bd6-b079-95a27564d449", "delete_on_termination":"false" } ], "OS-EXT-STS:task_state":null, "OS-EXT-STS:power_state":4, "OS-EXT-STS:vm_state":"stopped", "OS-EXT-SRV-ATTR:host":"az1.dc1", "OS-EXT-SRV-ATTR:instance_name":"instance-00137941", "OS-EXT-SRV-ATTR:hypervisor_hostname":"nova001@248", "OS-DCF:diskConfig":"MANUAL", "OS-EXT-AZ:availability_zone":"az1-dc1", "os:scheduler_hints":{ }, "OS-EXT-SRV-ATTR:root_device_name":"/dev/sda", "OS-EXT-SRV-ATTR:ramdisk_id":"8999878c-4a62-4014-89be-1743ff3a5daf", "enterprise_project_id":"441d5677-b76a-4dd4-a97a-ef7fd633c095", "OS-EXT-SRV-ATTR:user_data":"IyEvYmluL2Jhc2gKZWNobyAncm9vdDokNiRKQ2FzUWQkbm5wVmhJUFZlNVMwc3pXbnJGLnZVZ1FCWk4xTEo5Vy8wd09WTmFZaWpBRXdtRnhuQmZaTllVZXhBWktVWFVTeVhEeERuSUMzV2JjZEJyQUVBZkZvLy8nIHwgY2hwYXNzd2QgLWU7", "OS-SRV-USG:launched_at":"2018-08-13T13:46:46.000000", "OS-EXT-SRV-ATTR:kernel_id":"", "OS-EXT-SRV-ATTR:launch_index":0, "host_status":"UP", "OS-EXT-SRV-ATTR:reservation_id":"r-a8mg9vwr", "OS-EXT-SRV-ATTR:hostname":"ecs-4cff", "sys_tags":[ { "key":"_sys_enterprise_project_id", "value":"441d5677-b76a-4dd4-a97a-ef7fd633c095" } ], "security_groups":[ { "id":"71846bf6-1cda-4515-8590-3707be295e76", "name":"Sys-FullAccess" }, { "id":"b1786350-da65-11e7-b312-0255ac101b03", "name":"default" } ] }, { "fault":null, "id":"e3d3f219-b445-4a7a-8f00-e31412481f8c", "name":"ecs-1f30", "addresses":{ "00159d7d-b3c3-4108-8bc4-6658814e6422":[ { "version":"4", "addr":"192.168.20.197", "OS-EXT-IPS-MAC:mac_addr":"fa:16:3e:41:5a:32", "OS-EXT-IPS:port_id":"cfa2e055-54fb-427a-bde4-128bda47ae5c", "OS-EXT-IPS:type":"fixed" } ] }, "flavor":{ "disk":"0", "vcpus":"2", "ram":"1024", "id":"c3.large.2", "name":"c3.large.2", "gpus": [], "asic_accelerators": [] }, "accessIPv4":"", "accessIPv6":"", "status":"ACTIVE", "image":{ "id":"1ce5800a-e487-4c1b-b264-3353a39e2b4b" }, "progress":0, "hostId":"f92345b97fd291f67a29ed735a82a8983f370175d2ba3d18d66893f4", "updated":"2018-08-15T08:16:01Z", "created":"2018-08-13T11:57:29Z", "metadata":{ "sadfasfasf":"sdffffd", "metering.order_id":"CS180813193577ORO", "metering.imagetype":"gold", "metering.resourcespeccode":"c3.large.2.win", "metering.image_id":"65cb40e6-f67e-4bef-a1e7-808166a5999d", "image_name":"HEC_Public_Windows2008R2_Ent_64bit40G_English", "aaaaaa":"0", "metering.resourcetype":"1", "aaaa":"0", "metering.product_id":"00301-146042-0--0", "os_bit":"64", "vpc_id":"00159d7d-b3c3-4108-8bc4-6658814e6422", "os_type":"Windows", "charging_mode":"1" }, "tags":[ "_sys_root_resource_id=4514d9b0-d611-4744-bdf9-60802fd5198a", "_sys_root_resource_type=xxx.resource.type.vm" ], "description":"ecs-1f30", "locked":false, "config_drive":"", "tenant_id":"edcb94a885a84ed3a3fdf8ea4d2741da", "user_id":"bb7f23e27e7e46f3aaceb5f53a158bdc", "key_name":"Autotest_Init_TC_OriginalAPI_Create_Keypairs_02_keypair", "os-extended-volumes:volumes_attached":[ { "device":"/dev/sda", "bootIndex":"0", "id":"5043f66b-a0d8-4eb2-8c48-49976bcdc253", "delete_on_termination":"false" } ], "OS-EXT-STS:task_state":null, "OS-EXT-STS:power_state":1, "OS-EXT-STS:vm_state":"active", "OS-EXT-SRV-ATTR:host":"az1.dc1", "OS-EXT-SRV-ATTR:instance_name":"instance-0013772d", "OS-EXT-SRV-ATTR:hypervisor_hostname":"nova001@248", "OS-DCF:diskConfig":"MANUAL", "OS-EXT-AZ:availability_zone":"az1-dc1", "os:scheduler_hints":{ }, "OS-EXT-SRV-ATTR:root_device_name":"/dev/sda", "OS-EXT-SRV-ATTR:ramdisk_id":"8999878c-4a62-4014-92be-1743ff3a5daf", "enterprise_project_id":"441d5677-b76a-4dd4-a97a-ef7fd633c095", "OS-SRV-USG:launched_at":"2018-08-13T11:57:53.576640", "OS-EXT-SRV-ATTR:kernel_id":"", "OS-EXT-SRV-ATTR:launch_index":0, "host_status":"UP", "OS-EXT-SRV-ATTR:reservation_id":"r-xmjj4pnm", "OS-EXT-SRV-ATTR:hostname":"ecs-1f30", "sys_tags":[ { "key":"_sys_enterprise_project_id", "value":"441d5677-b76a-4dd4-a97a-ef7fd633c095" } ], "security_groups":[ { "name":"default" } ] } ] } 指定limit与marker查询云服务器详情列表 接口相关信息 URI格式: GET /v1/{project_id}/cloudservers/detail 接口与 步骤1 保持一致。 请求示例 GET https://{endpoint}/v1/743b4c0428d945316666666666666666/cloudservers/detail?limit=100&marker=f215afe8-b0c2-41cc-9191-585638166812 接口返回了下一页的接口URI,参考返回body体中的 servers_links 中的href字段,如果不存在该字段,表示已经不存在下一页。 响应示例 { "servers":[ ..... { "fault":null,       "id":"4cc31f70-f0b5-4ce8-8b9a-1e4c0fb53b6a", "name":"ecs-1f30", "addresses":{ "140fd038-c4ae-4c32-ac07-34b525eb6b95":[ { "version":"4", "addr":"192.168.20.197", "OS-EXT-IPS-MAC:mac_addr":"fa:16:3e:41:5a:32", "OS-EXT-IPS:port_id":"cfa2e055-54fb-427a-bde4-128bda47ae5c", "OS-EXT-IPS:type":"fixed" } ] }, "flavor":{ "disk":"0", "vcpus":"2", "ram":"1024", "id":"c3.large.2", "name":"c3.large.2", "gpus": [], "asic_accelerators": [] }, "accessIPv4":"", "accessIPv6":"", "status":"ACTIVE", "image":{ "id":"1ce5800a-e487-4c1b-b264-3353a39e2b4b" }, "progress":0, "hostId":"f92345b97fd291f67a29ed735a82a8983f370175d2ba3d18d66893f4", "updated":"2018-08-15T08:16:01Z", "created":"2018-08-13T11:57:29Z", "metadata":{ "sadfasfasf":"sdffffd", "metering.order_id":"CS180813193577ORO", "metering.imagetype":"gold", "metering.resourcespeccode":"c3.large.2.win", "metering.image_id":"65cb40e6-f67e-4bef-a1e7-808166a5999d", "image_name":"HEC_Public_Windows2008R2_Ent_64bit40G_English", "aaaaaa":"0", "metering.resourcetype":"1", "aaaa":"0", "metering.product_id":"00301-146042-0--0", "os_bit":"64", "vpc_id":"00159d7d-b3c3-4108-8bc4-6658814e6422", "os_type":"Windows", "charging_mode":"1" }, "tags":[ "_sys_root_resource_id=4514d9b0-d611-4744-bdf9-60802fd5198a", "_sys_root_resource_type=xxx.resource.type.vm" ], "description":"ecs-1f30", "locked":false, "config_drive":"",       "tenant_id":"743b4c0428d945316666666666666666", "user_id":"bb7f23e27e7e46f3aaceb5f53a158bdc", "key_name":"Autotest_Init_TC_OriginalAPI_Create_Keypairs_02_keypair", "os-extended-volumes:volumes_attached":[ { "device":"/dev/sda", "bootIndex":"0", "id":"5043f66b-a0d8-4eb2-8c48-49976bcdc253", "delete_on_termination":"false" } ], "OS-EXT-STS:task_state":null, "OS-EXT-STS:power_state":1, "OS-EXT-STS:vm_state":"active", "OS-EXT-SRV-ATTR:host":"az1.dc1", "OS-EXT-SRV-ATTR:instance_name":"instance-0013772d", "OS-EXT-SRV-ATTR:hypervisor_hostname":"nova001@248", "OS-DCF:diskConfig":"MANUAL", "OS-EXT-AZ:availability_zone":"az1-dc1", "os:scheduler_hints":{ }, "OS-EXT-SRV-ATTR:root_device_name":"/dev/sda", "OS-EXT-SRV-ATTR:ramdisk_id":"8999878c-4a62-4014-92be-1743ff3a5daf", "enterprise_project_id":"441d5677-b76a-4dd4-a97a-ef7fd633c095", "OS-SRV-USG:launched_at":"2018-08-13T11:57:53.576640", "OS-EXT-SRV-ATTR:kernel_id":"", "OS-EXT-SRV-ATTR:launch_index":0, "host_status":"UP", "OS-EXT-SRV-ATTR:reservation_id":"r-xmjj4pnm", "OS-EXT-SRV-ATTR:hostname":"ecs-1f30", "sys_tags":[ { "key":"_sys_enterprise_project_id", "value":"441d5677-b76a-4dd4-a97a-ef7fd633c095" } ], "security_groups":[ { "name":"default" } ] } ] } 汇总查询结果。 参考1持续调用,如果查询的云服务器列表为空,或者返回的body体中不存在servers_links 字段,表明所有云服务器查询完成。 汇总所有查询到的云服务器即当前查询条件下的所有云服务器。
  • Group by和Order by SQL调优建议 当group by 字段不是表中现有的数据列时,可以使用generated column机制(MySQL5.7版本以上支持,5.6及之前版本可新建普通字段和添加索引),创建新列并添加索引,将新创建字段作为group by条件,避免使用临时表。 保持group by 和order by 字段相同,其中group by字段中包含分片键时性能最优。 尽量让group by和order by过程中使用索引。
  • 临时表调优建议 跨数据分片在执行join、union、group by、order by等复杂SQL时,DDM可能会创建临时表暂时存储数据,对临时表大小限制默认是100万行。超出限制时,会提示“Temp table limit exceeded”错误,说明当前执行SQL需要在DDM节点进行二次计算,并且所需要的临时表大小已超过实例设置。对于以上情况如遇到临时表相关报错,可评估SQL是否存在优化空间,如设置广播表、增加分批查询条件或根据分库分表架构自身特点调整SQL写法。如果无优化空间,同时评估数据量大小总体可控(参与实际计算的数据不超过300万行)、实例资源相对充裕,可酌情在控制台调整实例级参数temp_table_size_limit来放开对应限制。
  • Join相关SQL调优建议 建议进行join操作时,join条件优先使用分片键等值连接。 用结果集小的表作为驱动表,尽量减少join的循环次数(使用left join/join时,左边是驱动表,右边是被驱动表;使用right join时,右边是驱动表,左边是被驱动表)。 对于被驱动表的join字段需添加索引,不建议两张大表直接进行join,尤其是包含不带限制条件的单表,将消耗大量计算资源。 不建议在显示事务中使用join语句,为保证事务内数据可见性,可能无法使用最优join执行计划。
  • 迁移前准备 准备可以访问旧RDS实例、目标DDM实例和目标DDM实例关联的RDS实例的ECS。 确保旧RDS实例、目标DDM实例和目标DDM实例关联的RDS实例都在同一个VPC下,保证网络互通。 旧RDS实例、目标DDM实例和目标DDM实例关联的RDS实例的安全组建议配置相同,如果不同则需要放开对应端口访问。 ECS已安装MySQL官方客户端,MySQL客户端版本建议为5.6或5.7。 Red Hat系列Linux安装命令:yum install mysql mysql-devel Debian系列Linux安装命令:apt install mysql-client-5.7 mysql-client-core-5.7 ECS磁盘空间足够存放临时转储文件;ECS内存空间足够,可以用来比较转储文件。 准备已关联RDS实例的DDM实例,并配置DDM账号、DDM逻辑库等相关信息。 如果目标DDM实例逻辑库为拆分库,则需要在迁移前,在DDM控制台先创建与旧RDS数据表结构相同的逻辑表。
  • 操作场景 本章节主要介绍将单RDS(非拆分,以下简称旧RDS)库中的数据整库迁移到DDM实例非拆分库中,仅使用DDM做读写分离场景。 迁移过程中可能会出现业务中断情况,中断时长与迁移数据量大小、网络情况相关。 数据迁移是一项比较复杂的操作,建议在业务量较低时进行。本实践仅供参考,您需要根据自己业务场景、数据量、停机时间要求等情况,设计合适的迁移方案。 对于数据量较大的场景,建议通过工单或售后服务联系DDM技术支持人员进行支撑,在正式数据迁移前进行充分的迁移演练测试。
  • DDM的分布式事务实现 DDM中的分布式事务模块基于MySQL XA协议实现,XA协议是对2PC(Two Phase Commit)事务模型的一种实现,2PC是一种经典的分布式事务实现方案。基于MySQL XA协议的分布式事物可以实现强一致性写,整体分布式事物的一致性说明可参考MySQL官方文档。 在分布式系统里,每个参与者都可以知晓自己操作的成功或者失败,却无法知道其他节点操作的成功或失败。当一个事务跨多个节点时,为了保持事务的原子性与一致性,需要引入一个协调者(Coordinator)来统一掌控所有参与者(Participant)的操作结果,并指示它们是否要把操作结果进行真正的提交(commit)或者回滚(rollback)。DDM节点在这个分布式事务中扮演协调者的角色,RDS实例则是参与者。 2PC顾名思义分为两个阶段,其实施思路可概括为: 准备阶段(prepare phase):参与者将操作结果通知协调者,参与者如果给出了已准备的回应,则应保证在协调者做出决定之前需要将本次决议所需资源进行预留。 提交阶段(commit phase):收到参与者的回应后,协调者再向参与者发出通知,根据反馈情况决定各参与者是否要提交还是回滚。 举例说明: 甲乙丙丁四人要聚餐,需要确定时间,不妨设甲是协调者,乙丙丁是参与者。 准备阶段: 甲发短信给乙丙丁,周二中午十二点聚餐是否有时间。 丁回复有时间。 乙回复有时间。 丙迟迟不回复,此时对于这个活动,甲乙丙丁均处于阻塞状态,算法无法继续进行。 丙回复有时间(或者没有时间)。 提交阶段: 协调者甲将收集到的结果(周二中午聚餐或者不聚餐)反馈给乙丙丁(什么时候反馈,以及反馈结果如何,在此例中取决与丙的时间与决定)。 乙收到。 丙收到。 丁收到。 如果有人没有收到,则甲后续不断重新进行通知,直到通知成功。
  • 2PC具体实现 DDM对事务的2阶段提交进行了透明化封装。应用侧使用DDM事务的时候不需要关心底层是否为分布式事务,只需像使用普通事务一样执行BEGIN/COMMIT指令进行事务操作。DDM会自动处理分布式事务的两阶段提交逻辑。如果事务只涉及一个数据分片,那么DDM还可以自动将事务降级为一阶段提交的本地事务。一阶段提交的细节本文不详细展开。 图1 分布式事务执行流程 其中XID由节点内事务序号、节点ID和时间戳组成,代表了一个全局维度的分布式事务唯一编号,该编号再加上对应分库名构成实际在物理库上开启分布式事务分支的XA_ID 。
  • 操作场景 本章节主要介绍将Mycat中的数据整库迁移到DDM中。 迁移过程中可能会出现业务中断情况,中断时长与迁移数据量大小、网络情况相关。 数据迁移是一项比较复杂的操作,建议在业务量较低时进行。本实践仅供参考,您需要根据自己业务场景、数据量、停机时间要求等情况,设计合适的迁移方案。 由于DDM仅支持通过弹性云服务器(ECS)访问,因此需要先将数据库导出为文件到ECS,然后从ECS将文件中的数据导入到DDM。
  • 迁移前准备 准备可以访问Mycat、目标DDM实例和目标DDM实例关联的RDS实例的ECS。 确保Mycat、目标DDM实例和目标DDM实例关联的RDS实例都在同一个VPC下,保证网络互通。 部署Mycat的ECS、目标DDM实例和目标DDM实例关联的RDS实例的安全组建议配置相同,如果不同则需要放开对应端口访问。 ECS已安装MySQL官方客户端,MySQL客户端版本建议为5.6或5.7。 Red Hat系列Linux安装命令:yum install mysql mysql-devel Debian系列Linux安装命令:apt install mysql-client-5.7 mysql-client-core-5.7 ECS磁盘空间足够存放临时转储文件;ECS内存空间足够,可以用来比较转储文件。 准备已关联RDS实例的DDM实例,并配置DDM账号、DDM逻辑库等相关信息。 本章节以Mycat 1.6版本进行迁移为例。
  • 迁移策略 Mycat与DDM数据表类型不同,迁移策略也有所差异,详情如表1所示。 表1 迁移策略 Mycat表类型 DDM表类型 迁移策略 非拆分表 单表 Mycat导出表结构和表数据。 连接目标DDM关联的RDS将数据导入至目标DDM(非拆分表场景)。 拆分表:分片规则为hash类(含年月日等日期类) 拆分表:拆分算法为hash(含日期函数) Mycat导出全部数据表结构。 对照导出的表结构,在DDM控制台创建表结构完全相同的表。 从Mycat整库导出数据。 连接DDM导入整库数据。 拆分表:分片规则为按范围range类(含年月日等日期类) 拆分表:拆分算法为range(含日期函数) 广播表 广播表
  • DDL DDL执行时机 对已有表进行DDL操作时建议放在业务低峰期进行。 分片数 创建新拆分表时建议结合实际数据量进行合理预估,总分片数满足需求即可。不建议使用超出实际需求的分片数,拆分表分片数并非越多越好 高危DDL 进行高危DDL时请仔细校验SQL后谨慎操作,如DROP TABLE, TRUNCATE TABLE等操作。 DDL失败修复 DDL命令如遇报错,可以使用"check table 表名"命令对各个分片表结构进行校验,识别出失败的分片进行针对性修复。如ALTER TABLE命令遭遇失败可以在命令前添加/*+allow_alter_rerun=true/,开启ALTER语句的幂等可重入执行后重试,直到check table 命令提示各个分片表结构达到一致则可认为执行成功。 MDL锁导致执行DDL报错 背景:为保证DDL的可用性,DDM内部在执行DDL前会检查底层RDS相关表是否存在MDL锁。 若存在MDL锁,,则DDL会提前报错退出。 metadata lock exists, one of MDL is [%s],DDL operation can not proceed, please use 'show metadata lock' to check current mdl, and use 'kill physical threadId@host:port' to clean it 可能出现的问题:若系统中存在慢SQL,执行时间为几分钟不等,那么可能被MDL锁所阻拦,无法执行DDL。 解决方案1:在DDM控制台提高参数“ddl_precheck_mdl_threshold_time”的大小, 如提高到30分钟(1800秒)。 “ddl_precheck_mdl_threshold_time”表示DDL允许MDL锁持有的最大时长。持有超过这个时间长度的MDL锁,DDL才会报错,默认值为120秒。 解决方案2:执行show metadata lock查看是否因为持有慢事务的MDL锁阻塞了DDL的执行。若存在阻塞, 可以使用kill physical threadId@host:port 来关闭底层慢事务。配合/*+allow_alter_rerun=true*/的hint, 以及check table来查看和执行,直到DDL彻底执行完。 threadId为物理层RDS的线程id,host和port分别为物理层RDS的ip和端口。 DDL长时间卡死 在业务低峰期执行DDL时如果遇到长时间卡死情况,请另开会话执行xa recover命令查看是否有慢事务存在,如存在慢事务挂起请及时联系值班人员解决。
  • select操作 Order by 及 Limit函数 "order by limit offset, count"场景,禁止给offset赋大数值,即禁止深度翻页。 如遇到临时表超限(Temp table limit exceeded)报错,说明排序中间数据产生了临时表且超限,考虑联系DDM值班进行SQL调优。 Group by函数 不建议select_list部分含有非group by列。 不支持不可下推的group_concat聚合函数内含有order by子句。 不建议distinct、group by字段多于3项。 不建议join、或者子查询操作之后含有group by操作。 不建议使用count(distinct ),sum(distinct )操作。 如遇到临时表超限(Temp table limit exceeded)报错,说明聚合操作中间数据产生了临时表且超限,考虑联系DDM值班进行SQL调优。 带GROUP BY分组查询的SQL语句,如果所有分组或单分组查询结果超过100万条(默认值),此时会有临时表超限约束(Temp table limit exceeded)。 Join函数 select场景,建议join条件是每个表的拆分字段或使用广播表,或者是驱动表是一个小表(inner/left join驱动表是左表,right join驱动表是右表)。 不建议两个大表直接进行join操作。 不建议join on condition中含有非等值操作。 如遇到临时表超限(Temp table limit exceeded)报错,说明JOIN中间数据产生了临时表且超限,考虑联系DDM值班进行SQL调优。 不建议5张表以上进行join操作。 join查询操作建议不要开启事务。 不建议在事务中进行join查询,开启事务会影响DDM对join算法的选择,无法使用最高效的算法。 这里的大表和小表的意思不是指原始表的规模,指的是经过where条件过滤之后的数据规模。 子查询 不建议子查询包含在OR表达式中,或者是子查询的关联条件包含在OR表达式中 不建议使用含有limit的标量子查询,如 select (select x from t2 where t2.id= t.id limit 1),a,b from t。 如果子查询和主表都路由到同一分片,建议在SQL前加/*+db=xxx*/来精准路由。 不建议子查询内部含有join语句。 不支持嵌套子查询。 不建议ROW表达式跟子查询做比较操作,如 select * from t where (a,b,c)=(select x,y,z from t2 where …)。 不建议select_list里面含有超过2个以上的子查询 。
  • insert操作 insert写法规范 不建议逐条insert,推荐使用insert into values (),()..();语法。 MySQL的JDBC连接的url中要加rewriteBatchedStatements参数,并保证5.1.13以上版本的驱动,才能实现批量插入。MySQL JDBC驱动在默认情况下会无视executeBatch()语句,把预计批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,批量插入实际上是单条插入,直接造成较低的性能。只有把rewriteBatchedStatements参数置为true, 驱动才会批量执行SQL。另外这个选项对INSERT/UPDATE/DELETE操作都有效。 开启rewriteBatchedStatements后的批量INSERT/UPDATE/DELETE操作要注意设置合理的batch size,batch size过大可能造成性能下降。如无特殊需求,建议batch size不超过1000。 拆分字段的值:不建议使用函数、表达式、子查询等,推荐使用常量值。 普通字段的值:不建议使用子查询,推荐使用常量、函数、表达式。 大批量数据导入 推荐使用loaddata local infile来实现大批量数据导入。 这个地方只需要开一个session窗口导入即可,DDM内部会自动进行并行导入。 数据迁移场景 建议使用mysqldump导出sql文件,再使用mysql source命令导入。具体操作请参考数据从DDM实例导出。 auto_increment字段 DDM使用Sequence来实现auto_increment语义,并保证全局唯一。 赋值:若使用auto_increment字段,建议不要在values子句中赋值,否则容易造成主键冲突。如果在values中赋了值,建议使用alter sequence语句更改,具体操作请参考全局序列。 步长:auto_increment字段步长建议不要设置成1,会导致性能低下。默认设置成1000。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全