图解分布式DDL
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 command2、command3执行流程
command1执行流程如下图2所示:
图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来完成,基本上不需要人工介入。
- 点赞
- 收藏
- 关注作者
评论(0)