摘要:针对数据同步状态查看方法,GaussDB(DWS)提供了丰富的系统函数、视图、工具等可以直观地对同步进度进行跟踪,尤其是为方便定位人员使用,gs_ctl工具已集合了大部分相关系统函数的调用,可做到在任何时间,从未启动、启动、重建到运行时的关键信息显示。

1 背景概述:

1.1DN高可用架构模型

要理解或描述数据同步的过程机制,需要首先要了解GaussDB(DWS)的DN高可用架构,理解涉及数据同步的各组件的关系、数据类型、数据流向、设计原理和目的。

GaussDB(DWS)的DN高可用架构为主、备、从备架构。即在分布式环境中,完整的集群数据采用分片技术分布在多个DN组上,每组DN承担一个数据分片,包括:一个主DN、一个备DN和一个从备DN。主和备各有一份完整的数据,从备上一般不存储数据,仅在备机故障时做数据的暂存。组件之间关系如图1所示:

图1 DN高可用架构关系图

主、备、从备高可用架构下,主、备及主、从备之间均会建立流复制通道。流复制又分为日志复制和数据页复制。日志复制用于同步主DN由于WAL机制刷到磁盘上的XLOG,同步到备DN进行回放。数据页复制用于同步批量导入的行存数据、或列存CU文件。需要注意的一点是,从备仅用于存放XLOG和数据,回放(replay)仅发生在备DN上。

1.2 数据同步涵盖范围

数据同步就是涉及集群中主、备节点以及从备节点之间的日志复制数据的传输、回放,数据页复制数据的传输、追赶,备机重建等过程。GaussDB(DWS)集群高可用实践WAL(Write Ahead Logging)思想,并通过各组件的主备的数据同步、倒换、重建等机制,保证数据库单实例遭遇Crash后,具备故障恢复及自愈的能力,保护数据库中数据的可靠性和完整性,最终实现集群对外业务连续性的过程。

这些主要的过程有:

(1)主备之间的正常流复制

每组DN独立承担一个数据分片,因此要求各个DN主与备必须强同步。为保证DN的主备强同步,数据在主DN操作时产生日志,事务提交时将日志同步给备DN。备机对接收到的XLOG进行回放(replay),将日志转为数据。另外,列存和行存批插场景下,备机正常时,新增(变更)数据会发往备机。使用数据页同步相对于日志同步少了磁盘IO,可以提升同步效率,减小RTO。

(2)备机追赶

为了解决单节点故障后集群写事务可用,DN的高可用设计引入从备这个实例。一旦备DN故障,数据将发送给从备,仍然保证了数据写两份的原则,事务照样可以提交。但主机会对BCM文件里面的标记位置状态位。BCM文件中每一bit位(除预留位外)对应数据文件中每一页(8k)状态。

当备机重新启动的时候,会连接主机做数据页追赶(catchup)。追赶机制分为全量和增量两种。全量catchup机制,不依赖于从备,主机递归扫描本地默认表空间和自定义表空间下的所有BCM文件,然后查看状态位来确认哪些数据文件需要发送给备机。增量catchup机制依赖于从备,主机通知从备遍历其从备上暂存的数据页,将变更的数据页列表发往主机,主机直接按照从备发来的变更列表,将变更数据发往备机。

(3)主备倒换

当主DN故障时,需要对备DN进行failover,failover后备DN升为主DN来接管业务。所以failover时,备DN需要连接从备DN,向从备DN请求数据,以补齐备DN比主DN缺少的数据。failover的过程是备DN独立完成的,不需要和主DN进行交互。

(4)备机重建

重建功能主要目的是单点故障修复,备机重建方式按照实现分为全量重建和增量重建,均和主DN进行交互。全量重建是备机清空数据目录,保留配置文件,向主机发送全量重建请求,主机将自己的数据目录除了配置文件外,全部发给备机,重建后启动备机。增量重建是一种以主DN文件为基准,按照文件块对备DN文件进行校验,如果备DN文件的某个文件块校验不一致,则主机将此文件块发给备DN,写入文件对应的文件块中。与全量重建相比较,拷贝的数据量和WAL日志量都更少,代价更小。

