云服务器内容精选

  • GaussDB 分布式数据库架构说明 图1 GaussDB分布式逻辑架构图 GaussDB分布式主要包含了OM、CM、GTM、CN和DN等模块,分布式版主要流程为业务应用下发SQL给CN ,SQL可以包含对数据的增(insert)、删(delete/drop)、改(update)、查(select)。CN利用数据库的优化器生成执行计划,下发给DN,每个DN会按照执行计划的要求去处理数据,处理完成后DN将结果集返回给CN进行汇总,最后CN将汇总后的结果返回给业务应用。 分布式形态能够支撑较大的数据量,且提供了横向扩展的能力,可以通过扩容的方式提高实例的数据容量和并发能力。扩容操作详见扩容实例。
  • 同步Topic和Partition策略说明 表3 Topic和Partition策略说明 Topic策略 对应可选的Partition策略 说明 集中投递到一个Topic: 对于源库业务量不大的场景,建议选择集中投递到一个Topic。 按库名.schema.表名的hash值投递到不同Partition 适用于单表的查询场景,可以提高单表读写性能,推荐使用此选项。 全部投递到Partition 0 适用于有事务要求的场景,写入性能比较差,如果没有强事务要求,不推荐使用此选项。 按表的主键值hash值投递到不同的Partition 适用于一个表一个Topic的场景,避免该表都写到同一个分区,消费者可以并行从各分区获取数据。 按库名.schema的hash值投递到不同Partition 适用于一个database一个topic的场景,避免多个schema下的数据都写到一个分区,消费者可以并行从各分区获取数据。 按库名.dn序号的hash值投递到不同Partition 适用于多个database对应一个topic,避免多个datanode下的数据都写到一个分区,消费者可以并行从各分区获取数据。 按表的非主键列值的hash值投递到不同的Partition 适用于一个表一个Topic的场景,避免该表都写到同一个分区,用户可以按照非主键列值的hash值自定义message key,消费者可以并行从各分区获取数据。 按库名-schema-表名自动生成Topic名字: 如果每张表数据量都非常大,建议选择自动生成Topic名字,按库名-schema-表名确定一个Topic。 全部投递到Partition 0 适用于有事务要求的场景,写入性能比较差,如果没有强事务要求,不推荐使用此选项。 按表的主键值hash值投递到不同的Partition 适用于一个表一个Topic的场景,避免该表都写到同一个分区,消费者可以并行从各分区获取数据。 按表的非主键列值的hash值投递到不同的Partition 适用于一个表一个Topic的场景,避免该表都写到同一个分区,用户可以按照非主键列值的hash值自定义message key,消费者可以并行从各分区获取数据。 按库名自动生成Topic名字: 对于源库数据量量不大的场景,可以选择一个database自动生成Topic名字,按库名确定一个Topic。 按库名.schema.表名的hash值投递到不同Partition 适用于单表的查询场景,可以提高单表读写性能,推荐使用此选项。 全部投递到Partition 0 适用于有事务要求的场景,写入性能比较差,如果没有强事务要求,不推荐使用此选项。 按库名.schema的hash值投递到不同Partition 适用于一个database一个topic的场景,避免多个schema下的数据写到一个分区,消费者可以并行从各分区获取数据。 按库名.dn序号的hash值投递到不同Partition 适用于一个database对应一个topic,避免多个dn上的数据写到一个分区,消费者可以并行从各分区获取数据。 按库名-schema自动生成Topic名字: 如果每个schema数据量都非常大,建议选择按库名-schema自动生成Topic名字,按库名-schema确定一个Topic。 按库名.schema.表名的hash值投递到不同Partition 适用于单表的查询场景,可以提高单表读写性能,推荐使用此选项。 全部投递到Partition 0 适用于有事务要求的场景,写入性能比较差,如果没有强事务要求,不推荐使用此选项。 按库名-dn序号自动生成Topic名字: 如果每个dn上数据量很大,建议选择按库名-dn序号自动生成Topic名字,按库名-dn序号确定一个Topic。 按库名.schema.表名的hash值投递到不同Partition 适用于单表的查询场景,可以提高单表读写性能,推荐使用此选项。 按库名.schema的hash值投递到不同Partition 适用于一个database一个topic的场景,避免多个schema下的数据都写到一个分区,消费者可以并行从各分区获取数据。 全部投递到Partition 0 适用于有事务要求的场景,写入性能比较差,如果没有强事务要求,不推荐使用此选项。
  • 资源规划 表1 资源规划 类别 子类 规划 备注 VPC VPC名称 vpc-DRStest 自定义,易理解可识别。 子网网段 10.0.0.0/24 子网选择时建议预留足够网络资源 所属Region 华南-广州 选择和自己业务区最近的Region,减少网络时延。 子网名称 subnet-drs01 自定义,易理解可识别。 GaussDB(源库) 实例名 drs-gaussdbv5-src-1 自定义,易理解可识别。 数据库版本 GaussDB 8.102 - 实例类型 分布式版 参考 GaussDB数据库 类型说明,选择适合自己业务的库类型。 存储 超高IO GaussDB支持“超高IO”存储类型,最大吞吐量为350MB/S。 规格 独享型 8vCPUs | 64 GB 根据自己业务承载选择规格。 Kafka(目标端) Kafka实例名 kafka-drs 自定义,易理解可识别。 版本 2.3.0 - 可用区 可用区三 可选择1个或者3个及以上可用区。实际业务场景推荐选择创建在不同的可用区,提升业务可靠性。 规格 c6.2u4g.cluster - 代理个数 3 - 存储空间 高I/O,200GB 存储空间主要用于存储消息(包含副本,Kafka默认使用3副本),除了存储消息外还需要预留部分空间用于存储日志和元数据。 DRS同步任务 同步任务名 DRS-GaussDBToKafka 自定义。 源数据库引擎 GaussDB分布式版 - 目标数据库引擎 Kafka 本示例中目标数据库为Kafka 网络类型 VPC网络 创建任务的时候选择“VPN、专线网络”。
  • GaussDB为源链路增量同步连接及端口说明 GaussDB为源的链路在进行增量同步时,需要保证两类连接可用:普通连接和复制连接。其中普通连接进行数据查询,复制连接进行逻辑复制。 为保证DRS能够正常连接进行同步,首先要保证数据库连接的放开,配置方式可参考GaussDB远程连接配置方法,其次要保证安全组和防火墙策略放开对应的普通连接及复制连接端口。 GaussDB集中式版的复制连接端口为普通连接端口+1。GaussDB分布式的连接分为CN连接和DN连接,对应的复制连接端口也为普通连接端口+1。 父主题: 实时同步
  • 可能原因 报错信息中包含detail:Read timed out:DRS启动任务后,DRS增量抓取在源端数据库创建逻辑复制槽时由于长事务阻塞,或者创建逻辑复制槽的过程中数据库未找到一致性位点,等待创建超时。 报错信息中包含slot [***] is active: DRS启动任务后,DRS增量抓取在源端数据库创建逻辑复制槽时由于长事务阻塞,复制槽未创建成功,此时状态会显示被占用(active),DRS自动重试时会出现此类报错。
  • 解决方案 修改位于$ORACLE_HOME/network/admin目录的sqlnet.ora文件,允许DRS任务IP访问。 如果使用白名单,则TCP.INVITED_NODES配置项中需要包含DRS的任务IP。 如果使用黑名单,则TCP.EXCLUDED_NODES中不能包含DRS的任务IP。 查看源数据库信息(例如IP,端口,或者service name/sid)是否发生修改,如果源库信息发生改变,可选择以下操作: 恢复修改的源数据库信息,DRS任务会自动重试继续同步任务。 重新创建任务进行同步。 执行以下命令查看源数据库连接数,连接数已经达到上限。 查看当前连接数: select count(*) from v$process; 查看最大连接数: select value from v$parameter where name ='processes'; 如果源数据库连接已达到上限,执行以下命令修改数据库允许的最大连接数: alter system set processes = 300 scope = spfile; 然后重启数据库生效。
  • 场景描述 全量或增量同步期间DRS任务报错,同步日志界面提示:retry structures failed events=the fail structures are [type=index, index=***, schema_name=***, object_name=***]reason:[ERROR: memory required is *** MB, maintenance_work_mem is *** MB]。
  • 场景描述 Oracle为源全量或增量同步期间DRS任务报错,同步日志界面提示:service LOG MANAGER failed, cause by: Unable to connect to DBMS: url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=*.*.*.*)(PORT=1521))(CONNECT_DATA=*)) user=*, Caused by: IO Error: Got minus one from a read call.