Klustron 逻辑备份和恢复
Klustron 逻辑备份和恢复
该功能让用户可以以SQL语句的形式备份集群的全量或者其中的部分数据(database, schema, table),并且结合流式增量备份数据,做到在任何时候使用全量和增量备份数据,还原一个目标对象(database, schema, table)到指定时间点,也就是Point in Time Restoration(PiTR)。该功能还可以用于导出集群全量或者部分数据到其他数据库系统中。特别是结合Klustron-CDC功能,可以实现从Klustron集群中全量和流式增量导出数据到其他数据库系统。
除了自动对全集群数据做全量逻辑备份之外,用户还可以在任何时候手动启动逻辑备份操作,全量备份一个Klustron集群的部分数据,例如一个 database, schema, 或者table。 使用逻辑备份数据在任何时候可以恢复一个集群或者其中的特定库表。 相比于物理备份只能对全集群数据做全量备份和PiTR还原,逻辑备份的备份和PiTR还原的粒度可以更细,具有更好的灵活性和更广泛的适用场景。
1 需求背景
使用逻辑备份恢复的常见场景包括:
a. 用户可以在执行危险操作之前,先备份一个database或者table。万一操作失败可以迅速恢复这个被误操作损坏的database或者table,并且这些误操作不会影响其他database和table,集群也不需要停服。
b. 对集群的不同部分的数据做不同频率的备份,例如对高价值数据或者频繁更新的数据就每12个小时全量备份一次,对于变化不频繁的库表,可以每周备份一次。
c. 将Klustron的集群导出并灌入其他数据库系统
2 实现原理
2.1 表逻辑备份
任务处理流程:cluster_mgr 收到业务逻辑回档任务,进行参数校验和参数解析等工作。由于 Klustron 为计算存储分离架构,需要根据计算节点查找要备份的表类型,如果为分区表,需要找到该表映射到那些存储节点。将解析后任务发送给 node_mgr 节点进行具体处理。
具体处理流程:
- 利用 kunlun_pgdump 工具,通过计算节点将表结构信息 dump 出来。kunlun_pgdump 在 pgdump 基础上根据 Klustron 特殊表结构信息进行扩展。
- 根据备份表信息,连接对应存储节点利用 mydump 工具将表数据 dump 出来。
- 将表结构和各个计算节点上表数据打包推送动冷备机器上。
2.2 表逻辑恢复
任务处理流程:cluster_mgr 收到业务逻辑恢复任务,进行参数校验和参数解析等工作。根据回档到时间点和冷备参数查询要恢复表逻辑备份数据是否存在。将解析后任务发送给 node_mgr 节点进行具体处理。
具体处理流程:
- node_mgr 登录冷备机器根据回档时间点查询当前最接近回档时间全量逻辑备份数据。选择最接近备份数据包,在通过备份 binlog 进行增量恢复时就会时间更短,提高恢复速度。
- 根据全量逻辑数据时间点和要回档时间点,找到关联各个存储节点上备份 binlog 数据。由于 Klustron 支持表搬迁功能,导致需要查找在全量逻辑数据时间点和要回档时间点之间有没有出现表搬迁操作,如果有需要根据表搬迁信息找到搬迁后备份 binlog。
- node_mgr 将找到的逻辑备份数据包 dump 到 node_mgr 机器上,利用 kunlun_pgrestore 通过目标计算节点恢复表结构。利用 kunlun_myloader 通过目标计算节点 mysql 端口恢复表数据。
- dump 要恢复备份 binlog,利用 binlog2sync 解析 binlog,通过目标计算节点 mysql 端口恢复增量数据。
3 配置使用
3.1 通过 xpanel 对需要库表发起逻辑备份,如下图操作
逻辑备份数据存储的设施方法与物理备份完全相同,参考此文完成备份数据存储设施配置。
需要逻辑备份表结构以及数据
3.1.1 选择需要逻辑备份表所在集群设置
点击保存,则发起对该表逻辑备份
3.2 通过 xpanel 对逻辑备份库表发起逻辑恢复,如下图操作
3.2.1 选择要逻辑恢复表所在集群设置
如果步骤操作后点击保存,则发起对备份表进行逻辑恢复
3.3 通过 cluster_mgr api 进行表逻辑备份
curl -d '
{
"version":"1.0",
"job_id":"",
"job_type":"logical_backup",
"timestamp":"1435749309",
"user_name":"kunlun_test",
"paras":{
"cluster_id":"1",
"backup":[{
"db_table":"postgres_$$_public.transfer_account",
"backup_time":"01:00:00-02:00:00"
},{
"db_table":"postgres_$$_public.test2",
"backup_time":"01:00:00-02:00:00"
}]
}
}
' -X POST http://127.0.0.1:58000/HttpService/Emit
该接口为异步接口,返回job_id,根据返回的job_id查询任务执行状态。
curl -d '
{
"version":"1.0",
"job_id":"10",
"job_type":"get_status",
"timestamp":"1435749309",
"user_name":"kunlun_test",
"paras":{
}
}
' -X POST http://127.0.0.1:58000/HttpService/Emit
在hdfs上可以查看到当前逻辑备份数据
3.4 通过cluster_mgr api进行表逻辑恢复
curl -d '
{
"version":"1.0",
"job_id":"",
"job_type":"logical_restore",
"timestamp":"1435749309",
"user_name":"kunlun_test",
"paras":{
"src_cluster_id":"1",
"dst_cluster_id":"2",
"db_table":"postgres_$$_public.transfer_account",
"restore_time":"2023-01-09 06:15:00"
}
}
' -X POST http://127.0.0.1:58000/HttpService/Emit
该接口为异步接口,返回job_id,根据返回的job_id查询任务执行状态。
curl -d '
{
"version":"1.0",
"job_id":"10",
"job_type":"get_status",
"timestamp":"1435749309",
"user_name":"kunlun_test",
"paras":{
}
}
' -X POST http://127.0.0.1:58000/HttpService/Emit
回档成功后,目标集群中表结构以及数据