首先snapshot 理论上是用于做备份恢复的
1、恢复哪些内容?
答:snapshot 指定表,在线region和split之前的region

2、谁参与了snapshot
答:
hmastr,regionserver

3、如何snapshot
hmaster 主要负责管控snapshot,
创建snapshot相关信息,比如,表信息,关联region的信息,以及region对应的server信息
hmaster会通过zk管控任务,通过三种目录,acquired、reached、abort;abort下有Regionserver(RS)信息,说明RS有执行snapshot失败的,直接退出snapshot
acquired,hmaster 创建snapshot信息(表,region信息),然后RS进行确认,确认成功,在该目录下创建自己的名字
reached,hmaster 确认acquired下RS都确认了,通知RS可以进行干活,每个RS干完活,会在该目录下创建自己的名字
abort,RS如果执行遇到问题,则在该路径下留下名字,然后Hmaster 取消整个snapshot流程

regionserver 负责具体在线region的信息采集
对memstore和WAL进行flush到相应的Hfile和Hlog中,其中,WAL Hlog要记录本次的flushID,restore_snapshot后,即便发生Hbase集群恢复,也只从该flushID恢复,更早的不会再恢复了
把Hfile 创建相应的映射到snapshot相应目录中,只有映射(空文件),这也是snapshot快的原因
把Hlog 文件放入该snapshot相应文件下

hmaster还负责split之前的region(已经不用的,父region)相关信息的snapshot,其实也是把相关信息留到snapshot下的目录下

hmaster 负责校验snapshot结果,确认snapshot目录信息,表信息是否正确,最主要的要确认需要snapshot的region信息是否还在

总结一下:

1

snapshot流程主要涉及3个步骤:

1. 加一把全局锁,此时不允许任何的数据写入更新以及删除

2. 将Memstore中的缓存数据flush到文件中(可选)

3. 为所有HFile文件分别新建引用指针,这些指针元数据就是snapshot

扩展思考:LSM类系统确实比较容易理解,那其他非LSM系统原地更新的存储系统如何实现snapshot呢?

参考:https://yq.aliyun.com/articles/60455?spm=a2c4e.11163080.searchblog.18.151a2ec1uNNVP8

发表评论

电子邮件地址不会被公开。 必填项已用*标注