1.3.9 Recovery

优质
小牛编辑
130浏览
2023-12-01

SDS Point-In-Time Recovery 提供比快照更细粒度的数据备份与恢复机制。开启此功能后,您可以将表的状态恢复到任意指定的时间点。Point-In-Time Recovery基于Stream机制,开启Point-In-Time Recovery的表,后台会定期创建队列的checkpoint,记录了某个时间点在队列中的offset,您可以指定小于最小checkpoint的某个时间戳,将表恢复到此时间戳的状态。

配置项

  • topicName : 队列名,需要在此topic上开启stream
  • snapshotPeriod : 快照周期
  • ttl : 快照过期时间
  • createdTimestamp : 创建时间戳
  • enablePointInTimeRecovery : 开关
  • timeToArchive: 快照归档到fds的时间

使用流程

  • 在Talos中创建topic
  • 建表或更新表schema时,以topic名作为输入,添加并开启Stream,同时添加并开启Point-In-Time Recovery
  • 向表中生产数据
  • 指定时间戳ts, 把表恢复到ts时间点的状态
  • 通过listSnapshots()的返回结果中的pitrSnapshots查看PointInTimeRecovery已存在的快照,找到小于ts的最近的快照, 如该快照已归档到fds,需联系我们进行恢复,否则可以通过restoreSnapshot 自行恢复
  • 通过getFloorStreamCheckpoint(), 找到比快照时间小的最大的checkPoint
  • 根据checkPoint重放队列中的修改日志到快照恢复的表,且根据消息中的时间戳,只重放不大于ts的修改日志

接口

  • listSnapshots(tableName),可以通过返回值的pitrSnapshots查看PointInTimeRecovery已存在的快照
  • getFloorStreamCheckpoint(ts), 查询小于等于某个时间戳的最大stream checkpoint
  • restoreSnapshot(tableName, snapshotName, destTableName, snapshotType), 恢复表, destTableName为恢复出的表名,snapshotType选PITR

需要注意的问题

  • 快照最小周期是1天,最大个数是5,(暂定为5,可调整)
  • 快照归档到fds的时间, 最小为1个月

示例

以示例表为例,下面给出修改表的示例代码

$tableName = "php-note";
$tableSpec = $adminClient->describeTable($tableName);

$tableSpec->metadata->pitr = new PointInTimeRecovery(array(
    'enablePointInTimeRecovery' => true,
    'topicName' => 'test-pirt-topic',
    'ttl' => 7776000,
    'snapshotPeriod' => 2592000,
    'timeToArchive' => 7776000
));

$adminClient->alterTable($tableName, $tableSpec);