暂无图片
暂无图片
7
暂无图片
暂无图片
暂无图片

opengauss新特性之两地三中心跨region容灾

2124

一、背景概述

基于流式复制的异地容灾解决方案,可支持实现两地三中心跨region容灾。
两地:两座城市(同城、异地),三中心:生产中心,同城容灾中心,异地容灾中心。
异地容灾中心用于双中心的数据备份,当双中心出现自然灾害等原因而发生故障时,异地容灾中心可以用备份数据进行业务的恢复。

二、组网结构

双集群容灾方案,主备集群是两个独立集群,主备集群的组网方式可任意选择,灾备集群会选出首备连接主集群的主DN,灾备集群内其他节点都以级联备方式连接首备。主备集群两边具有集群管理组件CM。
image.png

三、容灾方案中流程与功能

GaussDB 异地流式容灾方案当前提供如下五个操作流程:

  • 容灾搭建:两个正常集群成为容灾状态下的主集群和灾备集群。
  • 灾备集群升主failover:无论主集群是否异常,灾备集群都可以通过升主成为正常集群对外提供服务,并脱离容灾。
  • 主集群容灾解除:用于在灾备集群升主后,主集群删除容灾信息,脱离容灾。
  • 主备集群switchover:主备集群在都是正常的情况下进行倒换,主集群降为灾备集群,灾备集群升为主集群。
  • 容灾状态查询:容灾状态日常监测,上报集群容灾状态、容灾搭建进度、failover进度、 switchover进度,集群RTO,RPO实时数值。

四、常用命令

  • 查询状态
gs_sdr -t query

主集群状态:
image.png
备集群状态:
image.png
主集群(左)备集群(右)各有6种状态:
image.png

  • 启动为主集群
gs_sdr -t start -m primary -U dbrepl -W DBrepl@123 -X /gauss/software/clusterconfig.xml 
  • 启动为备集群
gs_sdr -t start -m disaster_standby -U dbrepl -W DBrepl@123 -X /gauss/software/clusterconfig.xml 
  • 主集群降备
gs_sdr -t switchover -m disaster_standby
  • 备集群升主
gs_sdr -t switchover -m primary
  • 解除容灾关系
gs_sdr -t stop -X /gauss/software/clusterconfig.xml
  • 备集群 failover 升主
gs_sdr -t failover

五、主要操作说明

1. 搭建

容灾搭建是利用了全量重建的功能-----先删除当前节点所有数据,然后利用节点数据全量备份,将备机重建,先重建首备实例,再重建级联备实例,主备之间,通过build把数据拿过来,建立流复制。
image.png

  • 流复制原理:
    image.png
  • 步骤:
1. 安装集群1,安装集群2
2. 在主集群创建容灾用户
gsql -d postgres -p PORT -c "create user DR_USERNAME with replication password 'DR_PASSWORD';"
3. 将集群1启动为主集群
gs_sdr -t start -m primary -X XMLFILE [-U DR_USERNAME [-W DR_PASSWORD]] [--time-out=SECS]
4. 将集群2启动为备集群
gs_sdr -t start -m disaster_standby -U USER -W PASSWORD -X XMLFILE [-U DR_USERNAME [-W DR_PASSWORD]] [--time-out=SECS]
5. 查询 gs_sdr -t query
  • 搭建完成后查询状态
    主集群:
    image.png
    image.png
    备集群:
    image.png
    image.png

备集群升主failover

  • 流程图:
    image.png

  • 步骤:

1. 如果主集群正常
需要先在主集群执行解除容灾关系操作
在主集群执行gs_sdr -t stop -X xxx.xml
再在备集群执行gs_sdr -t failover
 
2. 如果主集群挂掉
直接执行
gs_sdr -t failover
主集群恢复后会出现双主,需要先执行gs_sdr -t stop -X xxx.xml解除容灾关系
再重新建立容灾关系

容灾倒换switchover

  • 流程图:
    image.png
  • 步骤:
    switchover需要在主集群和(灾)备集群都要执行操作
主集群执行主降备
gs_sdr -t switchover -m disaster_standby
(灾)备集群升主
gs_sdr -t switchover -m primary

注意:这两个操作不分先后顺序,但是需要尽量同时开始操作,否则可能会导致一端等待超时

