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

GBase 8a MPP Cluster自动恢复

VV_刺头王 2022-03-27
1066
一、   Gcrecover

服务名称gcrecover,该服务部署在coordinator节点上,由coordinator节点的gcmonit服务进行监控。

gcrecover配置文件:安装目录/gcluster/config/gc_recover.cnf

 

二、   EVENT恢复机制

自动恢复工具工作的基本触发条件就是集群产生了event,包括ddlevent、dmlevent及dmlstorangeevent,然后恢复工具检测到event,对这些event进行恢复。

 

1.   ddlevent恢复流程

ddlevent恢复为对该日志中记录的SQL进行重做。当该SQL执行失败时,首先检查SCN一致性,如果要操作的scn和日志中的scn一致,则放弃该条恢复日志,若不同,则根据不同情况作如下处理。

 

2.   dmlevent恢复流程

dmlevent恢复为利用gc_sync工具从同分片的备份分片上拷贝至本节点,达到恢复的目的,下发调用syc工具的方法为使用ssh下发shell命令到问题节点。若主副分片都存在dml日志,则对比日志的scn号,scn号较大的进行revert操作,较小的等待较大的revert后,从scn较大节点向scn较小节点拷贝数据。当两分片的scn为0时,则不进行revert操作,此时认为日志记录异常,因为revert table … scn_number …中scn_number不可能为0,而记录dmlevent日志时,默认scn为0,并代表需通过从正常源节点拷贝数据恢复。

 

3.   dmlstorageevent恢复流程

1)用户表损坏(dmlstorageevent)

用户表损坏恢复,分为表结构文件损坏和表数据文件损坏,当sql操作发现文件损坏错误时,记录文件损坏恢复日志。

主要为两种情况:

Ø  当为表结构损坏时,需删除损坏表,然后再向正常节点获取建表语句,然后再通过建表语句恢复表结构。当该表为单机层表时,在删表后,还需调用sync工具的全同步模式,恢复数据

Ø  当为数据文件损坏时,需删除损坏数据文件,然后再调用sync工具的一般模式,恢复数据。当有多个数据文件损坏时,在一次dml操作中,一次只能发现一个损坏的数据文件,多个损坏数据文件,通过多次dml操作多次报错提出,然后恢复。

 

2)系统表损坏(dmlstorageevent)

系统表为gbase库的下系统表,不包含用户在gbase库下创建的表。Gbase库下,重点关注的为table_distribution。

当集群运行过程中发现系统表损坏时,存在以下两种情形:

情形1:损坏节点存在备份节点

情形2:损坏节点不存在备份节点

恢复方法,存在三种方法:

方法1:采用check … repair恢复,不能check…repair修复时,直接删除损坏表,建立一个空表,保证表结构完备性,此时不保证数据一致性;

方法2:采用向正常节点获取数据,然后将数据插入到本地节点,达到恢复数据的目的,其保证数据一致性;

方法2:1和2结合,先试用1方法保证表结构完备,然后使用2保证数据一致。

根据数据的特点,存在三种类型表:

类型1:针对类似log等类型的表,在各个节点上数据不一致;

类型2:针对类似table_distribution等类型的表,在各个节点上数据一致;

类型3:针对类似func、host等表。

 

三、    示例

$ gcadmin showdmlstorageevent

Vc event count:2

Event ID:    20

ObjectName: t.t1

TableID: 289

 

Fail Data Copy:

------------------------------------------------------

SegName: n1   NodeIP: *.*.*.*   FAILURE

 

Event ID:    21

ObjectName: t.t1

TableID: 289

 

Fail Data Copy:

------------------------------------------------------

SegName: n1   NodeIP: *.*.*.*   FAILURE

 

 

$ gcadmin showdmlevent

Vc event count:1

Event ID:    24

ObjectName: t.tt1

 

Fail Data Copy:

------------------------------------------------------

SegName: n1   SCN: 5381 NodeIP: *.*.*.*   FAILURE

 

$ gcadmin showddlevent

Vc event count:0

 

四、   如何删除event

gcadmin rmfeventlog IP

$ gcadmin rmfeventlog *.*.*.*

after rmfeventlog *.*.*.*, fevent log will be removed, must run gcadmin replacenodes to replace this node.

you realy want to remove node *.*.*.* fevent log(yes or no)?

y

after rmfeventlog *.*.*.*, fevent log will be removed, must run gcadmin replacenodes to replace this node.

you realy want to remove node *.*.*.* fevent log(yes or no)?

yes

delete ddl event log on node *.*.*.* start

delete ddl event log on node *.*.*.* end

delete dml event log on node *.*.*.* start

delete dml event log on node *.*.*.* end

delete dml storage event log on node *.*.*.* start

delete dml storage event log on node *.*.*.* end

$ gcadmin showdmlevent

Vc event count:0

$ gcadmin showddlevent

Vc event count:0

 

 

 

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

评论