Pegasus的冷备份功能用来将Pegasus中的数据定期生成快照文件,并备份到其他存储介质上,从而为数据容灾多提供一层保障。但由于备份的是某个时间点的数据快照文件,所以冷备份并不保证可以保留所有最新的数据,也就是说,恢复的时候可能会丢失最近一段时间的数据。
具体来看,冷备份过程要涉及到如下一些参数:
在Pegasus中,以上这几个参数的组合称为一个冷备份策略(backup_policy)。数据的冷备份就行按照policy为单位进行的。
目前Pegasus支持本地文件系统和FDS两种冷备份介质。如果需要支持更多的存储介质(如S3),请联系我们或者直接把pull request砸过来。
FDS是小米生态云提供的存储产品,目前仅面向小米的生态链业务开放。更多详细的介绍请戳这里。
通过使用Pegasus本地文件系统(local service)的备份接口,可以把Pegasus的数据备份到某个目录下。如果第三方存储介质支持以nfs或者Linux Fuse的方式挂载到本地某个目录下的话,该介质就可以通过local service来作为pegasus的备份介质。目前HDFS就是通过fuse的方式来支持的。
我们接下来会以本地文件系统为例,介绍冷备的创建和恢复的相关操作。然后,我们会介绍如何用fuse的方式将HDFS挂载到本地目录下。
需要先设定一些参数来配置系统的冷备份功能:
配置 [meta_server].cold_backup_disable :
[meta_server] ... ;; 设置为false, 不然冷备份功能不会打开 cold_backup_disabled = false ...
配置 [apps.meta].pools 和 [apps.replica].pools :
[apps.meta] ... ;; 需增加THREAD_POOL_LOCAL_SERVICE,不然会没有可用的线程池而coredump pools = ...,THREAD_POOL_LOCAL_SERVICE [apps.replica] ... ;; 需增加THREAD_POOL_LOCAL_SERVICE,不然会没有可用的线程池而coredump pools = ...,THREAD_POOL_LOCAL_SERVICE
配置 [replication].cold_backup_root 和 [replication].max_concurrent_uploading_file_count :
[replication] ;; 这个参数指定了冷备数据要保存到存储介质的什么文件夹下,一般建议填写集群名字 cold_backup_root = onebox ;; 这个参数指定了冷备份上传文件的并发数,根据自己的网络情况进行设置,建议参数为5 max_concurrent_uploading_file_count = 5
添加或修改 [block_service.xxxx] 配置段:
;; 这样的一个section, 就指定了一种存储介质。可以按照自己的需求添加 [block_service.my_backup_media] ;; 指定这种存储介质使用的存储接口是local_service type = local_service ;; 存储介质的初始化参数。对于local_service, 该参数要设置成一个本地目录,表示所有的备份全在此目录下。 args = /home/weijiesun/pegasus_cold_backup
在上面的配置中,一定要区分清楚[replication].cold_backup_root和[block_service.my_backup_media].args所配置的两个路径:
/home/weijiesun/pegasus_cold_backup/onebox
这个目录下。通过Shell工具的add_backup_policy命令可以创建一个冷备份策略:
>>> add_backup_policy -p policy1 -b my_backup_media -a 1 -i 300 -s 16:00 -c 3 add backup policy succeed, policy_name = policy1
几个参数的含义如下:
对于-s参数指定的备份开始时间,其含义和-i指定备份周期是有联系的
比如上面的"-i 60 -s 8:00",就是说下次备份从8:00开始,然后每60秒开启一轮备份。而"-i 86400 -s 8:30",指的是每天的8:30开启一轮备份。
对于-a参数指定的app_id。目前pegasus并没有强制约束某个app_id只能属于一个policy, 但原则上不建议把同一个表加到不同的policy中。
可以用ls_backup_policy列举系统当前所有的策略:
>>> ls_backup_policy [1] name : another_policy backup_provider_type : my_backup_media backup_interval : 600s app_ids : {2} start_time : 16:10 status : enabled backup_history_count : 2 [2] name : policy1 backup_provider_type : my_backup_media backup_interval : 300s app_ids : {1} start_time : 16:00 status : enabled backup_history_count : 3 ls backup policy succeed
也可以用query_backup_policy查询某个指定policy的信息:
>>> query_backup_policy -p policy1 policy_info: name : policy1 backup_provider_type : my_backup_media backup_interval : 300s app_ids : {1} start_time : 16:00 status : enabled backup_history_count : 3 backup_infos: [1] id : 1533801635364 start_time : 2018-08-09 16:00:35 end_time : 2018-08-09 16:01:15 app_ids : {1} query backup policy succeed
如上图所示,当query某个特定的policy时,该policy下已经完成或正在进行的备份也会显示出来。
冷备份策略的一些参数,可以用modify_backup_policy命令进行修改:
>>> modify_backup_policy -p policy1 -s 17:00 -i 600 Modify policy result: ERR_OK >>> query_backup_policy -p policy1 policy_info: name : policy1 backup_provider_type : my_backup_media backup_interval : 600s app_ids : {1} start_time : 17:00 status : enabled backup_history_count : 3 backup_infos: ..... query backup policy succeed
可以修改的参数有:
可以用disable_backup_policy和enable_backup_policy来对某个policy进行禁用和开启
>>> disable_backup_policy -p policy1 disable policy result: ERR_OK >>> ls_backup_policy .......... [2] name : policy1 backup_provider_type : my_backup_media backup_interval : 600s app_ids : {1} start_time : 17:00 status : disabled backup_history_count : 3 ls backup policy succeed >>> enable_backup_policy -p policy1 enable policy result: ERR_OK >>> ls_backup_policy ...... [2] name : policy1 backup_provider_type : my_backup_media backup_interval : 600s app_ids : {1} start_time : 17:00 status : enabled backup_history_count : 3 ls backup policy succeed >>>
对于我们配置好的local_service, 备份存在/home/weijiesun/pegasus_cold_backup/onebox的目录下。
这里稍微做展示,详细的文件内容大家可以自行翻看:
weijiesun@weijiesun-kubuntu ~/pegasus_cold_backup/onebox/policy1 $ pwd /home/weijiesun/pegasus_cold_backup/onebox/policy1 weijiesun@weijiesun-kubuntu ~/pegasus_cold_backup/onebox/policy1 $ ls 1533802216079 1533802236170 1533802256259
可以用restore_app从冷备中恢复表数据
>>> restore_app -c onebox -p policy1 -a temp -i 1 -t 1533802236170 -b my_backup_media -n result sleep 1 second to wait complete... new app_id = 3
其中各个参数的含义如下(这些参数都可以通过在原集群上执行shell命令query_backup_policy
得到):
对于恢复进度,可以用query_restore_status进行查看
>>> query_restore_status 3 -d pid progress(%) restore_status 0 100 ok 1 100 ok 2 100 ok 3 100 ok 4 100 ok 5 100 ok 6 100 ok 7 100 ok the overall progress of restore is 100% annotations: ok : mean restore complete ongoing : mean restore is under going skip : data on cold backup media is damaged, but skip the damaged partition unknown : invalid, should login server and check it
采用HDFS fuse即可,可以参考这篇文章。