服务名称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




