华为云用户手册

  • PostgreSQL为源同步场景 表1 源库是否包含无日志表(UN LOG GED TABLE) 预检查项 源库包含无日志表(UNLOGGED TABLE)。 描述 检查源库包含无日志表(UNLOGGED TABLE),若存在无日志表,则导致同步失败。 待确认提示及处理建议 待确认原因:源数据库包含无日志表(UNLOGGED TABLE),对无日志表的修改不会记录日志, 因此进入增量同步后,UNLOGGED类型的表将无法同步增量数据。 处理建议:请确认这些无日志表是否需要同步增量数据,如果需要,请将这些表的UNLOGGED属性去掉,参考命令:ALTER TABLE TABLE_NAME SET LOGGED。
  • 场景描述 全量迁移或同步期间DRS任务报错,日志提示信息:service DATAMOVE failed, cause by: retry structures failed events=the fail structures are [type=constraint_data, index=106, schema_name=%s, object_name=%s]reason:[Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys]
  • 场景描述 全量迁移或同步期间DRS任务报错,日志提示信息:service DATAMOVE failed, cause by: apply data of table=`%s`.`%s` failed: The MySQL server is running with the --super-read-only option so it cannot execute this statement。
  • 处理建议 修改源数据库或者目标数据库字符集。 数据库为MySQL时,可通过以下方式进行修改: 如果为自建的数据库,可通过命令行方式修改。 通过以下命令查看数据库的字符集。 SHOW VARIABLES LIKE "character_set_server"\G; 使用命令修改服务器的字符集。 SET character_set_server='utf8'; 如果为RDS for MySQ L实例 ,可通过修改数据库“character_set_server”参数实现,详情请参考“修改实例参数”章节。 数据库为PostgreSQL时,可通过以下方式修改: 如果为自建的数据库,可通过命令行方式修改。 通过以下命令查看数据库的字符集。 show server_encoding; 使用命令修改服务器的字符集。 set server_encoding='utf8'; 如果为RDS for PostgreSQL实例,可通过修改数据库“server_encoding”参数实现,详情请参考“修改实例参数”章节。 更多其他类型数据库修改字符集参数的方法,可参考对应数据库的使用说明。
  • MySQL迁移场景 表1 源端是否存在触发器或事件 预检查项 源端是否存在触发器或事件。 描述 为了避免触发器或事件的自动触发机制导致非预期数据操作,从而引起两边数据的不一致,DRS任务将在用户结束任务时启动触发器或事件的迁移,如果您在任务运行中,关闭或断开了源数据库连接,则会导致触发器或事件未迁移。 待确认提示及处理建议 待确认原因:源数据库存在触发器或事件。 处理建议:此警告仅为迁移操作提示,请您先结束任务后再断开源端网络,则可确保迁移完整性。
  • MongoDB迁移场景 表1 源数据库索引(_id)检查 预检查项 源数据库索引(_id)检查。 描述 检查源库是否存在没有索引(_id)的集合,若存在,则导致迁移失败。 待确认提示及处理建议 不通过原因:源数据库存在没有索引(_id)的集合。 处理建议:针对源数据库没有索引(_id)的集合手动添加索引,参考命令:db.集合名.ensureIndex({_id: 1}),如果创建索引不通过提示有重复的索引(_id)值,则不支持该集合的迁移。
  • 目标库实例是否正常 表1 目标库实例是否正常 预检查项 目标库实例是否正常。 描述 检查目标库主实例和只读实例状态是否正常,若存在异常的实例,会导致迁移失败。 不通过提示及处理建议 不通过原因:目标库状态异常。 处理建议:请检查状态异常的目标库实例。 不通过原因:目标数据库的只读实例异常。 处理建议:请检查状态异常的目标只读实例。 不通过原因:RDS服务异常,请稍后重试。 处理建议:请稍后重试。 父主题: 目标库实例状态检查
  • 场景描述 全量迁移期间DRS任务报错,日志提示信息:service DATAMOVE failed, cause by: retry structures failed events=the fail structures are [type=function, index=2, schema_name=%s, object_name=%s]reason:[Access denied; you need (at least one of) the SUPER privilege(s) for this operation]
  • 场景描述 全量同步期间DRS任务报错,同步日志界面提示:service DATAMOVE failed, cause by: source engine postgresql client initialize failed, detail: Unable to connect to DBMS: url=%s/position3.0?client_encoding=UTF-8&ssl=false&sslmode=prefer user=%s, Caused by: Connection to %s refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
  • 场景描述 全量同步期间DRS任务报错,同步日志界面提示:service DATAMOVE failed, cause by: target engine postgresql client initialize failed, detail: Unable to connect to DBMS: url=%s/position3.0?client_encoding=UTF-8&autosave=always&stringtype=unspecified&ssl=false&sslmode=prefer user=%s, Caused by: ERROR: invalid locale name: 'Chinese (Simplified)_China.936'
  • 可能原因 报错信息中包含detail:Read timed out:DRS启动任务后,DRS增量抓取在源端数据库创建逻辑复制槽时由于长事务阻塞,或者创建逻辑复制槽的过程中数据库未找到一致性位点,等待创建超时。 报错信息中包含slot [***] is active: DRS启动任务后,DRS增量抓取在源端数据库创建逻辑复制槽时由于长事务阻塞,复制槽未创建成功,此时状态会显示被占用(active),DRS自动重试时会出现此类报错。
  • Microsoft SQL Server为源同步场景 表4 目标数据库是否存在与源数据库同名的对象 预检查项 目标数据库是否存在与源数据库同名的对象。 描述 校验用户提供的目标数据库是否存在与源数据库同名的对象。 选择同步表结构的情况下,目标库不能存在与源数据库同名的。 不选择同步表结构的情况下,目标库需提前创建对应的表结构。 不通过提示及处理建议 不通过原因:目标库表不存在,无法进行同步。 处理建议:不同步表结构时,目标库上需提前创建表或者选择同步表结构。 目标库建表语句参考: CREATE TABLE table_name (column_name data_type); 不通过原因:需要同步的表在目标库的映射已存在。 处理建议:返回同步设置中,重新选择其他表进行同步,或者修改表映射名称 不通过原因:需要同步的映射表在目标库中不存在。 处理建议:勾选同步表结构以创建库表,或者在目标库中创建对应的表结构,若已创建,请检查规定的映射名称是否正确。
  • 场景描述 全量或增量阶段,DRS迁移或同步任务报错,日志提示信息:service %s failed, cause by: Unable to connect to DBMS: url=***?useUnicode=true&allowLoadLocalInfile=false&characterEncoding=UTF-8&connectTimeout=5000&useSSL=false&allowPublicKeyRetrieval=true&verifyServerCertificate=false&serverTimezone=UTC user=%s, Caused by: Access denied for user %s
  • 场景描述 全量迁移或同步期间DRS任务报错,日志提示信息:service DATAMOVE failed, cause by: apply event=[type=table_data, batch_index_in_shard=1, table_schema=%s, table_name=%s, record_num=5] occur error, msg=apply data of table=`%s`.`%s` failed: Unknown column '%s' in 'field list'。
  • 注意事项 Binlog功能当前为beta版本,受限商用,如需使用请联系技术支持。 当前仅8.3.0.100及以上版本支持HStore和HStore-opt记录Binlog功能。 目前 GaussDB (DWS)只有Hstore表支持Binlog功能,表需要包含主键且设置enable_binlog=on。 消费的Binlog表名不要带有特殊字符,如.、""等。 如果多个任务消费同一张表的Binlog数据,需要保证每个任务的binlogSlotName唯一。 为了达到最高的消费速度,建议将任务的并发度和DWS集群DN数设置一致。 使用dws-connector-flink工具的Sink能力来写入Binlog数据的话,如果需要保证DN内的数据写入顺序则需要设置connectionSize的值为1;如果源端有更新主键操作或需要进行聚合计算的话,需要将ignoreUpdateBefore设置为false,否则不建议设置将ignoreUpdateBefore设置为false。
  • 数据同步示例 GaussDB(DWS)侧: 新建binlog表时,enable_hstore_binlog_table参数需要设置为true,可以通过show enable_hstore_binlog_table来查询。 -- 源表(产生binlog) 1 CREATE TABLE test_binlog_source(a int, b int, c int, primary key(a, b)) with(orientation=column, enable_hstore=on, enable_binlog=true); -- 目标表 1 CREATE TABLE test_binlog_sink(a int, b int, c int, primary key(a, b)) with(orientation=column, enable_hstore=on); Flink侧: 执行如下命令进行完整数据同步: 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 CREATE TABLE test_binlog_source ( a int, b int, c int ) with ( 'connector' = 'dws', 'url' = 'jdbc:gaussdb://ip:port/gaussdb', 'binlog' = 'true', 'tableName' = 'test_binlog_source', 'binlogSlotName' = 'slot', 'username'='xxx', 'password'='xxx'); ​ CREATE TABLE test_binlog_sink ( a int, b int, c int) WITH ( 'connector' = 'dws', 'url' = 'jdbc:gaussdb://ip:port/gaussdb', 'tableName' = 'test_binlog_sink', 'ignoreUpdateBefore'='false', 'connectionSize' = '1', 'username'='xxx', 'password'='xxx'); ​ INSERT INTO test_binlog_sink select * from test_binlog_source;
  • Binlog相关参数说明 下表仅涉及消费Binlog时的参数。 表1 消费Binlog时的参数 参数 说明 数据类型 默认值 binlog 是否读取Binlog信息 Boolean false binlogSlotName 槽位信息,可以理解一个标识。由于可能存在多个Flink任务同时消费同一张表的Binlog信息,所以该场景需要保证每个任务的binlogSlotName不同。 String Flink映射表的表名 binlogBatchReadSize 批量读取binlog的数据行数 Integer 5000 fullSyncBinlogBatchReadSize 全量读取binlog的数据行数 Integer 50000 binlogReadTimeout 增量消费Binlog数据时超时时间,单位毫秒 Integer 600000 fullSyncBinlogReadTimeout 全量消费Binlog数据时超时时间,单位毫秒 Long 1800000 binlogSleepTime 实时消费不到Binlog数据时休眠时间,单位毫秒。如果连续读取不到Binlog数据,则休眠时间为:binlogSleepTime * 次数,最大为binlogMaxSleepTime。读取到数据后,则重置。 Long 500 binlogMaxSleepTime 实时消费不到Binlog数据时最大休眠时间,单位毫秒。 Long 10000 binlogMaxRetryTimes 消费Binlog数据出错后的重试次数。 Integer 1 binlogRetryInterval 消费binlog数据出错后的重试时间间隔。重试时sleep时间:binlogRetryInterval * (1~binlogMaxRetryTimes) +Random(100)。单位毫秒。 Long 100 binlogParallelNum 消费Binlog数据时线程数,只有任务并发度小于DWS集群DN数时,该参数才有效,即此时一个并发度会消费多个DN上的数据,所以可以考虑设置该参数。 Integer 3 connectionPoolSize JDBC连接池连接大小 Integer 5
  • Binlog格式与原理 表1 binlog字段格式 字段名称 字段类型 含义 sync_point BIGINT Binlog系统字段,表示该记录的同步点值,普通GTM模式下,该值唯一且有序。 event_sequence BIGINT Binlog的系统字段, 用于表示同一事务类操作的先后顺序。 type CHAR Binlog的系统字段, 表示当前记录的操作类型。 type可能有以下几种取值: 'I' 即INSERT, 表示当前Binlog是插入一条新记录。 'd' 即DELETE,表示当前Binlog是删除一条记录。 'B' 即BEFORE_UPDATE,表示当前Binlog是更新前的记录。 'U'即AFTER_UPDATE,表示当前Binlog是更新后的记录。 user_column_1 用户列 用户的自定义数据列 ... ... ... usert_column_n 用户列 用户的自定义数据列
  • 开启Binlog 通过在建HStore表时指定表级参数enable_binlog,开启HStore表的Binlog功能。 1 2 3 4 5 6 7 8 9 10 CREATE TABLE hstore_binlog_source ( c1 INT PRIMARY KEY, c2 INT, c3 INT ) WITH ( ORIENTATION = COLUMN, enable_hstore=true, enable_binlog=on, binlog_ttl = 86400 );
  • 约束与限制 Binlog功能当前为beta版本,受限商用,如需使用请联系技术支持。 当前仅8.3.0.100及以上版本支持HStore和HStore-opt记录Binlog功能。 使用Binlog的前置条件是必须存在主键约束,并且为HStore或Hstore-opt表,分布方式只能是Hash分布。 Binlog表仅记录insert/delete/update(upsert)等DML操作进行记录,不会记录DDL。 当前Binlog表不支持的操作: Insert overwrite、修改分布列、给临时表开启Binlog、exchange/merge/split partition。 当前Binlog表并不限制用户进行以下DDL操作,但进行操作后会导致增量数据与同步点位信息会被清空,需要评估后再执行: ADD COLUMN 增加列、DROP COLUMN 删除列、SET TYPE 修改列、VACUUM FULL 重整数据、TRUNCATE 清空表数据。 Binlog表在线扩容期间会等待Binlog记录的消费,只有Binlog记录消费完毕后才可以继续进行接下来的扩缩容步骤,默认等待时间为1小时,可通过binlog_consume_timeout来设置,如果等待超时或者等待出错都会退出扩缩容过程,认为该表扩缩容失败。 Binlog表在备份恢复期间,仅会被当做普通HStore表进行备份,恢复后辅助表的增量数据与同步点信息会清空,需要重新开始同步。
  • 方案优势 无需设置弹性公网IP,节省网络带宽成本 API网关可通过手动创建的负载通道或者导入CCE的工作负载生成的负载通道,访问CCE中工作负载的地址。 API网关可通过手动创建的负载通道或者导入CCE的工作负载生成的负载通道,动态监测工作负载下所有实例的地址变化,并自动更新到负载通道中。 支持通过CCE工作负载标签配置进行灰度发布,完成灰度测试与版本切换。 提供多种认证方式,增加访问安全性。 提供访问流量控制策略,增加后端服务的安全性 与直接访问容器应用相比,API网关提供流量控制,确保后端服务稳定运行。 支持多实例负载均衡,合理利用资源,增加系统可靠性。
  • 应用场景 云容器引擎(Cloud Container Engine,即CCE)中的工作负载,以及微服务,可通过API网关将服务能力以API形式对外开放。 开放CCE工作负载支持以下两种方式,推荐使用方式一直接创建负载通道的方式开放CCE工作负载: 方式一 在API网关中直接创建负载通道,通过负载通道访问CCE工作负载中的实例地址,动态监测工作负载下实例IP地址变化。开放API时使用负载通道访问后端服务,通过API的形式将云容器应用的服务能力开放出来。 方式二 一键式导入CCE工作负载,自动生成API和负载通道,API与相应生成的负载通道绑定,动态监测工作负载下实例IP地址变化。通过API的形式开放云容器引擎中的工作负载以及微服务等能力。
  • 创建E CS 进入云服务器控制台。 单击“购买弹性云服务器”。 基础配置后,单击“下一步:网络配置”。 表9 基础配置 参数 配置说明 计费模式 选择“按需计费”。 区域 选择弹性云服务器所属区域,且与VPC2同一区域。 可用区 选择弹性云服务器所属可用区。 CPU架构 默认“x86计算”。 规格 根据业务规划,选择规格。 镜像 根据业务规划,选择镜像。 虚拟私有云 选择已创建的虚拟私有云“VPC2”。 主网卡 选择已创建的虚拟私有云的子网。 安全组 选择专享版实例中已创建的安全组。 弹性公网IP 选择“暂不购买”。 云服务器名称 填写弹性云服务器名称,建议您按照一定的命名规则填写,方便您快速识别和查找。 登录凭证 登录云服务器凭证,此处默认“密码”。 用户名 默认“root”。 密码 填写登录云服务器的密码。 确认密码 保证密码正确性。 企业项目 此处选择“default”。 同意协议声明后,单击“立即购买”。
  • 创建实例 进入API网关控制台。 在左侧导航栏选择“实例管理”。 单击“购买实例”。 表3 实例信息 参数 配置说明 计费模式 选择实例的计费模式,此处选择“按需计费”。 区域 选择实例所在的区域,且与VPC1同区域。 可用区 选择实例所在的可用区,此处选择“可用区1”。 实例名称 填写实例的名称,根据规划自定义。建议您按照一定的命名规则填写实例名称,方便您快速识别和查找。 实例规格 选择实例的容量规格,实例创建后规格不可修改,此处选择“专业版”。 可维护时间窗 选择技术支持对实例进行维护的时间段,建议选择业务量较少的时间段,保持默认设置“22:00:00---02:00:00”。 企业项目 选择实例所属的企业项目,保持默认设置“default”。 网络 选择已创建的虚拟私有云“VPC1”和子网。 安全组 单击“管理安全组”,创建安全组,企业项目选择“default”后,即可创建。 描述 填写实例的描述信息。 单击“立即购买”。 规格确认无误后,勾选用户协议和隐私政策的阅读并同意声明。开始创建实例,界面显示创建进度。
  • 操作流程 假设您对一个API有如下的流控诉求: 默认API流量限制为10次/60秒,用户流量限制为5次/60秒。 对请求头Header字段为“Host=www.abc.com”的限制为10次/60秒。 对请求方法为get且请求路径为“reqPath= /list”的限制为10次/60秒。 对请求路径为“reqPath= /fc”的限制为10次/60秒。 对特殊租户Special Renter的流量限制为5次/60秒。 您可以根据以下操作流程为API创建并绑定流量控制2.0策略。 创建策略 填写流量控制2.0策略基本信息。 配置基础流控 配置基础流量控制。 配置参数流控 开启参数流控配置开关,定义参数和规则配置参数流量控制。 配置特殊流控 开启特殊流控配置开关,特殊凭据与特殊租户流量控制的使用场景。 绑定API 流量控制2.0策略绑定到API。 验证 通过相应的请求URL调用API,验证流量控制2.0策略是否生效。 父主题: 使用APIG专享版的流量控制2.0策略实现API的精细流控
  • 迁移可能带来的影响 公网出入口的变化 专享版实例可以根据需要分别开启公网入口和公网出口,每个实例都会有单独的公网入口IP和公网出口IP,该IP与原有的共享版IP不同,如果上游和下游(服务端和客户端)的相关服务有网络安全策略的设置,需要修改相应的网络安全策略,放通对应IP的访问。 内网出入口的变化 每个专享版实例都会拥有一个VPC内的入口私有IP,以及VPC内的多个出口私有IP(专享实例的基础版、专业版、企业版,以及铂金版分别有3、5、6、7个私有地址。在铂金版的基础上,铂金版X依次增加4个私有地址。),上下游服务(服务端和客户端)需要酌情调整网络安全策略,保证网络可达。如果下游存在跨VPC调用的场景时,需要通过 VPC终端节点 对接到APIG专享版的VPC终端节点服务上,以保证网络可达。具体操作详见实施步骤。 调试 域名 的变化 原共享版的分组调试域名{group-id}.apig.{region-id}.huaweicloudapis.com将会更新为{group-id}.apic.{region-id}.huaweicloudapis.com,如果有使用调试域名进行API调用的,则需要做相应修改。
  • 应用场景 当在公网中调用APIG上公开的业务API时,如果不限制API调用的次数,随着用户的不断增加,会引起后端性能的下降,甚至会因为恶意用户发送的大量请求导致网站或程序崩溃。APIG提供了传统策略:流量控制,从API、用户、凭据、源IP等多个维度进行流控。 然而,随着用户多样性以及需求多样性的增加,传统流控策略无法满足更加精细的流量控制场景。比如针对某一请求参数的流控或者某一租户的流控,APIG在传统流量控制策略的基础上提供了插件策略:流量控制2.0,通过制定更加精细的方案来进行流控。 以下将以流量控制2.0为例,进行实践说明,讲述如何通过创建流量控制2.0策略来应对不同场景的网关限流。
  • 约束与限制 API添加流量控制2.0策略相当于流量控制2.0策略同步绑定了API。同一个环境中,一个API只能被一个流量控制2.0策略绑定,但一个流量控制2.0策略可以绑定多个API。(使用前提是绑定的API已发布。) 如果API未绑定流量控制2.0策略,流控限制值为实例“配置参数”中“ratelimit_api_limits”的参数运行值。 如果一个API绑定传统流量控制策略后,继续绑定流量控制2.0策略,传统流量控制策略会失效。 参数流控的规则最多可定义100个。 策略内容最大长度65535。 如果您的实例不支持流量控制2.0,请联系技术支持。
  • 方案优势 流量控制2.0策略可以限制单位时间内API的被调用次数,支持基础流控、参数流控和基于基础流控的特殊流控。 基础流控:可以对API、用户、凭据、源IP进行多维度流控,与已有的流量控制策略说明功能一致,但配置方式不兼容。 参数流控:支持根据Header、Path、Method、Query以及系统变量中的参数值进行自定义流控。 基于基础流控的特殊流控:对某个租户或凭证进行特定的流控。 支持从用户、凭据和时间段等不同的维度限制对API的调用次数。 支持按天以及按时分秒粒度的流量控制。
  • 操作流程 创建函数 创建自定义的前端函数,使用函数服务开发自定义认证。 创建自定义认证 创建自定义认证,类型选择“前端”,函数地址选择上一步创建的函数。 创建API 安全配置中的安全认证选择APP认证,并勾选“支持双重认证”,选择上一步创建的自定义认证。 创建凭据 使用APP认证的API,需要在API网关中创建一个凭据,生成凭据ID和密钥对(Key、Secret)。 绑定API 将创建的凭据绑定API后,才可以使用APP认证调用API。 验证 调用API,验证双重认证是否设置成功。 父主题: 使用APIG的APP认证和自定义认证实现API的双重认证
共100000条