华为云用户手册

  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 access_ak_sk_models Array of AccessAkskVO objects ak/sk数据模型。 表3 AccessAkskVO 参数 参数类型 描述 id Integer ak/sk的id。 gmt_create String ak/sk的生成时间。 gmt_modify String ak/sk的修改时间。 inner_domain_id Integer 内部租户id。 ak String 生成的ak。 sk String 生成的sk。 status String ak/sk的状态。 descp String ak/sk的描述信息。 gmt_create_timestamp Integer ak/sk的生成时间戳。 gmt_modify_timestamp Integer ak/sk的修改时间戳。
  • 增值特性 编译构建服务提供了构建加速包增值特性。 构建加速服务通过解析构建工程的内部依赖关系,将构建任务拆解分发至多个执行机并发执行,结合增量编译技术,实现对软件编译过程的效率提升,支撑企业研发过程的快速迭代,缩短产品的上市周期。 表1 构建加速包 计费方式 包年/包月 适用场景 编译构建服务提供了构建加速能力,使用构建加速能力前需购买构建加速包。构建加速场景请参考构建加速。 构建加速包只支持执行主机为“内置执行机”的构建任务,可选择x86或arm。构建主机配置方法请参考构建环境配置。 构建加速包提供三种加速级别,请根据需要选择。 L1级别:对于C/C++的工程,典型的编译过程是CPU消耗型任务,编译效率受限于编译并发度,编译并发度受限于单机资源规格,传统的单机构建模式很难突破资源规格的瓶颈。L1级别通过分布式编译技术,将单机编译任务分发到后台算力资源上进行编译,支持远超单机资源核数的并发数,突破单机资源规格的限制,从而实现提升编译效率的目标。 L2级别:对于大多数开发过程,构建之间只有少量代码变更,除去更新的部分外,其余的代码编译均为重复构建。L2级别通过增量构建提升编译效率,在编译过程中对编译结果进行缓存,下次编译时通过对源码的变更来判断是否可以命中缓存,通过缓存大幅减少重复编译任务的执行,从而实现提升编译效率的目标。 L3级别:L3级别同时提供分布式编译和增量编译的能力,对于没有变化的代码提供增量编译,对于变化的代码提供分布式编译,最大限度地提升构建效率。 说明: 构建加速LI级别/L2级别/L3级别均包含64vCPU算力。 购买限制 购买构建加速包前,须完成CodeArts基础版及以上规格套餐或CodeArts Build套餐的购买。 构建加速包的单次购买上限为16个。 计费公式 单价*数量*购买时长 计费周期 根据购买时长确定(以UTC+8时间为准)。一个计费周期的起点是您开通或续费构建加速包的时间(精确到秒),终点则是到期日的23:59:59。 例如,如果您在2023/03/08 15:50:04购买时长为一个月的构建加速包,那么其计费周期为:2023/03/08 15:50:04 ~ 2023/04/08 23:59:59。 变更配置 构建加速包不支持变更配置。若完成购买后发现配置有误,需退订后重新购买。 到期后影响 构建加速包到期未续费时,该构建加速包中包含的并发数将失效。 父主题: 计费模式
  • 包年/包月资源 对于包年/包月计费模式的资源,例如包年/包月的CodeArts Build套餐、包年/包月的云硬盘等,用户在购买时会一次性付费,服务将在到期后自动停止使用。 如果在计费周期内不再使用包年/包月编译构建服务,您可以执行退订操作。CodeArts Build套餐、资源扩展、增值特性均支持退订。系统将根据资源是否属于五天无理由退订、是否使用代金券和折扣券等条件返还一定金额到您的账户。详细的退订规则请参见云服务退订规则概览。 如果您已开启“自动续费”功能,为避免继续产生费用,请在自动续费扣款日(默认为到期前7日)之前关闭自动续费。
  • 场景1 在编译构建服务中,构建任务是构建的最小单元,对于以下构建场景,构建任务可能并不能满足构建要求。例如: 多仓工程需要分布到多个机器上去构建,并且构建工程之间还存在一定的依赖关系。 希望更模块化、更加细粒度地拆分构建任务,并按照依赖顺序进行构建。 对于上述构建场景,编译构建服务支持使用BuildFlow将多个存在依赖关系的构建任务按照有向无环图(DAG)的方式组装起来,BuildFlow将会按照构建的依赖关系并发进行构建。 此场景下,需要编译构建多任务并发执行。构建并发数计算方式示例如下: 构建任务A中包括4个子任务,启动构建任务A,此时任务并发数为4。 父任务(构建任务A)不会占用一个并发。 构建并发包为租户级别,一个并发包资源同时只能由一个构建任务使用。
  • 已开通旧版本编译构建服务,能否转换为新版本计费? 本章节仅供老用户参考。 已购买包周期套餐的用户,套餐到期后,您可以选择继续购买CodeArts Build包月套餐。 开通旧版按需计费的用户,仍延续旧版按需计费规则,您也可以选择购买包月套餐,开始使用新版本计费。 旧版套餐计费方式详情请参考CodeArts旧版计费方式说明,旧版编译构建服务关闭方式请参考关闭服务。 开通/购买套餐需要您拥有租户账号,或拥有Tenant Administrator权限的 IAM 用户账号,配置权限策略方法请参考创建用户组并授权。 父主题: 计费FAQ
  • GaussDB 分布式版为源使用须知 出云: GaussDB分布式版同步到MySQL GaussDB分布式版同步到Oracle GaussDB分布式版同步到GaussDB(DWS) GaussDB分布式版同步到Kafka GaussDB分布式版同步到GaussDB分布式版 GaussDB分布式版同步到GaussDB主备版 自建-自建: GaussDB分布式版同步到Oracle GaussDB分布式版同步到Kafka GaussDB分布式版同步到GaussDB分布式版
  • GaussDB主备版为源使用须知 出云: GaussDB主备版同步到MySQL GaussDB主备版同步到Oracle GaussDB主备版同步到GaussDB(DWS) GaussDB主备版同步到Kafka GaussDB主备版同步到GaussDB分布式版 GaussDB主备版同步到GaussDB主备版 自建-自建: GaussDB主备版同步到Oracle GaussDB主备版同步到Kafka GaussDB主备版同步到GaussDB主备版
  • GaussDB(for MySQL)为源使用须知 入云: GaussDB(for MySQL)同步到GaussDB(for MySQL) 出云: GaussDB(for MySQL)同步到MySQL GaussDB(for MySQL)同步到GaussDB(DWS) GaussDB(for MySQL)同步到Kafka GaussDB(for MySQL)同步到 CSS /ES GaussDB(for MySQL)同步到Oracle
  • 修订记录 发布日期 修订记录 2024-05-16 第十一次正式发布。 本次变更说明如下: 在产品功能和企业路由器工作原理等章节,增加DGW连接内容。 2023-10-23 第十次正式发布。 本次变更说明如下: 在什么是企业路由器、应用场景和产品功能等章节,修改云连接中心网络的内容。 2023-08-08 第九次正式发布。 本次变更说明如下: 在什么是企业路由器、产品功能和企业路由器工作原理等章节,增加支持CFW的说明。 2023-06-30 第八次正式发布。 本次变更说明如下: 在什么是企业路由器、产品功能和企业路由器工作原理等章节,增加支持ECN的说明。 2023-06-01 第七次正式发布。 本次变更说明如下: 在约束与限制章节,增加约束限制和解决建议。 2023-04-20 第六次正式发布。 本次变更说明如下: 在产品功能和约束与限制章节,增加流日志功能。 2022-11-15 第五次正式发布。 本次变更说明如下: 在责任共担~监控安全风险章节,增加安全性内容。 2022-10-30 第四次正式发布。 本次变更说明如下: 企业路由器正式商用,在什么是企业路由器章节,修改原有说明。 在企业路由器工作原理章节,增加企业路由器使用方法。 在约束与限制章节,修改企业路由器配额,并增加功能约束与限制。 2022-08-30 第三次正式发布。 本次变更说明如下: 在什么是企业路由器章节,修改公测说明,将ER接入DC不再需要提工单。 2022-05-31 第二次正式发布。 本次变更说明如下: 在什么是企业路由器章节,增加支持VPN的说明。 2022-03-30 第一次正式发布。
  • 修订记录 发布日期 修订记录 2024-05-16 第十一次正式发布。 本次变更说明如下: 在在企业路由器中添加DGW连接、删除DGW连接、关联概述、传播概述、路由概述和路由策略概述等章节,增加支持DGW连接的说明。 2024-04-25 第十次正式发布。 本次变更说明如下: 根据控制台风格变化修改全文截图。 2024-03-15 第九次正式发布。 本次变更说明如下: 在创建企业路由器和在企业路由器中添加VPC连接等章节,增加标签策略说明。 2023-10-23 第八次正式发布。 本次变更说明如下: 在创建企业路由器、连接概述和删除Peering连接等章节,修改云连接中心网络的内容。 2023-08-08 第七次正式发布。 本次变更说明如下: 在连接概述、关联概述、传播概述和路由概述等章节,增加支持CFW的说明。 在在企业路由器中添加VPC连接章节,修改创建连接截图。 2023-06-30 第六次正式发布。 本次变更说明如下 在连接概述、关联概述、传播概述和路由概述等章节,增加支持ECN的说明。 2023-04-20 第五次正式发布。 本次变更说明如下: 在流日志章节,增加流日志内容。 2023-01-13 第四次正式发布。 本次变更说明如下: 在路由概述、创建静态路由和修改静态路由章节,增加黑洞路由相关说明。 2022-10-30 第三次正式发布。 本次变更说明如下: 在在企业路由器中添加VPC连接章节,修改ER接入子网的参数说明。 增加删除VPN连接章节。 在连接概述、关联概述和传播概述章节,增加VPN描述。 全文增加企业路由器控制台截图。 2022-05-31 第二次正式发布。 本次变更说明如下: 在创建企业路由器和支持审计的关键操作章节,删除企业路由器规格相关说明。 2022-03-30 第一次正式发布。
  • 标签的使用约束 每个标签由“标签键”和“标签值”组成,“标签键”和“标签值”的命名规则如下: “标签键”: 不能为空。 最大长度不超过36个字符。 由英文字母、数字、下划线、中划线组成。 “标签值”: 可以为空。 最大长度不超过43个字符。 由英文字母、数字、下划线、点、中划线组成。 每个云资源最多可以添加20个标签。 对于每个云资源,每个“标签键”都必须是唯一的,每个“标签键”只能有一个“标签值”。
  • 标签的基本知识 标签用于标识资源,当您拥有相同类型的许多云资源时,可以使用标签按各种维度(例如用途、所有者或环境)对云资源进行分类。 标签的工作方式如图1所示。在此示例中,您为每个云资源分配了两个标签,每个标签都包含您定义的一个“键”和一个“值”,一个标签使用键为“所有者”,另一个使用键为“用途”,每个标签都拥有相关的值。 您可以根据为云资源添加的标签快速搜索和筛选特定的云资源。例如,您可以为账号中的资源定义一组标签,以跟踪每个云资源的所有者和用途,使资源管理变得更加轻松高效。 图1 企业路由器标签示例
  • 使用须知 DRS全量+增量同步过程一般包含四个阶段:任务启动阶段、全量阶段、增量阶段、结束任务阶段。为了确保同步各个阶段的平顺,在创建同步任务前,请务必阅读以下使用须知。 表4 使用须知 类型名称 使用和操作约定 任务启动前须知 源数据库参数要求: 源数据库模式必须设置为FULL模式。 源数据库必须开启SQL Server Agent代理服务。 源数据库若开启客户端配置中的“强制协议加密(Force Protocol Encrypton)”,必须同时开启“信任服务器证书(trust server certificate)”,如下图1所示: 图1 查看客户端属性 源数据库对象要求: 源库中不允许存在被禁用的表的聚簇索引,否则会导致同步失败。 源库中不允许存在名称为cdc的用户名或schema。 源库待同步对象的库名、schema名、表名只能包含如下字符:字母、数字、下划线和中划线,库名长度不能超过64个字符。 源库待同步对象的表中列名不能包含如下字符:[]?。 目标数据库对象要求: 目标数据库实例必须有足够的磁盘空间。 除了SQL Server系统数据库之外,目标数据库不能包含与源数据库同名的数据库。 其他使用须知: 不支持源数据库主备切换,源数据库主备切换会导致同步任务失败。 不支持源数据库Microsoft SQL Server为TLS 1.0、TLS 1.1协议的同步,如果需要同步,建议源库升级到TLS 1.2及以上版本。 不建议在数据库中使用日期类型做主键,因存在精度损失,该特性影响DRS增量场景下对 UPDATE、DELETE语句的同步。 SQL Server为源的增量同步基于SQL Server提供的CDC能力,如果SQL Server源库的CDC功能出现异常(如被关闭、事务日志满等情况),则增量同步就会受到影响。 目标数据库为Oracle兼容模式时,会将写入的空字符串作为NULL处理,源数据库存在空字符串且具有非空约束时,会导致写入失败。 DRS全量同步表结构时,目标库存在与某用户名称同名的schema,用其他用户进行同步表结构到schema时,需要使用grant [role] to [role]的方式为此用户赋权,否则可能因为无法创建表结构而导致同步失败。 对象名同步到目标库后会转换成小写,因此选择的源库表中不能存在表名称字母相同但大小写不同的表,否则会导致同步失败。 全量同步过程须知 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿在源库执行任何DDL,否则可能导致数据不一致或任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 增量同步过程须知 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 不支持DDL操作,源数据库进行的DDL操作不会同步到目标数据库。 不支持大数据类型image、text、ntext的删除操作。 不支持delete和update目标端主键类型为blob、text、clob、nclob、bytea的表。 单增量任务再编辑增加同步对象时,在子任务变更结束前,不建议对新增同步的表进行DML操作,否则可能导致部分数据无法同步到目标数据库。 同步对比须知 建议在源库的业务低峰期进行数据比对,防止误报不一致数据,以及减少对源库和DRS任务的冲击。 在增量同步过程中做对比时,源库若存在写入,则对比结果可能不一致。 不支持在全量同步过程中做对比。 不支持数据对比过程中做限速。
  • 使用须知 DRS全量+增量同步过程一般包含四个阶段:任务启动阶段、全量阶段、增量阶段、结束任务阶段(单全量任务则包含三个阶段)。为了确保同步各个阶段的平顺,在创建同步任务前,请务必阅读以下使用须知。 表4 使用须知 类型名称 使用和操作约定 任务启动前须知 源数据库参数要求: 源数据库的分区表触发器不可以设置为disable。 全量同步支持源库备机状态,但需要设置hot_standby_feedback为on;增量同步不支持源库备机状态。 若要做增量同步: 源数据库的“pg_hba.conf” 文件中包含如下的配置: host replication all 0.0.0.0/0 md5 源数据库参数wal_level必须配置为logical。 源数据库需提前安装test_decoding插件。 源数据库中无主键表的replica identity属性必须为full。 源数据库的max_replication_slots参数值必须大于当前已使用的复制槽数量。 源数据库的max_wal_senders参数值必须等于或大于max_replication_slots参数值。 源数据库中表的主键列toast属性为main、external、extended时,其replica identity属性必须为full。 源数据库对象要求: 同步对象依赖和关联的对象也须一起同步,否则可能导致同步失败。 说明: 常见的关联关系:主外键关联表、表继承子表引用父表、表分区子分区表引用分区表、表自增列引用序列等。 目标数据库参数要求: 目标数据库参数max_prepared_transactions须大于源数据库。 目标数据库参数max_worker_processes须大于源数据库。 目标数据库参数max_locks_per_transaction须大于源数据库。 目标数据库参数max_connections须大于源数据库。 目标数据库和源数据库的lc_monetary参数值必须一致。 目标数据库对象要求: 目标数据库的字符集必须与源数据库一致。 目标数据库的时区设置必须与源数据库一致。 同步的表要禁用外键,因为DRS并行回放会使得不同表之间的写入顺序和源库不一致,可能会触发外键约束限制,造成同步失败。 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。 目标端多的列要求非空且没有默认值,源端insert数据,同步到目标端后多的列为null,不符合目标端要求。 目标端多的列设置固定默认值,且有唯一约束。源端insert多条数据后,同步到目标端后多的列为固定默认值,不符合目标端要求。 其他使用须知: 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建同步任务。 暂不支持级联单向同步,例如从实例A同步到实例B,再从实例B同步到实例C。 分区表只同步主表,转为普通表同步到目标库,分区表的数据将集中写入主表。 模式名或表名映射时,为防止索引和约束名冲突,同步后表上的原索引名称将变为此格式:i_+哈希值+原索引名(可能被截断)+_key。其中哈希值由“原模式名_原表名_原索引名”计算得到。同理,表上的原约束名将变为:c_+哈希值+原约束名(可能被截断)+_key。 对于全量+增量和增量任务,启动任务前,请确保源库中未启动长事务,源库启动长事务会阻塞逻辑复制槽的创建,进而引发任务失败。 对于全量+增量和增量任务,任务启动后,仅支持以下版本的源库发生主备倒换:源库为RDS for PostgreSQL 12.6及以上的小版本、RDS for PostgreSQL 13及以上版本的所有小版本。 DRS全量同步表结构时,源库中的character、character varying类型长度在目标库会按照字节长自动扩大(因为目标库为字节长),默认扩大4倍,最大长度为10485760。 DRS全量同步表结构时,目标库存在与某用户名称同名的schema,用其他用户进行同步表结构到schema时,需要使用grant [role] to [role]的方式为此用户赋权,否则可能因为无法创建表结构而导致同步失败。 对象名同步到目标库后不进行大小写转换。 源数据库的唯一索引是表达式索引时,全量同步阶段目标数据库GaussDB分布式可能会因为无法创建该索引而导致任务失败。 全量同步过程须知 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿在源库执行任何DDL,否则可能导致数据不一致或任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 增量同步过程须知 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿修改源数据库表的主键或者唯一键(主键不存在时),否则可能导致增量数据不一致或任务失败。 请勿修改源数据库中表的replica identity属性,否则可能导致增量数据不一致或任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 库级同步时,源库新增无主键表时,请务必同时将该无主键表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。 库级同步时,源库新增主键表时,如果主键列toast属性为main、external、extended时,请务必同时将该表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。 同步对比使用须知 建议在源库的业务低峰期进行数据比对,防止误报不一致数据,以及减少对源库和DRS任务的冲击。 在增量同步过程中做对比时,源库若存在写入,则对比结果可能不一致。 不支持在全量同步过程中做对比。 不支持数据对比过程中做限速。 结束任务须知 正常结束任务: 全量+增量实时同步任务正常结束时,将自动删除任务在源库创建的流复制槽。 强制结束任务: 强制结束全量+增量实时同步任务,需要手动删除源库可能残留的复制槽,可参考PostgreSQL为源强制结束任务章节的指导进行操作。 逻辑复制槽命名规则为“drs_唯一性标识”,其中唯一性标识需要将任务node id中的“-”替换为“_”获取。node id可在DRS任务同步日志页面查看task node id is ***日志找到。
  • 使用建议 DRS任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 为保证同步前后数据一致性,确保同步期间目标数据库无业务写入。 数据库同步与环境多样性和人为操作均有密切关系,为了确保同步的平顺,建议您在进行正式的数据库同步之前进行一次演练,可以帮助您提前发现问题并解决问题。 基于以下原因,建议您在启动任务时选择“稍后启动”功能,将启动时间设置在业务低峰期,相对静止的数据可以有效提升一次性同步成功率,避免同步对业务造成性能影响。 在网络无瓶颈的情况下,全量同步会对源数据库增加约50MB/s的查询压力,以及占用2~4个CPU。 正在同步的数据被其他事务长时间锁死,可能导致读数据超时。 DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。 全量阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独占锁操作。 更多DRS对数据库的影响,可参考DRS对源数据库和目标数据库有什么影响。 数据对比 建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。
  • 使用须知 DRS全量+增量同步过程一般包含四个阶段:任务启动阶段、全量阶段、增量阶段、结束任务阶段。为了确保同步各个阶段的平顺,在创建同步任务前,请务必阅读以下使用须知。 表4 使用须知 类型名称 使用和操作约定 任务启动前须知 源数据库参数要求: 源数据库模式必须设置为FULL模式。 源数据库必须开启SQL Server Agent代理服务。 源数据库若开启客户端配置中的“强制协议加密(Force Protocol Encrypton)”,必须同时开启“信任服务器证书(trust server certificate)”,如下图1所示: 图1 查看客户端属性 源数据库对象要求: 源库中不允许存在被禁用的表的聚簇索引,否则会导致同步失败。 源库中不允许存在名称为cdc的用户名或schema。 源库待同步对象的库名、schema名、表名只能包含如下字符:字母、数字、下划线和中划线,库名长度不能超过64个字符。 源库待同步对象的表中列名不能包含如下字符:[]?。 目标数据库对象要求: 目标数据库实例必须有足够的磁盘空间。 除了SQL Server系统数据库之外,目标数据库不能包含与源数据库同名的数据库。 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。 目标端多的列要求非空且没有默认值,源端insert数据,同步到目标端后多的列为null,不符合目标端要求。 目标端多的列设置固定默认值,且有唯一约束。源端insert多条数据后,同步到目标端后多的列为固定默认值,不符合目标端要求。 其他使用须知: 不支持源数据库主备切换,源数据库主备切换会导致同步任务失败。 不支持源数据库Microsoft SQL Server为TLS 1.0、TLS 1.1协议的同步,如果需要同步,建议源库升级到TLS 1.2及以上版本。 SQL Server为源的增量同步基于SQL Server提供的CDC能力,如果SQL Server源库的CDC功能出现异常(如被关闭、事务日志满等情况),则增量同步就会受到影响。 全量同步过程须知 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿在源库执行任何DDL,否则可能导致数据不一致或任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 增量同步过程须知 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 不支持DDL操作,源数据库进行的DDL操作不会同步到目标数据库。 不支持大数据类型IMAGE、TEXT、NTEXT的删除操作。 支持任务再编辑追加同步对象。 同步对比须知 建议在源库的业务低峰期进行数据比对,防止误报不一致数据,以及减少对源库和DRS任务的冲击。 在增量同步过程中做对比时,源库若存在写入,则对比结果可能不一致。 不支持在全量同步过程中做对比。 不支持数据对比过程中做限速。
  • 使用须知 DRS全量+增量同步过程一般包含四个阶段:任务启动阶段、全量阶段、增量阶段、结束任务阶段(单全量任务则包含三个阶段)。为了确保同步各个阶段的平顺,在创建同步任务前,请务必阅读以下使用须知。 表4 使用须知 类型名称 使用和操作约定 任务启动前须知 源数据库参数要求: 源数据库的分区表触发器不可以设置为disable。 全量同步支持源库备机状态,但需要设置hot_standby_feedback为on;增量同步不支持源库备机状态。 若要做增量同步: 源数据库的“pg_hba.conf” 文件中包含如下的配置: host replication all 0.0.0.0/0 md5 源数据库参数wal_level必须配置为logical。 源数据库需提前安装test_decoding插件。 源数据库中无主键表的replica identity属性必须为full。 源数据库的max_replication_slots参数值必须大于当前已使用的复制槽数量。 源数据库的max_wal_senders参数值必须等于或大于max_replication_slots参数值。 源数据库中表的主键列toast属性为main、external、extended时,其replica identity属性必须为full。 源数据库对象要求: 同步对象依赖和关联的对象也须一起同步,否则可能导致同步失败。 说明: 常见的关联关系:视图引用表、视图引用视图、主外键关联表、表继承子表引用父表、表分区子分区表引用分区表、表自增列引用序列等。 目标数据库参数要求: 目标数据库参数max_prepared_transactions须大于源数据库。 目标数据库参数max_worker_processes须大于源数据库。 目标数据库参数max_locks_per_transaction须大于源数据库。 目标数据库参数max_connections须大于源数据库。 目标数据库和源数据库的lc_monetary参数值必须一致。 目标数据库对象要求: 目标数据库的字符集必须与源数据库一致。 目标数据库的时区设置必须与源数据库一致。 同步的表要禁用外键,因为DRS并行回放会使得不同表之间的写入顺序和源库不一致,可能会触发外键约束限制,造成同步失败。 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。 目标端多的列要求非空且没有默认值,源端insert数据,同步到目标端后多的列为null,不符合目标端要求。 目标端多的列设置固定默认值,且有唯一约束。源端insert多条数据后,同步到目标端后多的列为固定默认值,不符合目标端要求。 其他使用须知: 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建同步任务。 暂不支持级联单向同步,例如从实例A同步到实例B,再从实例B同步到实例C。 分区表只同步主表,转为普通表同步到目标库,分区表的数据将集中写入主表。 模式名或表名映射时,为防止索引和约束名冲突,同步后表上的原索引名称将变为此格式:i_+哈希值+原索引名(可能被截断)+_key。其中哈希值由“原模式名_原表名_原索引名”计算得到。同理,表上的原约束名将变为:c_+哈希值+原约束名(可能被截断)+_key。 对于全量+增量和增量任务,启动任务前,请确保源库中未启动长事务,源库启动长事务会阻塞逻辑复制槽的创建,进而引发任务失败。 对于全量+增量和增量任务,任务启动后,仅支持以下版本的源库发生主备倒换:源库为RDS for PostgreSQL 12.6及以上的小版本、RDS for PostgreSQL 13及以上版本的所有小版本。 DRS全量同步表结构时,源库中的character、character varying类型长度在目标库会按照字节长自动扩大(因为目标库为字节长),默认扩大4倍,最大长度为10485760。 DRS全量同步表结构时,目标库存在与某用户名称同名的schema,用其他用户进行同步表结构到schema时,需要使用grant [role] to [role]的方式为此用户赋权,否则可能因为无法创建表结构而导致同步失败。 对象名同步到目标库后不进行大小写转换。 全量同步过程须知 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿在源库执行任何DDL,否则可能导致数据不一致或任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 增量同步过程须知 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿修改源数据库表的主键或者唯一键(主键不存在时),否则可能导致增量数据不一致或任务失败。 请勿修改源数据库中表的replica identity属性,否则可能导致增量数据不一致或任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 库级同步时,源库新增无主键表时,请务必同时将该无主键表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。 库级同步时,源库新增主键表时,如果主键列toast属性为main、external、extended时,请务必同时将该表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。 同步对比使用须知 建议在源库的业务低峰期进行数据比对,防止误报不一致数据,以及减少对源库和DRS任务的冲击。 在增量同步过程中做对比时,源库若存在写入,则对比结果可能不一致。 不支持在全量同步过程中做对比。 不支持数据对比过程中做限速。 结束任务须知 正常结束任务: 全量+增量实时同步任务正常结束时,将自动删除任务在源库创建的流复制槽。 强制结束任务: 强制结束全量+增量实时同步任务,需要手动删除源库可能残留的复制槽,可参考PostgreSQL为源强制结束任务章节的指导进行操作。 逻辑复制槽命名规则为“drs_唯一性标识”,其中唯一性标识需要将任务node id中的“-”替换为“_”获取。node id可在DRS任务同步日志页面查看task node id is ***日志找到。
  • 表映射 实时同步过程中,如果待同步的表在源数据库和目标数据库中的名称不同,可以使用实时同步提供的表映射功能进行表名映射。例如:将源数据库中的A表同步到目标数据库,变成目标数据库中的B表,此时就可以使用表映射功能来实现。 在“设定同步”页面,同步对象右侧已选对象框中,选择需要进行映射的表,单击“编辑”按钮。 图7 表映射 修改表名。 在“编辑表名”的弹出框中,填写新的表名,修改后的名称即为保存在目标数据库中的表名。 图8 修改表名 查看修改结果。 表名修改成功后,您会看到修改前的表名和修改后的新表名,至此,表示完成表映射的配置。 图9 查看表名修改结果
  • 使用须知 DRS全量+增量同步过程一般包含四个阶段:任务启动阶段、全量阶段、增量阶段、结束任务阶段。为了确保同步各个阶段的平顺,在创建同步任务前,请务必阅读以下使用须知。 表4 使用须知 类型名称 使用和操作约定 任务启动前须知 源数据库参数要求: 源数据库模式必须设置为FULL模式。 源数据库必须开启SQL Server Agent代理服务。 源数据库若开启客户端配置中的“强制协议加密(Force Protocol Encrypton)”,必须同时开启“信任服务器证书(trust server certificate)”,如下图1所示: 图1 查看客户端属性 源数据库对象要求: 源库中不允许存在被禁用的表的聚簇索引,否则会导致同步失败。 源库待同步对象的库名、schema名、表名只能包含如下字符:字母、数字、下划线和中划线,库名长度不能超过64个字符。 源库待同步对象的表中列名不能包含如下字符:[]?。 目标数据库对象要求: 目标数据库实例必须有足够的磁盘空间。 其他使用须知: 不支持源数据库主备切换,源数据库主备切换会导致同步任务失败。 不支持源数据库Microsoft SQL Server为TLS 1.0、TLS 1.1协议的同步,如果需要同步,建议源库升级到TLS 1.2及以上版本。 SQL Server为源的增量同步基于SQL Server提供的CDC能力,如果SQL Server源库的CDC功能出现异常(如被关闭、事务日志满等情况),则增量同步就会受到影响。 全量同步过程须知 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿在源库执行任何DDL,否则可能导致数据不一致或任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 增量同步过程须知 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 不支持DDL操作,源数据库进行的DDL操作不会同步到目标数据库。 不支持大数据类型IMAGE、TEXT、NTEXT的删除操作。 同步对比须知 建议在源库的业务低峰期进行数据比对,防止误报不一致数据,以及减少对源库和DRS任务的冲击。 在增量同步过程中做对比时,源库若存在写入,则对比结果可能不一致。 不支持在全量同步过程中做对比。 不支持数据对比过程中做限速。
  • 使用须知 DRS全量+增量同步过程一般包含四个阶段:任务启动阶段、全量阶段、增量阶段、结束任务阶段。为了确保同步各个阶段的平顺,在创建同步任务前,请务必阅读以下使用须知。 表4 使用须知 类型名称 使用和操作约定 任务启动前须知 源数据库参数要求: 源数据库模式必须设置为FULL模式。 源数据库必须开启SQL Server Agent代理服务。 源数据库若开启客户端配置中的“强制协议加密(Force Protocol Encrypton)”,必须同时开启“信任服务器证书(trust server certificate)”,如下图1所示: 图1 查看客户端属性 源数据库对象要求: 源库中不允许存在被禁用的表的聚簇索引,否则会导致同步失败。 源库中不允许存在名称为cdc的用户名或schema。 源库待同步对象的库名、schema名、表名只能包含如下字符:字母、数字、下划线和中划线,库名长度不能超过64个字符。 源库待同步对象的表中列名不能包含如下字符:[]?。 目标数据库对象要求: 目标数据库实例必须有足够的磁盘空间。 除了SQL Server系统数据库之外,目标数据库不能包含与源数据库同名的数据库。 其他使用须知: 不支持源数据库主备切换,源数据库主备切换会导致同步任务失败。 不支持源数据库Microsoft SQL Server为TLS 1.0、TLS 1.1协议的同步,如果需要同步,建议源库升级到TLS 1.2及以上版本。 不建议在数据库中使用日期类型做主键,因存在精度损失,该特性影响DRS增量场景下对 UPDATE、DELETE语句的同步。 SQL Server为源的增量同步基于SQL Server提供的CDC能力,如果SQL Server源库的CDC功能出现异常(如被关闭、事务日志满等情况),则增量同步就会受到影响。 目标数据库为Oracle兼容模式时,会将写入的空字符串作为NULL处理,源数据库存在空字符串且具有非空约束时,会导致写入失败。 DRS全量同步表结构时,目标库存在与某用户名称同名的schema,用其他用户进行同步表结构到schema时,需要使用grant [role] to [role]的方式为此用户赋权,否则可能因为无法创建表结构而导致同步失败。 对象名同步到目标库后会转换成小写,因此选择的源库表中不能存在表名称字母相同但大小写不同的表,否则会导致同步失败。 全量同步过程须知 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿在源库执行任何DDL,否则可能导致数据不一致或任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 增量同步过程须知 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 不支持DDL操作,源数据库进行的DDL操作不会同步到目标数据库。 不支持大数据类型image、text、ntext的删除操作。 不支持delete和update目标端主键类型为blob、text、clob、nclob、bytea的表。 单增量任务再编辑增加同步对象时,在子任务变更结束前,不建议对新增同步的表进行DML操作,否则可能导致部分数据无法同步到目标数据库。 同步对比须知 建议在源库的业务低峰期进行数据比对,防止误报不一致数据,以及减少对源库和DRS任务的冲击。 在增量同步过程中做对比时,源库若存在写入,则对比结果可能不一致。 不支持在全量同步过程中做对比。 不支持数据对比过程中做限速。
  • 使用须知 DRS全量+增量同步过程一般包含四个阶段:任务启动阶段、全量阶段、增量阶段、结束任务阶段(单全量任务则包含三个阶段)。为了确保同步各个阶段的平顺,在创建同步任务前,请务必阅读以下使用须知。 表4 使用须知 类型名称 使用和操作约定 任务启动前须知 源数据库参数要求: 源数据库的分区表触发器不可以设置为disable。 全量同步支持源库备机状态,但需要设置hot_standby_feedback为on;增量同步不支持源库备机状态。 若要做增量同步: 源数据库的“pg_hba.conf” 文件中包含如下的配置: host replication all 0.0.0.0/0 md5 源数据库参数wal_level必须配置为logical。 源数据库需提前安装test_decoding插件。 源数据库中无主键表的replica identity属性必须为full。 源数据库的max_replication_slots参数值必须大于当前已使用的复制槽数量。 源数据库的max_wal_senders参数值必须等于或大于max_replication_slots参数值。 源数据库中表的主键列toast属性为main、external、extended时,其replica identity属性必须为full。 源数据库对象要求: 同步对象依赖和关联的对象也须一起同步,否则可能导致同步失败。 说明: 常见的关联关系:主外键关联表、表继承子表引用父表、表分区子分区表引用分区表、表自增列引用序列等。 目标数据库参数要求: 目标数据库的block_size参数值必须大于源库中的对应参数值。 目标数据库对象要求: 目标库不可以包含,与待同步对象类型相同且名称相同的对象,包括库、模式、表等。系统库、系统模式、系统表等除外。 目标数据库的字符集必须与源数据库一致。 目标数据库的时区设置必须与源数据库一致。 同步的表要禁用外键,因为DRS并行回放会使得不同表之间的写入顺序和源库不一致,可能会触发外键约束限制,造成同步失败。 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。 目标端多的列要求非空且没有默认值,源端insert数据,同步到目标端后多的列为null,不符合目标端要求。 目标端多的列设置固定默认值,且有唯一约束。源端insert多条数据后,同步到目标端后多的列为固定默认值,不符合目标端要求。 其他使用须知: 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建同步任务。 分区表只同步主表,转为普通表同步到目标库,分区表的数据将集中写入主表。 表名映射时,同步后表上的原索引名称变化为如下格式,其中哈希值由“原模式名_原表名_映射后模式名_映射后表名_原索引名”计算得到:i_+哈希值+原索引名(可能被截断)+_key。 表名映射时,同步后表上的原约束名称变化为如下格式,其中哈希值由“原模式名_原表名_映射后模式名_映射后表名_原约束名”计算得到:c_+哈希值+原约束名(可能被截断)+_key。 对于全量+增量和增量任务,启动任务前,请确保源库中未启动长事务,源库启动长事务会阻塞逻辑复制槽的创建,进而引发任务失败。 对于全量+增量和增量任务,任务启动后,仅支持以下版本的源库发生主备倒换:源库为RDS for PostgreSQL 12.6及以上的小版本、RDS for PostgreSQL 13及以上版本的所有小版本。 DRS全量同步表结构时,源库中的character、character varying类型长度在目标库会按照字节长自动扩大(因为目标库为字节长),默认扩大4倍,最大长度为10485760。 全量同步过程须知 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿在源库执行任何DDL,否则可能导致数据不一致或任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 增量同步过程须知 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿修改源数据库表的主键或者唯一键(主键不存在时),否则可能导致增量数据不一致或任务失败。 请勿修改源数据库中表的replica identity属性,否则可能导致增量数据不一致或任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 库级同步时,源库新增无主键表时,请务必同时将该无主键表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。 库级同步时,源库新增主键表时,如果主键列toast属性为main、external、extended时,请务必同时将该表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。 同步对比使用须知 建议在源库的业务低峰期进行数据比对,防止误报不一致数据,以及减少对源库和DRS任务的冲击。 在增量同步过程中做对比时,源库若存在写入,则对比结果可能不一致。 不支持在全量同步过程中做对比。 不支持数据对比过程中做限速。 结束任务须知 正常结束任务: 全量+增量实时同步任务正常结束时,将自动删除任务在源库创建的流复制槽。 强制结束任务: 强制结束全量+增量实时同步任务,需要手动删除源库可能残留的复制槽,可参考PostgreSQL为源强制结束任务章节的指导进行操作。 逻辑复制槽命名规则为“drs_唯一性标识”,其中唯一性标识需要将任务node id中的“-”替换为“_”获取。node id可在DRS任务同步日志页面查看task node id is ***日志找到。
  • java mongo客户端 前提条件 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。 curl ip:port 返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。 参考MongoDB兼容性列表,下载兼容数据库实例版本的mongo jar包。 在弹性云服务器上安装jdk。 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。 连接代码 用keytool工具手动生成trustStore: // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全; // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String password = System.getenv("EXAMPLE_PASSWORD_ENV"); keytool -import -file /var/chroot/mongodb/CA/ca.crt -keystore /home/Mike/jdk1.8.0_112/jre/lib/security/mongostore -storetype pkcs12 -storepass ${password} “/var/chroot/mongodb/CA/ca.crt”为根证书路径。 “/home/Mike/jdk1.8.0_112/jre/lib/security/mongostore”为生成的trustStore的路径。 SSL开启 import java.util.ArrayList; import java.util.List; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; import com.mongodb.client.MongoDatabase; import com.mongodb.client.MongoCollection; import com.mongodb.MongoClientURI; import com.mongodb.MongoClientOptions; public class MongoDBJDBC { public static void main(String[] args){ try { System.setProperty("javax.net.ssl.trustStore", "/home/Mike/jdk1.8.0_112/jre/lib/security/mongostore"); // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全; // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String password = System.getenv("EXAMPLE_PASSWORD_ENV"); System.setProperty("javax.net.ssl.trustStorePassword", password); ServerAddress serverAddress = new ServerAddress("ip", port); List addrs = new ArrayList(); addrs.add(serverAddress); // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全; // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String rwuserPassword = System.getenv("EXAMPLE_PASSWORD_ENV"); MongoCredential credential = MongoCredential.createScramSha1Credential("rwuser", "admin", rwuserPassword.toCharArray()); List credentials = new ArrayList(); credentials.add(credential); MongoClientOptions opts= MongoClientOptions.builder() .sslEnabled(true) .sslInvalidHostNameAllowed(true) .build(); MongoClient mongoClient = new MongoClient(addrs,credentials,opts); MongoDatabase mongoDatabase = mongoClient.getDatabase("testdb"); MongoCollection collection = mongoDatabase.getCollection("testCollection"); Document document = new Document("title", "MongoDB"). append("description", "database"). append("likes", 100). append("by", "Fly"); List documents = new ArrayList(); documents.add(document); collection.insertMany(documents); System.out.println("Connect to database successfully"); } catch (Exception e) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); } } } 样例代码: javac -cp .:mongo-java-driver-3.2.0.jar MongoDBJDBC.java java -cp .:mongo-java-driver-3.2.0.jar MongoDBJDBC SSL关闭 import java.util.ArrayList; import java.util.List; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; import com.mongodb.client.MongoDatabase; import com.mongodb.client.MongoCollection; import com.mongodb.MongoClientURI; import com.mongodb.MongoClientOptions; public class MongoDBJDBC { public static void main(String[] args){ try { ServerAddress serverAddress = new ServerAddress("ip", port); List addrs = new ArrayList(); addrs.add(serverAddress); // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全; // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String rwuserPassword = System.getenv("EXAMPLE_PASSWORD_ENV"); MongoCredential credential = MongoCredential.createScramSha1Credential("rwuser", "admin", rwuserPassword.toCharArray()); List credentials = new ArrayList(); credentials.add(credential); MongoClient mongoClient = new MongoClient(addrs,credentials); MongoDatabase mongoDatabase = mongoClient.getDatabase("testdb"); MongoCollection collection = mongoDatabase.getCollection("testCollection"); Document document = new Document("title", "MongoDB"). append("description", "database"). append("likes", 100). append("by", "Fly"); List documents = new ArrayList(); documents.add(document); collection.insertMany(documents); System.out.println("Connect to database successfully"); } catch (Exception e) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); } } }
  • 分片概念 分片是指将一个集合的数据,根据指定的shard key,相对均匀地分布保存在多个shard server上。这种指定了shard key的集合,称为分片集合。但是,如果并未对集合进行分片,则该集合的数据,只会全部存储在某一个shard server上。DDS集群模式允许分片集合和未分片集合在数据库中同时存在。 未分片的集合可以通过命令sh.shardCollection转为分片集合。对集合进行分片之前,需确保集合所属的数据库开启了分片功能,您可以通过命令sh.enableSharding开启分片功能。
  • dds mongos路由缓存机制 用户数据存储在shard server中,元数据存储在config server中。路由信息属于元数据信息,即存储在config server中。当用户通过dds mongos对集群进行数据访问时,dds mongos会根据config server中的路由信息,将用户请求发送到对应的shard server上,进行数据访问。 但是,如果dds mongos在每次处理数据访问时,都从config server获取路由信息,很大程度上会影响性能。因此,在实现机制上,添加了缓存机制:将config server的路由信息缓存在dds mongos本地。该场景下,不但在config server中会存储路由信息,dds mongos的本地缓存中也可能会缓存路由信息。 dds mongos中并不是一定会存在缓存的路由信息,如果dds mongos上没有进行过任何数据操作,就没有缓存信息。并且,dds mongos上缓存的路由信息,也不一定是最新的config server的路由信息。因为dds mongos上缓存的路由信息,不是实时或者定时刷新的,而是lazy模式,是在特定的场景下被动触发的,包含但可能不限于如下几种触发场景: dds mongos启动时,从config server获取最新的路由信息,并缓存在本地。 dds mongos第一次处理相关数据的请求:由于mongos本地没有缓存该相关数据的路由信息,将会触发更新相关的config server路由信息到dds mongos本地缓存的逻辑,在继续处理后续请求时,dds mongos已经缓存了相关数据的路由信息,会直接使用缓存中的路由信息来访问shard server。 在dds mongos上手工执行路由刷新命令。 被动触发dds mongos的路由缓存刷新,只是刷新用户请求涉及到的元数据信息,而非刷新缓存中的全部内容。 缓存刷新的范围以DB为单位。
  • 规避建议 MongoDB官方建议:在每次删除数据库或集合后,在所有mongos节点上,通过命令db.adminCommand("flushRouterConfig"),刷新路由。 参考链接: https://docs.mongodb.com/manual/reference/method/db.dropDatabase/index.html#replica-set-and-sharded-clusters https://jira.mongodb.org/browse/SERVER-17397 其他规避建议: 对于集群模式,建议开启数据库的分片功能,再对其中的集合进行分片。 对于未开启分片功能的数据库。在删除数据库或集合之后,不建议创建同名的数据库或集合。 如果因业务需求,需要创建同名的数据库或集合,请在删除数据库或集合之后,创建同名的数据库或集合之前,登录到所有的mongos节点上,执行刷新路由表的操作。
  • 使用场景 当未对数据进行分片时,若系统中存在多个dds mongos,通过不同的dds mongos进行数据访问时,可能出现不同dds mongos上本地缓存的路由信息不一致的情况。场景示例: 通过mongos1创建A数据库,未开启分片。写入数据1后,数据1被全部分到shard server1上存储。然后,在mongos2上对数据进行查询。此时,mongos1和mongos2上,均存在缓存的A数据库的路由信息。 通过mongos2执行了A数据库的删除操作。此时,config server和shard server1中的A数据库信息都被删掉。而mongos1无法识别数据1已经被删除。 通过mongos1向A数据库中写入数据2时,由于存在缓存,所以无法识别A数据库已经被删除的场景。参照已经存在的路由信息,数据2被存储到shard server1上。然后,通过mongos2向A数据库中写入数据3时,由于能够识别出A数据库已经被删除,所以会在config server和shard server2中生成新的A数据库的信息。 此时,mongos1和mongos2中缓存的路由信息不一致,关联不同的shard server,且仅能看到部分数据,导致数据异常。 图2 mongos缓存缺陷的场景 客户端通过不同mongos,所查询到的数据不同: mongos1:可以查到数据2,无法查询到数据3。 mongos2:可以查询到数据3,无法查询到数据2。
  • DDS节点脱节原理和说明 副本集架构由主节点、备节点和隐藏节点组成,DDS自动搭建三节点的副本集供用户使用,节点之间数据自动同步,保证数据的高可靠性。对于需要保证高可用的中小型业务系统,推荐使用副本集。 主节点:即Primary节点,用于读写请求。 备节点:即Secondary节点,用于读请求。 隐藏节点:即Hidden节点,用于业务数据的备份。 用户可以直接操作主节点和备节点。若主节点故障,系统自动分配新的主节点。副本集架构如下图所示。 图1 三节点副本集架构 DDS只能在主节点写入数据,主节点写入数据时,会同时生成oplog,Secondary和Hidden通过从主节点读取oplog进行回放,达到数据的最终一致。 oplog的存储量由oplogSize(默认磁盘容量的10%)决定。 主备时延是如何产生的? 如果主节点写入速度太快,超过备节点oplog的读取回放速度,此时就产生了主备时延。 何时会脱节? 因为oplog存储容量有限,如果到达容量上限,就会淘汰掉最早的oplog。备节点读取oplog,每次都会记录最后一条读取的oplog,如果主备时延达到一定程度,备节点发现上次回放的oplog点位已经被淘汰掉,此时备节点就无法继续读取oplog,说明备节点已经脱节。 如何有效防止备节点脱节? 业务需要设置majority级别的writeConcern写入数据,表示将数据写入到大多数节点。 适当增加oplog的存储空间上限,如需修改,可以通过控制台界面修改参数值oplogSizePercent,具体步骤请参见修改DDS实例参数。 将创建索引等耗时较长的DDL操作,以及数据备份操作放在业务低峰期执行,同时尽可能避免突发大量增删改操作。 如果没有以majority级别的writeConcern写入数据,发生主备倒换时,未同步到备节点的数据有丢失风险。
  • GeminiDB Redis是否支持多DB GeminiDB Redis的多DB功能已于2022年3月底上线,此前创建的实例暂不支持该功能,也不支持通过升级开启该功能。 使用GeminiDB Redis多DB功能时,您需要关注以下约束与限制: DB数支持的范围为0~999。 不支持swapdb命令。 dbsize结果非实时刷新,flushdb后dbsize返回的结果不会立刻降为0,会在一段时间后变为0。 不支持在Lua脚本中使用select和flushdb命令。 不支持在事务中使用select和flushdb命令。 暂不支持move命令。 父主题: 数据库使用
  • 存储容量满设置只读 为保护GeminiDB Redis实例的正常运行,在存储空间即将被写满的时候,数据库会被设置成只读状态,该状态下只支持数据的读取,不支持写入和更新,可以通过扩容存储容量来解除该状态,重新获得写入和更新的能力。 表1 磁盘满只读说明 存储容量 说明 小于600GB 存储容量使用率达到97%时,实例状态被设置为只读。 存储容量使用率下降到85%,实例自动解除只读状态。 大于或等于600GB 存储容量剩余空间小于18GB,实例状态被设置为只读。 存储容量剩余空间大于或等于90GB,实例自动解除只读状态。
  • 如何通过 域名 访问专享版APIG中注册的接口? 以域名www.test.com为例,具体请参考如下步骤。 图1 域名示例 登录API网关控制台,在左侧导航栏选择“专享版”,单击实例名称,进入“实例概览”页面,在“入口地址”区域查看“弹性IP地址”,获取APIG的访问地址(ip格式)。 图2 获取APIG访问地址 在DNS控制台,配置用户域名www.test.com解析到apig地址的ipv4规则,可参考网站解析至IP地址。 图3 配置ipv4规则 最后在函数服务配置该域名的解析配置(可参考FunctionGraph函数如何解析DNS内网域名),这样就能在函数中通过域名(www.test.com)访问专享版APIG中注册的接口了。 父主题: 通用问题
共100000条