【玩转PB级数仓GaussDB(DWS)】dws高可用之failover流程大解密

举报
fxy0224 发表于 2023/02/27 20:11:35 2023/02/27
【摘要】 Gaussdb的HA采用主备从的架构实现数据可靠性。正常情况下主DN连接CN执行业务,备DN仅同步数据,保证数据双份记录,从备DN则仅在主备其中之一发生故障时用来保存数据,主备从架构保证在单一DN故障时,Gaussdb仍可对外提供服务不被中断。当主DN发生故障时,备DN走failover流程,升级成为新主DN,保证集群不因单DN故障而中断业务。

        众所周知,PostgreSQL通过WAL预写xlog日志的机制解决了在单机环境上因进程故障退出导致数据丢失的问题。但在磁盘损坏等情况下,存储在持久性介质的数据就会丢失无法恢复,因此通常采用多副本的方式来保证数据可恢复。在Gaussdb中采用了主备从架构保证数据可靠性。

       在Gaussdb主备从架构下,主DN分别与备DN、从备DN建连。正常情况下,主DN与备DN、从备DN均建立流复制通道,分wal同步和数据页同步两个通道。wal同步是将存储在磁盘中的wal文件读出,然后通过walsender线程发送到备DN;数据页同步是在列存或者批量导入行存数据的场景下使用,通过datasender线程将数据发送到备DN。备DN上通过walreceiverdatareceiver线程接收从主DN同步过来的数据。备DN对同步来的xlogredo的方式实现与主DN的数据一致性。

       failover的场景大致如下:当发生主DN故障且退出后,CM会向备DN通知failover升主的信号。备DN会率先主动连从备DN,将从备DN上的xlog与数据页同步至备DN。然后备DN升主,备DN和从备DN之间建立新的流复制通道。这样当主DN故障时,依靠备DN与从备DNGaussdb仍可对外提供服务。

       failover时主备DN的状态变化过程如下:

DN状态切换过程示意图

     (由于wal机制,因此主备DN在启动时均先执行redoredo完成后DN状态才从starting——>Normal

       当主DN因故障退出时,其状态显示为down。此时备DN处于断连状态,状态由standby Normal变为needrepair(disconnected),当备DN收到failover信号时,状态变为promoting,表示备DN正处于升主过程中。备DN状态变为primary Normal后,表示备DN升主成功。

       failover时备DN的流程示意图如下:

failover流程示意图

        Gaussdb内部通过gs_ctl的方式发送给备DNfailover命令:

         gs_ctl failover  [-w] [-t SECS] [-D DATADIR] [-U USERNAME] [-P PASSWORD],具体流程如下:

  • DNPostmaster线程将failover信号通知到Startup线程, startup线程收到failover信号后,将与主DN不断建连的datareceiverwalreceiver线程shutdown
  • startup线程获取连接从备的建连信息(从备DNip+port),然后通知Postmaster线程创建新的walreceiverdatareceiver线程。
  • DNwalreceiverdatareceiver线程与从备DNwalsenderdatasender建连。从备DN发送xlog日志与数据页信息到备DN
  • DN将从备DN上的数据同步结束后,其walreceiver线程和datareceiver线程均退出。备DNstartup线程进行redoredo完成后,备DN将创建walsenderdatasender线程,并与从备DNwalreceiverdatareceiver线程分别建连,备DN升主成功。备DN升主后,新主将与CN连接,并将xlog日志与数据页文件同步至从备。

【一起来玩转PB级数仓GaussDB(DWS),分享你的技术经验与体验心得,赢开发者大礼包!】19期有奖征文火热进行中!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。