图解分布式DDL

举报
毛竹 发表于 2023/09/14 10:38:11 2023/09/14
【摘要】 本文采用图解的方式让大家快速理解多CN下多个DDL如何执行,确保各CN/DN节点同步执行成功。


GaussDB(DWS)为确保集群高可用,生产环境一般采用多CN部署。CN间通过Active-Active模式实现高可用,且每个CN的角色是对等的,并同时对外提供服务。通常DML语句在任何一个CN上都可以得到一致结果,而DDL语句必须在所有CN上都执行成功。本文先简述多CN下单个DDL的执行流程,之后再重点通过图解的方式让大家快速理解多CN下多DDL执行流程,闲言少叙,书归正文。

1.多CN下单个DDL执行流程

DDL执行入口Coordinate。首先会和GTM进行交互,接着会与其他CN、DN进行交互,同步下发DDL语句,保障DDL在各CN/DN节点同步执行成功。

2.多CN下多DDL执行流程

下面通过图解的方式带大家了解多CN下多个DDL语句如何在CN/DN间交互,确保各CN/DN节点同步执行成功。

假设现有CN1、CN2、CN3三个CN节点,DN1、DN2、DN3三个DN节点,command1、command2、command3三条命令,command2、command3执行流程如下图1所示:

1.png

图1 command2、command3执行流程

command1执行流程如下图2所示:

2.png

图2 command1执行流程



至此,三条命令在各CN/DN节点同步成功,该过程完成。多CN下多个DDL执行文字描述可参考(MPPDB 分布式DDL简介

注意:

1)多DDL在多CN并发交互,enable_parallel_ddl参数,该参数主要为解决从不同CN下发DDL造成的死锁问题,默认开启。控制从所CN下发的DDL都使用同一个CN(first CN)作为起点开始执行。(重难点)

2)将多CN上并发的DDL操作串行化,即指定一个最先执行的CN,所有的DDL都必须先在这个CN上执行完成后才可以在别的节点上执行。这样的话,在这个被指定的CN上面,DDL操作上是串行的,拿不到锁的DDL会等待,但不再会出现锁的死锁情况。

3.CN高可用延伸

CN高可用:CN只存储原数据信息(即每张用户表数据分布在哪几个DN),只有DDL操作才涉及到CN存储数据。  

1)CN的数据同步:一个CN故障时,集群无法操作DDL,此时CM已提供了CN的自动剔除和加回功能,可以方便的处理CN的故障;

2)CN重建方式:正常CN重建故障CN,用CN build的方式使用其他CN重建CN,充分利用CN间互为备机的机制  在较老版本中使用gs_dump工具来实现CN的重建;

3)CN的状态转换:CN的操作都是由CM agent来完成,基本上不需要人工介入。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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