从以上这些数据同步过程中,我们发现表现在运维上一个明显的特点是,这些过程有可能会时间花费较长,一旦同步过程中出现异常问题,其内部关键过程信息输出对于问题分析定位十分重要。因此,GaussDB(DWS)提供了丰富的系统函数、视图、工具等可以直观地对同步进度进行跟踪,尤其是为方便定位人员使用,gs_ctl工具已集合了大部分相关系统函数的调用,可做到在任何时间,从未启动、启动、重建到运行时的关键信息显示。

2 方法总结

2.1 系统视图

总结涉及数据同步的系统视图如表1所示。具体参数、返回值定义请参考相应版本的产品文档手册。

2.2 系统函数

总结涉及数据同步的系统函数如表2所示。具体参数、返回值定义请参考相应版本的产品文档手册。

2.3 常用工具

总结涉及数据同步的常用工具如表3所示。具体工具说明、参数定义请参考相应版本的产品文档手册中的定义。

3 应用场景

3.1 查看DN实例Redo进度

当DN实例crash发生时,我们可以通过回放XLOG日志中记录的数据变化还原crash前的操作。这个就是所谓的redo/recovery过程。如果需要redo的XLOG比较多,或者遇到某种特殊日志类型,对DN实例进行启动,启动过程时间就会有些长。

DN实例启动过程中,如果期望查看XLOG redo的进度。最方便的是使用gs_ctl query工具对指定DN实例路径进行状态查询,结果中可以显示xlog redo的进度,如图2所示。此外,在DN实例可以接受gsql连接时(启动到最小恢复点之前是拒绝连接的),也可直接在当前DN上执行pg_xlog_replay_completion 函数来获取XLOG redo进度信息。

图2 DN实例启动时XLOG Redo进度查询

启动Redo进度相关信息(Xlog replay info)包括:

  • replay_start:Xlog Redo的起始LSN 。DN实例启动XLOG redo过程时,记录replay_start。
  • replay_current:Xlog Redo的当前replay的LSN。
  • replay_end:DN本地接收到的最大XLOG lsn。
  • replay_percent:Xlog Redo的当前完成的百分比。(replay_current - replay_start)*100 / (replay_end - replay_start)的计算值。

依据replay_current的变化,可以看到XLOG redo的推进。

依据replay_percent和启动开始时间,可以推测DN实例启动到正常状态的所需时间。

3.2 查看备机Failover进度

当主机发生故障时,我们需要将备机failover成主机,此时备机需要连接从备同步XLOG和数据页文件。如果需要同步的XLOG比较多,或者遇到某种特殊日志类型,或者数据文件比较多时,对备DN实例进行failover,过程时间就会有些长。

备机failover升主过程中,如果期望查看XLOG redo和数据页文件同步的进度。最方便的是使用gs_ctl query工具对指定DN实例路径进行状态查询,结果中可以显示xlog redo的进度和从备数据同步的进度,如图3所示。此外,在DN实例可以接受gsql连接时,也可直接在当前DN上执行pg_data_sync_from_dummy_completion 函数来获取从备数据文件同步的进度信息。

图3 备机Failover进度查询

Failover Redo进度相关信息(Xlog replay info),字段含义同Start Redo,区别在于,备DN在处理failover请求连接从备时候获取最新的replay lsn更新了replay_start。

Failover数据页文件进度相关信息(Data sync from dummy)包括:

  • start_index:数据页文件同步的起始编号。
  • current_index:数据页文件同步的当前编号。
  • total_index:数据页文件同步的最大编号。
  • sync_percent:数据页文件当前完成的百分比。(current_index - start_index) *100/ (total_index - start_index + 1) 的计算值。

依据current_index的变化,可以看到数据页同步的推进。

依据sync_percent和failover开始时间,可以推测DN实例failover到正常状态的所需时间。

3.3 查看备机Catchup进度

