华为云用户手册

  • 响应示例 { "is_success": true, "message": "", "job_id": "208b08d4-0dc2-4dd7-8879-ddd4c020d7aa", "job_type": "QUERY", "job_mode":"async", "queue_name": "default", "owner": "test", "start_time": 1509335108918, "duration": 2523, "status": "FINISHED", "input_size": 22, "result_count": 4, "database_name":"dbtest", "table_name":"tbtest", "detail": "{\"type\":\"struct\",\"fields\":[{\"name\":\"id\",\"type\":\"integer\",\"nullable\":true,\"metadata\":{}},{\"name\":\"name\",\"type\":\"string\",\"nullable\":true,\"metadata\":{}}]}", "statement": "select * from t1" }
  • 响应消息 表2 响应参数 参数名称 参数类型 说明 is_success Boolean 执行请求是否成功。“true”表示请求执行成功。 message String 系统提示信息,执行成功时,该值为空。 job_id String 作业ID。可通过提交SQL作业(推荐)获取。 job_type String 作业类型。包含DDL、DCL、IMPORT、EXPORT、QUERY、INSERT、DATA_MIGRATION、UPDATE、DELETE、RESTART_QUEUE、SCALE_QUEUE。 job_mode String 作业执行模式: async:异步 sync:同步 queue_name String 队列名称,用于显示作业是在该队列中提交的。 owner String 提交作业的用户。 start_time Long 作业开始的时间。是单位为“毫秒”的时间戳。 duration Long 作业运行时长,单位毫秒。 status String 此作业的当前状态,包含运行中(RUNNING)、规格变更中(SCALING)、提交中(LAUNCHING)、已完成(FINISHED)、已失败(FAILED)、已取消(CANCELLED)。 input_row_count Long Insert作业执行过程中扫描记录条数。 bad_row_count Long Insert作业执行过程中扫描到的错误记录数。 input_size Long 作业执行过程中扫描文件的大小,单位字节。 result_count Integer 当前作业返回的结果总条数或insert作业插入的总条数。 database_name String 记录其操作的表所在的数据库名称。类型为IMPORT、EXPORT和QUERY的作业才有“database_name”属性。 table_name String 记录其操作的表名称。类型为IMPORT、EXPORT和QUERY的作业才有“table_name”属性。 detail String 相关列信息的Json字符串。 statement String 作业执行的SQL语句。 tags Array of objects 作业的标签。具体请参考表3。 user_conf String SQL查询的相关列信息的Json字符串。 result_format String 作业结果的存储格式,当前只支持csv。 result_path String 作业结果的OBS路径。 表3 tags参数 参数名称 是否必选 参数类型 说明 key 是 String 标签的键。 value 是 String 标签的值。
  • 处理方法 请按如下方法进行排查修改: 可使用如下命令排查端口占用情况,若被占用,请修改端口号后重新部署。 Linux lsof -i:8080 netstat -anp|grep 8080 Windows netstat -ano|findstr “8080” 可使用如下命令检测Java环境,若未安装jdk,可通过“安装jdk”部署步骤进行安装。 Linux java -version which java Windows java -version 情况一:若系统为Linux系统,jdk为手动安装,由于当前启动操作为“no_login”方式,还需在以下文件中增加jdk环境变量 Ubuntu: ~/.bashrc 和 ~/.profile Centos: ~/.bashrc 和 ~/.bash_profile 所需环境变量配置示例如下: export JAVA_HOME=/usr/local/jdk/jdk1.8.0_151 export CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$PATH 情况二:若系统为Linux系统,jdk使用“安装JDK”部署步骤安装,安装版本为“openjdk-1.8.0”时,无需手动配置jdk,应在以下文件中去除jdk环境变量的相关配置 Ubuntu: ~/.bashrc 和 ~/.profile Centos: ~/.bashrc 和 ~/.bash_profile 合理设置Java运行参数,命令行参数正确放置于对应的文本框内,系统变量与命令行参数之间的区别请参见启动/停止SpringBoot服务。 确认输入的服务路径,若不正确,请修改后重新部署。 “选择部署来源”部署步骤中直接选择jar文件进行下载,当需要通过文件夹下载多个jar文件时,jar文件命名中不要出现中文字符。 若按以上方式排查后仍存在启动失败问题,可查看服务启动日志,根据日志信息进行问题定位。
  • 问题现象 日志提示如下信息: "msg": "Failed to find handler for \"usr/local/python/Python-3.5.4.tgz\". Make sure the required command to extract the file is installed. Command \"/usr/bin/unzip\" could not handle archive. Command \"/usr/bin/gtar\" could not handle archive."}
  • 解决方法 使用命令 “ping $domainName”(其中$domainName为apt源链接对应的 域名 ),检查网络连通性,如果网络连通正常请检查防火墙和安全组(如下2、3),否则请联系相关网络管理员打通网络。 对于防火墙限制出方向: 执行命令“iptables -nL”,查看防火墙出方向限制清单是否包含80端口。 对于云主机安全组出方向规则策略限制: 联系相关网络管理员设置安全组出方向规则策略。
  • 处理方法 使用命令 “ping $domainName”(其中$domainName为yum源链接对应的域名),检查网络连通性,如果网络连通正常请检查防火墙和安全组(如下2、3),否则请联系相关网络管理员打通网络。 对于防火墙限制出方向: 执行命令“iptables -nL”,查看防火墙出方向限制清单是否包含80端口。 对于云主机安全组出方向规则策略限制: 联系相关网络管理员设置安全组出方向规则策略。
  • 计费样例 假设您在2023/07/06 12:25:30创建了一个按需计费的企业路由器,并添加如下两个连接: 2023/07/06 12:36:00 在企业路由器中添加1个“虚拟私有云(VPC)”连接,并在2023/07/07 18:50:00删除该连接,连接的使用过程中共产生流量532GB流量。 2023/07/06 13:01:00在企业路由器中添加1个“虚拟网关(VGW)”连接,并在2023/07/07 18:55:00删除该连接,连接的使用过程中共产生流量1300GB流量。 本示例中连接费用为0.40元/小时,流量费用为0.13元/GB,图1给出了上述示例配置的费用计算过程,产生费用的详细说明如表2所示。 图1 企业路由器计费示例 表1 企业路由器费用明细 连接类型 产生费用时间段 费用明细 费用总和 “虚拟私有云(VPC)”连接 2023/07/06 12:36:30~2023/07/07 18:50:00 实际使用时长共30小时14分钟,企业路由器采用整点计费,不足一小时采用一小时计费,本次计费时长为31小时,详细计算如下: 2023/07/06 12:36:00~2023/07/06 13:00:00 1小时 2023/07/06 13:00:00~2023/07/07 18:00:00 29小时 2023/07/07 18:00:00~2023/07/07 18:50:00 1小时 连接费用:0.40×31=12.4元 流量费用:0.13×532=69.16元 12.4+69.16=81.56元 “虚拟网关(VGW)”连接 2023/07/06 13:01:00~2023/07/07 18:55:00 计费时长共29小时54分钟,企业路由器采用整点计费,不足一小时采用一小时计费,本次计费时长为30小时,详细计算如下: 2023/07/06 13:01:00~2023/07/06 14:00:00 1小时 2023/07/06 14:00:00~2023/07/07 18:00:00 28小时 2023/07/07 18:00:00~2023/07/07 18:55:00 1小时 连接费用:0.40×30=12元 流量费用:0.13×1300=169元 12+169=181元
  • 场景示例:核对资源用量是否与实际相符 假设您在2023/07/06 12:25:30创建了一个企业路由器,2023/07/06 12:36:00 在企业路由器中添加1个“虚拟私有云(VPC)”连接,并在2023/07/07 18:50:00删除该连接,连接的使用过程中共产生流量532GB流量。 连接费用 连接按小时计费,整点结算,不足一小时以一小时计算。您可以在流水账单中核对每一个计费周期的信息是否和实际相符,具体如表2所示。 表1 连接费用流水账单 产品类型 企业路由器 ER 产品 ER连接 计费模式 按需计费 消费时间 2023/07/06 12:36:00 ~ 2023/07/07 18:50:00时段计费系统将生成1笔流水账单。 官网价 官网价=使用量*单价 本例中,实际使用时长共30小时14分钟,企业路由器采用整点计费,不足一小时采用一小时计费,本次计费时长为31小时,连接费用以0.40元/小时为例。那么官网价=0.40×31=12.4元。 优惠金额 用户使用云服务享受折扣优惠如商务折扣、伙伴授予折扣以及促销优惠等减免的金额。基于官网价的优惠金额。 抹零金额 华为云产品 定价精度为小数点后8位(单位:元),因此在计费过程中会产生小数点后8位的资源使用费用。而在实际扣费时,仅扣除到小数点后2位,小数点后第3位到第8位部分金额会被舍弃,这种舍弃部分的金额称作抹零金额。 本示例中抹零金额为:0元 应付金额 应付金额=官网价-优惠金额-抹零金额 本示例中,假设优惠金额为0,抹零金额为0,那么应付金额=12.4 - 0 - 0 = 12.4元 流量费用 根据实际流经连接的流量收取费用,统计从连接发送到企业路由器的每GB流量,即入方向的流量,您可以在流水账单中核对每一个计费周期的信息是否和实际相符,具体如表2所示。 表2 流量费用流水账单 产品类型 企业路由器 ER 产品 ER连接 计费模式 按需计费 消费时间 2023/07/06 12:36:00 ~ 2023/07/07 18:50:00时段计费系统将生成1笔流水账单。 官网价 官网价=使用量*单价 本例中,实际使用532GB流量,流量费用以0.13元/GB为例。那么官网价=0.13×532=69.16元。 优惠金额 用户使用云服务享受折扣优惠如商务折扣、伙伴授予折扣以及促销优惠等减免的金额。基于官网价的优惠金额。 抹零金额 华为云产品 定价 精度为小数点后8位(单位:元),因此在计费过程中会产生小数点后8位的资源使用费用。而在实际扣费时,仅扣除到小数点后2位,小数点后第3位到第8位部分金额会被舍弃,这种舍弃部分的金额称作抹零金额。 本示例中抹零金额为:0元 应付金额 应付金额=官网价-优惠金额-抹零金额 本示例中,假设优惠金额为0,抹零金额为0,那么应付金额=69.16 - 0 - 0 = 69.16元
  • 成本优化 成本控制 企业可以在成本中心的“预算管理”页面创建精细粒度的预算来管理成本和使用量,在实际或预测超过预算阈值时,自动发送通知给指定消息接收人。企业还可以创建预算报告,定期将指定预算进展通知给指定消息接收人。 例如企业需要创建一个企业路由器的按需成本预算,每月预算金额为10000元,当预测金额高于预算金额的80%时发送预算告警。那么,创建的预算如下: 图5 预算基本信息 图6 设置成本范围 图7 设置提醒 详细介绍请参见使用预测和预算来跟踪成本和使用量。 资源优化 您可以通过 云监控服务 监控资源的使用情况,识别空闲资源,寻找节约成本的机会。也可以根据成本分析阶段的分析结果识别成本偏高的资源,然后采取针对性的优化措施。 监控资源利用率,评估当前配置是否过高。例如:企业路由器连接的带宽。 监控闲置的资源,避免浪费。例如:未添加连接的企业路由器。 实现自动化运维 华为云也提供了丰富的运维类产品,帮助您提升运维效率,降低运维的人力成本。例如: 弹性伸缩:持续动态维护按需类带宽资源。适合业务负载存在峰谷波动的场景。 智能购买组:组合计算存储服务,一键部署跨计费模式、跨可用区和跨实例规格的实例集群。适合需要快速交付稳定算力,同时使用竞价实例降低成本的场景。 资源编排 :一键部署并维护包含多种云资源和依赖关系的资源栈。适合交付整体系统、克隆环境等场景。 自动化运维:以服务化的方式定义一组运维操作,高效执行运维任务。适合定时运维、批量运维、跨地域运维等场景。
  • 成本分配 成本管理的基础是树立成本责任制,让各部门、各业务团队、各责任人参与进来,为各自消耗云服务产生的成本负责。企业可以通过成本分配的方式,将云上成本分组,归集到特定的团队或项目业务中,让各责任组织及时了解各自的成本情况。 华为云成本中心支持通过多种不同的方式对成本进行归集和重新分配,您可以根据需要选择合适的分配工具。 通过关联账号进行成本分配 企业主客户可以使用关联账号对子客户的成本进行归集,从而对子账号进行财务管理。详细介绍请参见通过关联账号维度查看成本分配。 通过企业项目进行成本分配 在进行成本分配之前,建议开通企业项目并做好企业项目的规划,可以根据企业的组织架构或者业务项目来划分。在购买企业路由器时选择指定企业项目,新购连接将按此企业项目进行成本分配。详细介绍请参见通过企业项目维度查看成本分配。 图2 为企业路由器选择企业项目 通过成本标签进行成本分配 标签是华为云为了标识云资源,按各种维度(例如用途、所有者或环境)对云资源进行分类的标记。推荐企业使用预定义标签进行成本归集,具体流程如下: 图3 为企业路由器添加标签 图4 为连接添加标签 详细介绍请参见通过成本标签维度查看成本分配。 使用成本单元进行成本分配 企业可以使用成本中心的“成本单元”来拆分公共成本。公共成本是指多个部门共享的计算、网络、存储或资源包产生的云成本,或无法直接通过企业项目、成本标签分配的云成本。这些成本不能直接归属于单一所有者,因此不能直接归属到某一类别。使用拆分规则,可以在各团队或业务部门之间公平地分配这些成本。详细介绍请参见使用成本单元查看成本分配。
  • 计费模式概述 企业路由器提供按需计费模式,一种后付费模式,即先使用再付费,按照企业路由器内连接的实际使用时长和使用流量计费,秒级计费,按小时结算。按需计费模式允许您根据实际业务需求灵活地调整资源使用,无需提前预置资源,从而降低预置过多或不足的风险。 表1 计费模式 计费模式 按需计费 付费方式 后付费 计费周期 连接费用:秒级计费,按小时结算。 流量费用:按照企业路由器的使用流量计费。 适用计费项 连接费用:按接入的连接数量计费 流量费用:按连接实际产生的流量计费 变更规格 - 适用场景 适用于资源需求波动的场景,可以根据实际使用资源计算费用。 父主题: 计费模式
  • 计费项 ServiceStage提供按需模式和按需套餐包模式,计费项详细说明,请参考计费项。 按需模式,开通ServiceStage服务后您可以直接使用ServiceStage。系统根据您使用的ServiceStage产品版本单价(元/小时/应用实例)、应用实例数和使用时长按需计费。 按需套餐包模式,您需要预付费来购买固定期限内、指定版本和应用实例数量的ServiceStage套餐包,可以享受相对按需模式而言的更低资费优惠。系统根据您购买的ServiceStage套餐包版本实例包月单价和购买时长包年包月计费。
  • 计费模式 ServiceStage根据您使用的计费项模式确定计费模式。如果以按需模式使用ServiceStage,则按需计费;如果您以按需套餐包模式使用ServiceStage,则包年包月计费。计费模式详情,请参考计费模式。 按需计费模式,是一种后付费模式,即先使用再付费,按照实际使用时长计费。 包年包月计费模式,使用前需预付费,即先付费再使用,按照订单的购买周期进行结算,因此在购买之前,您必须确保账户余额充足。
  • 集群间不落地数据导入 启动GDS。(如果已经启动跳过此步骤) gds -d /***/gds_data/ -D -p GDS_IP:GDS_PORT -l /***/gds_log/aa.log -H 0/0 -t 10 -D 如果需要设置管道文件的超时时间,则使用--pipe-timeout参数设置。 源数据库数据导出。 登录目标数据库创建内表,并写入数据。 CREATE TABLE test_pipe( id integer not null, sex text not null, name text ); INSERT INTO test_pipe values(1,2,'11111111111111'); INSERT INTO test_pipe values(2,2,'11111111111111'); INSERT INTO test_pipe values(3,2,'11111111111111'); INSERT INTO test_pipe values(4,2,'11111111111111'); INSERT INTO test_pipe values(5,2,'11111111111111'); 创建只写外表。 CREATE FOREIGN TABLE foreign_test_pipe( id integer not null, age text not null, name text ) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://GDS_IP:GDS_PORT/', FORMAT 'text', DELIMITER ',', NULL '', EOL '0x0a' ,file_type 'pipe') WRITE ONLY; 导入语句,此时语句会阻塞。 INSERT INTO foreign_test_pipe SELECT * FROM test_pipe; 目标集群导入数据。 创建内表。 CREATE TABLE test_pipe (id integer not null, sex text not null, name text); 创建只读外表。 CREATE FOREIGN TABLE foreign_test_pipe(like test_pipe) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://GDS_IP:GDS_PORT/', FORMAT 'text', DELIMITER ',', NULL '', EOL '0x0a' , file_type 'pipe', auto_create_pipe 'false'); 执行导入语句: INSERT INTO test_pipe SELECT * FROM foreign_test_pipe; 查看目标集群导入语句返回的结果: SELECT * FROM test_pipe; id | sex | name ----+-----+---------------- 3 | 2 | 11111111111111 6 | 2 | 11111111111111 7 | 2 | 11111111111111 1 | 2 | 11111111111111 2 | 2 | 11111111111111 4 | 2 | 11111111111111 5 | 2 | 11111111111111 8 | 2 | 11111111111111 9 | 2 | 11111111111111 (9 rows) GDS默认导出或者导入的管道文件命名规则为:“数据库名_模式名_外表名.pipe”,因此默认需要目标集群与源集群的数据库名及模式名保持一致。如果数据库或模式不一致,则可以在location的url中指定相同的管道文件。 示例: 只写外表指定管道名。 CREATE FOREIGN TABLE foreign_test_pipe(id integer not null, age text not null, name text) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://GDS_IP:GDS_PORT/foreign_test_pipe.pipe', FORMAT 'text', DELIMITER ',', NULL '', EOL '0x0a' ,file_type 'pipe') WRITE ONLY; 只读外表指定管道名。 CREATE FOREIGN TABLE foreign_test_pipe(like test_pipe) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://GDS_IP:GDS_PORT/foreign_test_pipe.pipe', FORMAT 'text', DELIMITER ',', NULL '', EOL '0x0a' ,file_type 'pipe',auto_create_pipe 'false');
  • 客户端和服务器端SSL连接参数组合情况 客户端最终是否使用SSL加密连接方式、是否验证服务器证书,取决于客户端参数sslmode与服务器端(即 GaussDB (DWS) 集群侧)参数ssl、require_ssl。参数说明如下: ssl(服务器) ssl参数表示是否开启SSL功能。on表示开启,off表示关闭。 对于集群版本高于1.3.1(包括1.3.1)的集群,默认为on,不支持在GaussDB(DWS) 管理控制台上设置。 对于集群版本低于1.3.1的集群,默认为on。ssl参数可通过GaussDB(DWS) 管理控制台上集群的“安全设置”页面中的“SSL连接”进行设置。 require_ssl(服务器) require_ssl参数是设置服务器端是否强制要求SSL连接,该参数只有当ssl为on时才有效。on表示服务器端强制要求SSL连接。off表示服务器端对是否通过SSL连接不作强制要求。 对于集群版本高于1.3.1(包括1.3.1)的集群,默认为off。require_ssl参数可通过GaussDB(DWS) 管理控制台上集群的“安全设置”页面中的“服务器端是否强制使用SSL连接”进行设置。 对于集群版本低于1.3.1的集群,默认为off,不支持在GaussDB(DWS) 管理控制台上设置。 sslmode(客户端) 可在SQL客户端工具中进行设置。 在gsql命令行客户端中,为“PGSSLMODE”参数。 在Data Studio客户端中,为“SSL模式”参数。 客户端参数sslmode与服务器端参数ssl、require_ssl配置组合结果如下: 表3 客户端与服务器端SSL参数组合结果 ssl(服务器) sslmode(客户端) require_ssl(服务器) 结果 on disable on 由于服务器端要求使用 SSL,但客户端针对该连接禁用了 SSL,因此无法建立连接。 disable off 连接未加密。 allow on 连接经过加密。 allow off 连接未加密。 prefer on 连接经过加密。 prefer off 连接经过加密。 require on 连接经过加密。 require off 连接经过加密。 verify-ca on 连接经过加密,且验证了服务器证书。 verify-ca off 连接经过加密,且验证了服务器证书。 off disable on 连接未加密。 disable off 连接未加密。 allow on 连接未加密。 allow off 连接未加密。 prefer on 连接未加密。 prefer off 连接未加密。 require on 由于客户端要求使用 SSL,但服务器端禁用了 SSL,因此无法建立连接。 require off 由于客户端要求使用 SSL,但服务器端禁用了 SSL,因此无法建立连接。 verify-ca on 由于客户端要求使用 SSL,但服务器端禁用了 SSL,因此无法建立连接。 verify-ca off 由于客户端要求使用 SSL,但服务器端禁用了 SSL,因此无法建立连接。
  • 在续费管理页面开通自动续费 登录管理控制台。 单击“控制台”页面上方“费用”,在下拉菜单中选择“续费管理”。 进入“续费管理”页面。 自定义查询条件。 可在“自动续费项”页签查询已经开通自动续费的资源。 可对“手动续费项”、“到期转按需项”、“到期不续费项”页签的资源开通自动续费。 为包年/包月资源开通自动续费。 单个资源开通自动续费:选择需要开通自动续费的弹性负载均衡,单击操作列“开通自动续费”。 批量资源开通自动续费:选择需要开通自动续费的弹性负载均衡,单击列表左上角的“开通自动续费”。 选择续费时长,并根据需要设置自动续费次数,单击“开通”。 在“续费管理”页面开通的自动续费,自动续费周期以实际选择的续费时长以及自动续费次数为准。例如:您选择了续费时长3个月,不限次数,即在每次到期前自动续费3个月。
  • 负载均衡冻结后,哪些功能会受影响? 以下几种场景可能会导致您的负载均衡被冻结,冻结后负载均衡器将不再提供服务。 账户余额不足而导致扣费失败。 公安冻结场景。 冻结期间,负载均衡器会受以下影响: ELB不再进行流量转发,解冻后流量会逐渐恢复。 健康检查停止,健康检查显示的状态为冻结前一刻的状态,解冻后健康检查会恢复。 监控数据会停止上报,解冻后恢复。 负载均衡器冻结后,以下API行为将会被禁止。 不允许修改负载均衡器除了名称、标签以外的字段。 如果是公安冻结场景,负载均衡器不允许删除;负载均衡器下的子资源,如监听器、后端服务器组、健康检查、转发策略、转发规则、后端服务器等均不允许增删改。 父主题: 计费FAQ
  • 解决方法 分析慢SQL日志以及CPU使用率指标来定位效率低的查询,再优化查询效率低的语句。 查看慢SQL日志来确定是否存在运行缓慢的SQL查询以及各个查询的性能特征(如果有),从而定位查询运行缓慢的原因。 查询PostgreSQL日志,请参见查询慢日志。 查看华为云关系型数据库实例的CPU使用率指标,协助定位问题。 请参见通过Cloud Eye监控。 创建只读实例专门负责查询。减轻主实例负载,分担数据库压力。 多表关联查询时,关联字段要加上索引。 尽量避免用select*语句进行全表扫描,可以指定字段或者添加where条件。
  • 开通单Proxy和多Proxy的区别 单proxy,即一个MySQ L实例 下只有1个Proxy实例,通过一个读写分离的连接地址实现读写请求的自动转发,写请求自动访问主实例,读请求按照读权重设置自动访问各个实例。 多proxy,一个MySQL实例下可以创建多个Proxy实例,最多支持创建4个,主要适用于业务隔离场景。 读写模式:代理连接主实例,可以在主实例上配置读权重,写请求自动发往主实例。 只读模式:代理不连接主实例,读请求无法分配到主实例上,写请求报错。 不同的应用服务通过连接不同的代理,代理连接指定的只读实例,实现不同应用服务之间的读请求最终转发到不同的只读实例上,保证相互之间无影响,实现业务隔离。 一个MySQL只读实例可以被不同代理连接,但通常建议只有一个代理分配流量到该只读实例上。
  • 操作步骤 在“实例管理”页面,单击目标实例或只读实例名称,进入“基本信息”页面,可通过单击实例名称前的查看到只读实例。 在“存储空间”模块,单击“存储空间自动扩容”。 图1 查看存储空间 在“存储空间自动扩容”弹框,设置如下参数: 图2 设置存储空间自动扩容 表1 参数说明 类别 说明 存储空间自动扩容 存储空间自动扩容开关。 可用存储空间率 当可使用存储空间百分比小于等于该阈值时或者10GB时,会触发自动扩容。 存储自动扩容上限 自动扩容上限:40~10000,单位:GB。需要大于等于实例当前存储空间总大小。 单击“确定”。
  • 约束限制 RDS for MySQL 5.6、5.7、8.0版本的主备实例支持备机可用区迁移功能。其中,RDS for MySQL 5.6和5.7版本的本地盘实例备机可用区迁移,以及8.0版本的备机可用区迁移功能需要联系客服人员申请权限。 业务高峰期批量写操作可能会导致迁移失败,为确保迁移成功,请选择业务低峰期操作。 迁移期间将短暂停止DDL语句和event定时任务,请选择业务低峰期操作,避免业务异常中断。 关于区域和可用区的详情,请参见区域和可用区。
  • 常见问题 问题:近一天空间增长异常如何处理? 解决方法:设置诊断阈值后如果出现近一天空间增长异常,需要检查表空间碎片,及时回收碎片,尽量不使用DELEDTE清空数据。如有其他疑问请提交工单联系客服为您解答。 问题:无主键表对数据库的影响是什么? 解决方法:无主键表在数据库运行中会导致慢SQL,从而影响实例的稳定性。建议为无主键表添加主键,减少主从复制时延。 问题:无索引表对数据库的影响是什么? 解决方法:无索引表在数据库运行中会导致慢SQL,从而影响实例的稳定性。建议为表字段添加对应索引,提升查询效率。
  • 云审计 服务支持的漏洞管理服务操作列表 通过云审计服务,用户可以记录与漏洞管理服务相关的操作事件,便于日后的查询、审计和回溯。 开启了云审计服务后,系统开始记录漏洞管理服务资源的操作。 云审计服务管理控制台保存最近7天的操作记录,查看云审计日志操作请参考查看审计事件。 云审计服务支持的漏洞管理服务操作列表如表1所示。 表1 云审计服务支持的漏洞管理服务操作列表 操作名称 资源类型 事件名称 网站 创建域名 domain createDomain 删除域名 domain deleteDomain 编辑域名 domain editDomain 免认证/一键认证 domain authenticateDomain 快捷认证 domain authorizeDomain 创建 漏洞扫描 任务 scan createScanTask 创建内部漏洞扫描任务 scan createInnerScanTask 重启漏洞扫描任务 scan restartScanTask 取消漏洞扫描任务 scan cancelScanTask 编辑漏洞扫描任务 scan editScanTask 创建订阅套餐 resource createPurchaseOrder 更新订阅套餐 resource createAlterOrder 批量更新订阅套餐 resource createBatchAlterOrder 新用户注册 resource createVSSResource 删除监测任务 monitor deleteMonitorJob 暂停监测任务 monitor pauseMonitorJob 恢复监测任务 monitor resumeMonitorJob 忽略漏洞 vuln addVulnFalsePositive 取消忽略漏洞 vuln deleteVulnFalsePositive 生成网站扫描报告 report generateWebScanReport 下载网站扫描报告 report downloadWebScanReport 主机 添加主机 host addHost 删除主机 host deleteHost 编辑主机 host editHost 更换分组 host changeHostGroup 新增主机组 host addHostGroup 编辑主机组 host editHostGroup 删除主机组 host deleteHostGroup 创建主机扫描任务 scan createHostScanTask 取消主机扫描任务 scan cancelHostScanTask 添加跳板机 jumper saveJumperServer 编辑跳板机 jumper editJumperServer 删除跳板机 jumper deleteJumperServer 添加smb授权 credential saveSmbCredential 编辑smb授权 credential editSmbCredential 删除smb授权 credential deleteSmbCredential 添加ssh授权 credential saveSshCredential 编辑ssh授权 credential editSshCredential 删除ssh授权 credential deleteSshCredential 添加租户委托 tenant addTenantAgency 删除租户委托 tenant deleteTenantAgency 清空资源 cleanup resourcesCleanUp 忽略漏洞 vuln addVulnFalsePositive 取消忽略漏洞 vuln deleteVulnFalsePositive 生成主机扫描报告 report generateHostScanReport 下载主机扫描报告 report downloadHostScanReport 父主题: 云审计服务支持的关键操作
  • 如何开发网关 网关是一个特殊的设备,除具备一般设备功能之外,还具有子设备管理、子设备消息转发的功能。SDK提供了AbstractGateway抽象类来简化网关的实现。该类提供了子设备管理功能,需要从平台获取子设备信息并保存(需要子类提供子设备持久化接口)、子设备下行消息转发功能(需要子类实现转发处理接口)、以及上报子设备列表、上报子设备属性、上报子设备状态、上报子设备消息等接口。 使用AbstractGateway类 继承该类,在构造函数里提供子设备信息持久化接口,实现其下行消息转发的抽象接口: 1 2 3 4 5 6 7 public abstract void onSubdevCommand(String requestId, Command command); public abstract void onSubdevPropertiesSet(String requestId, PropsSet propsSet); public abstract void onSubdevPropertiesGet(String requestId, PropsGet propsGet); public abstract void onSubdevMessage(DeviceMessage message); iot-gateway-demo代码介绍 工程iot-gateway-demo基于AbstractGateway实现了一个简单的网关,它提供tcp设备接入能力。关键类: SimpleGateway:继承自AbstractGateway,实现子设备管理和下行消息转发 StringTcpServer:基于netty实现一个TCP server,本例中子设备采用TCP协议,并且首条消息为鉴权消息 SubDevicesFilePersistence:子设备信息持久化,采用json文件来保存子设备信息,并在内存中做了缓存 Session:设备会话类,保存了设备id和TCP的channel的对应关系 SimpleGateway类 添加或删除子设备处理 添加子设备:AbstractGateway的onAddSubDevices接口已经完成了子设备信息的保存。我们不需要再增加额外处理,因此SimpleGateway不需要重写onAddSubDevices接口 删除子设备:我们不仅需要修改持久化信息,还需要断开当前子设备的连接。所以我们重写了onDeleteSubDevices接口,增加了拆链处理,然后调用父类的onDeleteSubDevices。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @Override public int onDeleteSubDevices(SubDevicesInfo subDevicesInfo) { for (DeviceInfo subdevice : subDevicesInfo.getDevices()) { Session session = nodeIdToSesseionMap.get(subdevice.getNodeId()); if (session != null) { if (session.getChannel() != null) { session.getChannel().close(); channelIdToSessionMap.remove(session.getChannel().id().asLongText()); nodeIdToSesseionMap.remove(session.getNodeId()); } } } return super.onDeleteSubDevices(subDevicesInfo); } 下行消息处理 网关收到平台下行消息时,需要转发给子设备。平台下行消息分为三种:设备消息、属性读写、命令。 设备消息:这里我们需要根据deviceId获取nodeId,从而获取session,从session里获取channel,就可以往channel发送消息。在转发消息时,可以根据需要进行一定的转换处理。 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 @Override public void onSubdevMessage(DeviceMessage message) { //平台接口带的都是deviceId,deviceId是由nodeId和productId拼装生成的,即 //deviceId = productId_nodeId String nodeId = IotUtil.getNodeIdFromDeviceId(message.getDeviceId()); if (nodeId == null) { return; } //通过nodeId获取session,进一步获取channel Session session = nodeIdToSesseionMap.get(nodeId); if (session == null) { log.error("subdev is not connected " + nodeId); return; } if (session.getChannel() == null){ log.error("channel is null " + nodeId); return; } //直接把消息转发给子设备 session.getChannel().writeAndFlush(message.getContent()); log.info("writeAndFlush " + message); } 属性读写: 属性读写包括属性设置和属性查询。 属性设置: 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 @Override public void onSubdevPropertiesSet(String requestId, PropsSet propsSet) { if (propsSet.getDeviceId() == null) { return; } String nodeId = IotUtil.getNodeIdFromDeviceId(propsSet.getDeviceId()); if (nodeId == null) { return; } Session session = nodeIdToSesseionMap.get(nodeId); if (session == null) { return; } //这里我们直接把对象转成string发给子设备,实际场景中可能需要进行一定的编解码转换 session.getChannel().writeAndFlush(JsonUtil.convertObject2String(propsSet)); //为了简化处理,我们在这里直接回响应。更合理做法是在子设备处理完后再回响应 getClient().respondPropsSet(requestId, IotResult.SUC CES S); log.info("writeAndFlush " + propsSet); } 属性查询: 1 2 3 4 5 6 7 @Override public void onSubdevPropertiesGet(String requestId, PropsGet propsGet) { //不建议平台直接读子设备的属性,这里直接返回失败 log.error("not supporte onSubdevPropertiesGet"); deviceClient.respondPropsSet(requestId, IotResult.FAIL); } 命令:处理流程和消息类似,实际场景中可能需要不同的编解码转换。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 @Override public void onSubdevCommand(String requestId, Command command) { if (command.getDeviceId() == null) { return; } String nodeId = IotUtil.getNodeIdFromDeviceId(command.getDeviceId()); if (nodeId == null) { return; } Session session = nodeIdToSesseionMap.get(nodeId); if (session == null) { return; } //这里我们直接把command对象转成string发给子设备,实际场景中可能需要进行一定的编解码转换 session.getChannel().writeAndFlush(JsonUtil.convertObject2String(command)); //为了简化处理,我们在这里直接回命令响应。更合理做法是在子设备处理完后再回响应 getClient().respondCommand(requestId, new CommandRsp(0)); log.info("writeAndFlush " + command); } 上行消息处理 上行处理在StringTcpServer的channelRead0接口里。如果会话不存在,需要先创建会话: 如果子设备信息不存在,这里会创建会话失败,直接拒绝连接 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 @Override protected void channelRead0(ChannelHandlerContext ctx, String s) throws Exception { Channel incoming = ctx.channel(); log.info("channelRead0" + incoming.remoteAddress() + " msg :" + s); //如果是首条消息,创建session //如果是首条消息,创建session Session session = simpleGateway.getSessionByChannel(incoming.id().asLongText()); if (session == null) { String nodeId = s; session = simpleGateway.createSession(nodeId, incoming); //创建会话失败,拒绝连接 if (session == null) { log.info("close channel"); ctx.close(); } } 如果会话存在,则进行消息转发: 1 2 3 4 5 6 7 else { //如果需要上报属性则调用reportSubDeviceProperties DeviceMessage deviceMessage = new DeviceMessage(s); deviceMessage.setDeviceId(session.getDeviceId()); simpleGateway.reportSubDeviceMessage(deviceMessage, null); } 到这里,网关的关键代码介绍完了,其他的部分看源代码。整个demo是开源的,用户可以根据需要进行扩展。比如修改持久化方式、转发中增加消息格式的转换、实现其他子设备接入协议。 iot-gateway-demo的使用 在平台上为网关注册开户。 修改StringTcpServer的main函数,替换构造参数,然后运行该类。 1 2 3 simpleGateway = new SimpleGateway(new SubDevicesFilePersistence(), "ssl://iot-acc.cn-north-4.myhuaweicloud.com:8883", "5e06bfee334dd4f33759f5b3_demo", "mysecret"); 在平台上看到该网关在线后,添加子设备。 此时网关上日志打印: 2023-01-05 19:14:32 INFO SubDevicesFilePersistence:83 - add subdev: 456gefw3fh 运行TcpDevice类,建立连接后,输入子设备的nodeId。 此时网关设备日志打印: 2023-01-05 19:15:13 INFO StringTcpServer:118 - channelRead0/127.0.0.1:60535 msg :subdev2 2023-01-05 19:15:13 INFO SimpleGateway:68 - create new session okSession{nodeId='456gefw3fh', channel=[id: 0x42c9dc24, L:/127.0.0.1:8080 - R:/127.0.0.1:60535], deviceId='5e06bfee334dd4f337589c1de_subdev2'} 在平台上看到子设备上线。 子设备上报消息 查看日志看到上报成功 查看消息跟踪 在平台上找到网关,选择 设备详情-消息跟踪,打开消息跟踪。继续让子设备发送数据,等待片刻后看到消息跟踪:
  • 业务迁移 设备有对接设备发放(设备适配了设备发放能力)。如果设备第一次发放成功接入后,根据业务需要重新接入到新的实例,可以通过再次发放动态修改接入地址。 本场景涉及的功能也适用于多个商用环境间的迁移。 设备没有对接设备发放。对于设备预置的是设备接入的地址,根据业务需要,需要更改设备的接入实例(比如共享实例往专享实例迁移,设备从测试环境往商用环境迁移),可以通过设备发放实现设备的业务迁移。 具体使用示例参考设备数据迁移。 本场景涉及的功能也适用于多个商用环境间的迁移。
  • 动态完成不同批次设备初始化配置 当不同型号的设备在首次连接设备接入时需要具备不同的初始化状态,可以通过设备发放完成不同批次设备初始化配置。 具体使用示例参考: MQTT 密钥设备使用静态策略发放示例 MQTT 密钥设备使用静态策略发放是设备预注册的场景,需要为每个设备预置初始化的值。 MQTT 注册组静态策略发放示例 MQTT 注册组静态策略发放是设备注册组的场景,只需要为注册组设置一个初始化的值,那么对应这个组的设备都可以收到下发的初始化配置。一般来说:设备初始化配置会配合注册组使用。
  • 和其他服务的关系 设备发放服务与其他服务的关系如表1所示。 表1 与其他服务的关系 交互功能 相关服务 位置 创建设备时,需要使用 设备接入服务 创建的产品 设备接入服务(IoT Device Access,IoTDA) 创建产品 创建自定义策略时需要使用函数 函数工作流 服务(FunctionGraph) 创建并初始化函数 创建证书策略使用云证书时,需要去 云证书管理服务 创建云证书 云证书管理 服务(Cloud Certificate Manager Service,CCM) 创建私有CA 父主题: 设备发放
  • 使用限制 设备发放服务具有以下使用限制。 对象 类别/描述 限制 设备 集成Agent Lite的设备(MQTT) 不支持 原生MQTT协议设备 支持,设备需要开发设备引导接口,具备设备发放能力。 集成LiteOS的设备(LwM2M) 支持 证书 数字证书保证系统内各服务及系统与外部通信的安全性,防止通信数据在传输过程被篡改造成安全风险。 100 策略 自定义策略最多可添加的实例数 10 静态策略最多可添加的实例数 20 证书策略最多可添加的实例数 20 父主题: 设备发放
  • 前提条件 已收到购买的智能企业网关设备。 已获取设备对应的ESN。 电子标签用来标识设备的硬件信息,包括序列号、生产日期、设备型号、硬件描述信息等。智能企业网关设备的电子标签存在新旧两种,对应设备序列号(ESN)的拼接规则也不同。 老款标签:仅包含SN编号,SN编号即为设备ESN。 新款标签:包含SN编号和PN编号,用户需要将PN编号和SN编号按照一定的组合规则拼接为设备ESN。 因此,在进行激活操作时,用户需要按照实际情况,输入正确的SN编号(必填)和PN编号(选填),系统将自动拼接出对应的设备ESN。
  • 典型组网 本节以企业分支访问华为云单个VPC场景为例,介绍IEG设备侧的典型组网。 表1 典型组网 组网场景 组网说明 组网图 组网配置 设备直挂LAN侧动态(DHCP)上云 适用于企业分支/门店等新建网络场景,IEG设备作为企业分支内网关使用,直接连接二层交换机。 IEG设备支持单机和双机部署,对于本地可靠性高的用户可以在站点部署双机。 单机直挂LAN侧动态(DHCP)上云 双机直挂LAN侧动态(DHCP)上云 设备直挂静态路由上云 适用于企业分支/门店等新建网络场景,IEG设备通过静态路由协议与三层交换机对接。 单机直挂静态路由上云 双机直挂静态路由上云 设备旁挂静态路由上云 适用于客户网络已部署并运行业务,在不改变现有组网情况下实现快速上云的场景。 IEG设备连接现有的路由器设备,采用静态路由对接,将需要访问华为云的流量引导到IEG设备侧,其他流量仍沿原有路径转发。 单机旁挂静态路由上云 双机旁挂静态路由上云 设备旁挂动态路由(OSPF)上云 适用于客户网络已部署并运行业务,在不改变现有组网情况下实现快速上云的场景。 IEG设备连接现有的路由器设备,且IEG设备、现有路由器分别启用OSPF协议,打通LAN侧网络,将需要访问华为云的流量引导到IEG设备侧,其他流量仍沿原有路径转发。 单机旁挂动态路由(OSPF)上云 双机旁挂动态路由(OSPF)上云 设备直挂客户端上云和上网 适用于企业分支/门店等新建网络场景,站点上网环境简单,PC直接连接IEG设备,同时访问云上服务和Internet服务。 单机直挂客户端上云和上网 设备LAN侧多个子网上云和上网 适用于企业分支/门店等新建网络场景,IEG设备LAN需要划分多个子网,且多子网可以同时访问云上服务和Internet服务。 单机直挂LAN侧多个子网上云和上网
共100000条