六、流式容灾相关参数

  • hadr_recovery_time_target
    在流式容灾模式下设置能够让备数据库实例完成日志写入和回放。
  • hadr_recovery_point_target
    在流式容灾模式下设置能够让备数据库实例完成日志刷盘的rpo时间。
  • enable_wal_shipping_compression
    压缩:主备集群间日志传输可打开压缩(GUC参数数),节约带宽。 
    在流式容灾模式下设置启动跨集群日志压缩功能。

七、容灾文件及日志说明

  • 容灾落盘文件
    路径:/gauss/openGauss/tmp/streaming_cabin
    (xml文件配置的"tmpMppdbPath")
  • 日志文件
    om文件夹下可查看sdr工具日志
    image.png
  • cm组件相关日志
    image.png
    重点关注:
    cm_agent-******-current.log
    system_call-current.log
    cm_server-******-current.log
    key_event-******-current.log

说明:目前双集群容灾未与CM解耦,高可用仲裁还是依赖于CM,可重点关注CM组件相关日志,关于CM相关介绍可参考我另一篇文章

八、测试用例

  • 测试架构:
    主备集群各两个实例
    image.png

  • 测试用例:
    image.png

九、测试总结

  1. 主备集群切换switchover
    switchover需要在主集群和备集群都要执行操作,操作不分先后顺序,但是需要尽量同时开始操作,否则可能会导致一端等待超时
  2. 备集群升主failover
    (1)如果主集群正常,需要先在主集群执行解除容灾关系操作,再在备集群执行gs_sdr -t failover
    (2)如果主集群挂掉,直接执行gs_sdr -t failover,主集群恢复后会出现双主,需要解除容灾关系,再重建集群关系;脑裂时,新连接会连接到原主集群,CM未处理(CM无法在集群之间仲裁)
    (3)如果备集群升主过程中有异常实例,故障节点修复后重新加入数据库实例,同时修改CMS和CMA中关于数据库实例灾备模式的参数。使用kill -9命令杀掉CMS和CMA进程,然后进程会被om_monitor重启,完成CMS和CMA参数修改的生效。手动修复该节点后使用cm_ctl start-n NODEID -D DATADIR。
  3. 主集群主节点故障
    (1)kill主节点数据库进程,数据库进程自动拉起,原备节点切换为主节点,failover期间tps下降为0,切换完成后tps恢复
    (2)kill -19主节点数据库进程,5次死锁检测后,cma kill掉数据库进程,主集群备节点切换为主节点,原主节点恢复后自动加入集群(先死锁检测再切换
    (3)主节点网络隔离,har_cluster_stat状态为archive_fail,首备节点与主集群失联,网络恢复后,主集群主备未发生切换
    (4)主节点网络延迟5s,主集群 har_cluster_stat 状态为archive_fail,网络恢复后,集群状态恢复,主集群主备未发生切换
    (5)主节点CPU使用率高,IO高,数据日志目录达到阈值均对集群状态无影响,数据目录达到阈值,主集群实例状态变为readonly(datastorage_threshold_value_check参数控制)
  4. 主集群备节点故障
    (1)kill备节点数据库进程,数据库进程自动拉起,tps无影响
    (2)kill -19备节点数据库进程,备节点状态异常,5次死锁检测后,cma kill掉数据库进程,主集群备节点数据库进程自动拉起
    (3)备节点网络隔离,备库状态为down,har_cluster_stat状态正常,网络恢复后,集群状态恢复,tps无影响
    (4)备节点网络延迟5s,主集群 har_cluster_stat 状态为archive_fail,网络恢复后,集群状态恢复
  5. 备集群首备节点故障
    (1)kill首备节点数据库进程,数据库进程自动拉起,tps无影响
    (2)kill -19首备节点数据库进程,级联备节点切换为首备节点,5次死锁检测后,cma kill掉数据库进程,原首备节点恢复后以级联备自动加入集群,tps无影响(先切换再死锁检测
    (3)首备节点网络隔离,首备状态为down,har_cluster_stat为archive_fail,网络恢复后,备集群未切换,tps无影响
    (4)首备节点网络延迟5s,主集群 har_cluster_stat 状态为archive_fail,网络恢复后,集群状态恢复,备集群未发生切换,tps无影响
  6. 级联备节点故障
    (1)kill级联备节点数据库进程,数据库进程自动拉起,tps无影响
    (2)kill -19级联备节点数据库进程,级联备节点状态异常,5次死锁检测后,cma kill掉数据库进程,级联备节点数据库进程自动拉起,tps无影响
    (3)级联备节点网络延迟5s,主集群 har_cluster_stat 状态为archive_fail,网络恢复后,级联备catch up,集群状态恢复,tps无影响
    (4)关闭级联备节点网卡,备集群状态异常,网卡恢复后,集群状态恢复,tps无影响
    (5)级联备节点网络延迟5s,主备集群状态正常,网络延迟恢复后级联备catch up,tps无影响
  7. 主集群故障
    (1)主集群关闭后,主备集群失去连接,待主集群恢复,tps恢复
    (2)主集群与备集群网络隔离,主备集群失去连接,tps无影响
  8. 灾备集群故障
    (1)关闭灾备集群,插入2.5G数据,cluster_stat为recovery_fail,开启备集群后,备集群catch up,追赶成功,集群状态正常,tps无影响
    (2)备集群实例上模拟到主集群网络丢失,备集群首备节点显示连接丢失,cluster_stat为archive_fail,网络恢复后,集群状态恢复 ,cluster_stat状态正常,tps无影响
  • 说明:
    kill -19进程僵死,cma会连不上dn,在主集群下,会检查gaussdb.state文件,能读到就先不切换,灾备集群下处理相对简单一些,cma连不上dn就直接切换。

十、特性约束

  • 搭建容灾关系前,主集群需创建具有流复制权限的容灾用户,用于容灾鉴权,主备集群必须使用相同的容灾用户名和密码,一次容灾搭建后,该用户密码不可修改。若需修改容灾用户名与密码,需要解除容灾,使用新的容灾用户重新进行搭建。容灾用户密码中不可包含以下字符“| ;&$<>`’"{}()[]~*?!\n空白”。
  • 搭建容灾的主备集群版本号必须相同。
  • 流式容灾搭建前不支持已存在首备及级联备。
  • 搭建容灾关系时,如果集群副本数<=2,会设置most_available_sync为on,在容灾解除或者failover后此参数不会恢复初始值,持续保证集群为最大可用模式。
  • 搭建容灾关系时,会设置synchronous_commit为on,解除容灾或failover升主时恢复初始值。(初始为on)
  • 灾备集群可读不可写。
  • 灾备集群通过failover命令升主后,和原主集群灾备关系将失效,需要重新搭建容灾关系。
  • 在主数据库实例和灾备数据库实例处于normal状态时可进行容灾搭建;在主数据库实例处于normal态并且灾备数据库实例已经升主的情况下,主数据库实例可执行容灾解除,其他数据库实例状态不支持。在主数据库实例和灾备数据库实例处于normal状态时,通过计划内switchover命令,主数据库实例可切换为灾备数据库实例,灾备数据库实例可切换为主数据库实例。灾备数据库实例处于非Normal且非Degraded状态时,无法升主,无法作为灾备数据库实例继续提供容灾服务,需要手动修复或重建灾备数据库实例。
  • 灾备集群DN多数派故障或者CMS、DN全故障,无法启动容灾,灾备集群无法升主,无法作为灾备集群,需要重建灾备集群。
  • 主集群如果进行了强切操作,需要重建灾备集群。
  • 主集群和灾备集群都支持gs_probackup工具中的全备和增备。容灾状态下,主集群和灾备集群都不能做恢复。如果主数据库实例要做恢复,需要先解除容灾关系,在完成备份恢复后重新搭建容灾关系。
  • 容灾关系搭建之后,不支持DN实例端口修改。
  • 建立容灾关系的主数据库实例与灾备数据库实例之间不支持GUC参数的同步。
  • 主备集群不支持节点替换、修复、升降副本,DCF模式。
  • 当灾备数据库实例为2副本时,灾备数据库实例在1个副本损坏时,仍可以升主对外提供服务,如果剩余的这个副本也损坏,将导致不可避免的数据丢失。
  • 容灾状态下仅支持灰度升级,且继承原升级约束,容灾状态下升级需要遵循先升级主集群,再升级备集群,再提交备集群,再提交主集群的顺序。
  • 建议对于流式容灾流复制IP的选择,应考虑尽量使集群内的网络平面与跨集群网络平面分离,便于压力分流并提高安全性。

ps:
关于详细资料可参考opengauss官方文档
有新的需要补充内容我会随时更新,也欢迎大家一起交流讨论~

最后修改时间:2023-05-06 15:52:08
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
1人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论