当备机重新启动的时候,会连接主机做数据页追赶(catchup)。如果需要传输的数据页比较多,或者因为业务造成的锁冲突,catchup 时间就会比较长,备DN长时间不能成为Normal状态。

如果期望查看数据页catchup的进度,可以在CN上执行select * from pgxc_get_senders_catchup_time()可进行当前活跃的主备发送线程的追赶信息显示,如图4所示。

图4 集群上catchup进度查询

也可以在相应的主DN上执行select * from pg_get_senders_catchup_time可进行当前活跃的主备发送线程的追赶信息显示。完成后,看到的是刚结束的catchup过程信息,如图5所示。

图5 主DN上catchup进度查询

备机Catchup进度相关信息包括:

  • catchup_type:"Incremental"或者"Full"。catchup方式为全量还是增量。
  • catchup_bcm_filename:当前主机正在处理的一个BCM文件名称。
  • catchup_bcm_finished:catchup已操作完成的BCM文件数量。
  • catchup_bcm_total:catchup总共需要操作的BCM文件数量。
  • catchup_percent:catchup已经操作完成的百分。catchup_bcm_finished*100 / catchup_bcm_total 的计算值。
  • catchup_remaining_time:依据已完成的进度,预估剩余完成时间。

依据catchup_bcm_filename和catchup_bcm_finished的变化,可以看到数据页追赶的推进。

依据catchup_percent和catchup_remaining_time,可以推测备DN实例追赶到正常状态的所需时间。

3.4 查看DN实例XLOG空间使用状况

随着数据库的不断运行,产生的日志文件越来越多,如果因为节点故障或其它原因有可能造成日志文件不断积累而充爆磁盘。为了解此使用信息,最方便的是使用gs_ctl query工具对指定DN实例路径进行状态查询,结果中可以显示该实例的XLOG空间使用信息,截图示例请参见上面其它场景。此外,还提供系统函数 pgxc_stat_xlog_space、pg_stat_xlog_space 对数据库集群或单个实例进行查询,例如使用pgxc_stat_xlog_space可以获取到整个集群的CN、主DN的XLOG空间使用信息,如图6所示。

图6 Xlog空间使用查询

XLOG空间使用信息(Xlog space info)包括:

  • xlog_files:pg_xlog目录下,去除backup、archive_status等子目录,所有识别为xlog文件的数目;
  • xlog_size:pg_xlog目录下,去除backup、archive_status等子目录,所有识别为xlog文件的大小之和,以MB单位显示;
  • other_size:pg_xlog目录下backup、archive_status等子目录文件的大小之和,以MB单位显示。

点击关注,第一时间了解华为云新鲜技术~

数据库技术丨GaussDB(DWS)数据同步状态查看方法的更多相关文章

  1. Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步

    摘自:http://blog.csdn.net/javaee_sunny/article/details/53439980 目录(?)[-] Oracle 10g 物化视图语法如下 实例演示 主要步骤 ...

  2. mongo状态查看方法

    列举一些常用的mongodb状态查看方法. 1.mongostat 是mongdb自带的状态检测工具, inserts/s 每秒插入次数 query/s 每秒查询次数 update/s 每秒更新次数 ...

  3. MySql状态查看方法 MySql如何查看连接数和状态?

    原文:MySql状态查看方法 MySql如何查看连接数和状态? 如果是root帐号,你能看到所有用户的当前连接.如果是其它普通帐号,只能看到自己占用的连接 怎么进入mysql命令行呢? mysql的安 ...

  4. Oracle19c单实例数据库配置OGG单用户数据同步测试

    目录 19c单实例配置GoldenGate 并进行用户数据同步测试 一.数据库操作 1.开启数据库附加日志 2.开启数据库归档模式 3.开启goldengate同步 4.创建goldengate管理用 ...

  5. SQL 数据库 复制 与订阅 实现数据同步

    摘自: http://www.jb51.net/article/18039.htm

  6. oracle11g dataguard 备库数据同步的检查方法

    概述: 一.环境      主库:       ip地址:192.168.122.203       oracle根目录:/data/db/oracle       SID:qyq       数据文 ...

  7. 玩转SSH--Hibernate(三)---手动修改数据库,前台查询信息不同步更新问题解决方法

    在用hibernate时遇到一个挺纠结的问题,就是我在手动修改数据库的信息后,前台页面查询到的信息还是之前的结果,一开始以为是缓存的问题,经过多次修改和在网上查询资料,最终发现可能是hibernate ...

  8. red hat防火墙的开启与关闭及状态查看方法

    Redhat使用了SELinux来增强安全, 首先怎么查看防火墙的状态呢? a.可以通过如下命令查看iptables防火墙状态: chkconfig --list iptables b. selinu ...

  9. Linux下apache日志分析与状态查看方法

    假设apache日志格式为:118.78.199.98 – - [09/Jan/2010:00:59:59 +0800] “GET /Public/Css/index.css HTTP/1.1″ 30 ...

  10. Linux下apache日志(按日期存放)分析与状态查看方法

    转载网址: https://blog.csdn.net/weixin_42272246/article/details/125602258

