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

Greenplum表故障处理--Primary和mirror

IT那活儿 2022-11-30
1270

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

primary和mirror的主备同步机制

greenplum是基于postgreSQL进行开发的,主备是通过流复制实现,但segment节点的primary和mirror之间的数据同步是基于文件级别的同步实现的。
primary和mirror同步的内容主要有两部分:文件和数据。
之所以primary和mirror要同步文件,是因为primary和mirror之间可以自动failover,只有两者保持同步才能相互替代,如果只把数据同步过去,pg_control、pg_clog、pg_subtrans 没有同步,那么从primary切换到mirror就会出现问题。
master和slave却不用担心这些问题,Append Only 表的数据只会存在 Segment,所以wal日志足够保持master和slave同步(只要是流复制,pg_control、pg_clog、pg_subtrans 这些文件slave会自动更新,无需从master同步)。
1)数据同步
当master向primary下发执行计划后,primary开始执行,如果是dml操作,那么primary会产生XLOG及更新page。会在SlruPhysicalWritePage函数中(写数据页)产生FileRepOperationOpen、FileRepOperationWrite、FileRepOperationFlush、FileRepOperationClose等指令消息(消息中包含具体要更新的文件page及内容),通过primary sender进程向mirror发送message,然后mirror的mirror consumer等进程解析消息,执行变更。
xlog通过XLogWrite函数(写xlog)执行同样的操作,把xlog更新同步过去。
2)文件同步

primary的recovery进程会循环把primary的 pg_control、pg_clog、pg_subtrans 等文件覆盖到mirror。同时检查xlog是否一致,如果不一致以primary为主,对mirror进行覆盖。除把primary部分文件同步到mirror之外recovery进程还会将mirror上面的临时文件删掉。

创建一个ao表并插入数据

通过pg_class系统表查找该表所属的数据块。
Primary所对应的数据块的位置。
1. 到对应mirror下模拟mirror损坏的情况
修改mirror下16872.1这个数据块,可以看到md5sum校验值已经不同。
这时查看表格发现可以正常查询。
2. 模拟primary损坏的情况
同理修改primary下16872.1这个数据块,会发现查询报错。
可以通过报错信息提示查看数据块所在的实例:
gpstate -c | grep seg0查找实例对应的primary主机和mirror主机。
Ms5sum校验文件:
md5sum home/gpadmin/gpdata/gpdatam1/gpseg0/base/16412/16872.1
md5sum /home/gpadmin/gpdata/gpdatap1/gpseg0/base/16412/16872.1

Mirror传输覆盖到primary。
scp /home/gpadmin/gpdata/gpdatam1/gpseg0/base/16412/16872.1 
192.168.**.***:/home/gpadmin/gpdata/gpdatap1/gpseg0/base/16412/16872.1

之后该表可以正常查询。


本文作者:陆 游(上海新炬王翦团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论