随机推荐

  1. Unity - EditorWindow 折叠树显示(IMGUI)

    仅适用于2018之前的版本,有UIElements或者UIWidgets的最好用新的 基本实现 树节点 public interface ITreeNode { ITreeNode Parent { ...

  2. Unity - UIWidgets 4. 添加图标显示

    Material Icon字体下载(github) 前面的返回按钮, 以及自己试验的一些Icon都不显示, 然后回去翻UIWidgets的README public class UIWidgetsEx ...

  3. Error running 'TestAlterNickname.test': Command line is too long. Shorten command line for TestAlterNickname.test or also for JUnit default configuration

    问题描述 如图IDEA报错问题,发生在我用JUnit进行测试时. 解决方法 1. 直接点击 default 2. Modify options -> Shorten command line 3 ...

  4. VUE首屏加载优化 性能优化分析插件安装分享

    优化背景: 项目上线后 第一次进入项目要等待接近50s才能进入页面.一开始觉得是电脑配置问题或者网络问题.F12后发现加载资源过慢 其中一个chunk-***js文件有10m 加载了45s .我们使用 ...

  5. 【PySide6】QChart笔记(三)—— QPieSeries的使用

    一.QPieSeries简介 1. 官方描述 https://doc.qt.io/qtforpython-6/PySide6/QtCharts/QPieSeries.html 一个饼图序列(QPieS ...

  6. Ubuntu 20.04 挂载 NTFS 硬盘 / 格式化并挂载 EXT4 硬盘

    创建挂载目录 mkdir /mnt/hdd 此目录在最后一步中用得到. 确定要挂载的硬盘 fdisk -l 由于我们要挂载的是 NTFS 硬盘,根据上面的信息,可以确定 /dev/sda1 是我们要挂 ...

  7. offline RL | TD3+BC:在最大化 Q advantage 时添加 BC loss 的极简算法

    题目:A Minimalist Approach to Offline Reinforcement Learning ,NeurIPS 2021,8 7 7 5. pdf 版本:https://arx ...

  8. 手撕Vue-Router-提取路由信息

    前言 好了经过上一篇的学习,我们已经知道了如何监听 Hash 的变化,如何监听路径的一个变化,本篇我们就可以来实现我们自己的 VueRouter 了, 那么怎么实现呢,在实现之前我们先来回顾一下官方的 ...

  9. iOS内存管理机制

    这世上,没有谁活得比谁容易,只是有人在呼天抢地,有人在默默努力.   随着科技的发展,移动设备的内存越来越大,设备的运行速度也越来越快,但是相对于整个应用市场上成千上万的应用容量来说,还是及其有限的. ...

  10. 【译】Visual Studio 2022 - 17.8 的性能改进

    Visual Studio 2022 17.8版本欢迎一系列令人振奋的性能增强,包括响应式文件打开体验,改进 Razor/Blazor 的响应性,加速 F5,优化的 C++ 虚幻引擎智能感知和非 SD ...