备份和恢复元服务
本文将介绍如何备份元服务数据并从备份中恢复。
元快照(Meta snapshot)是元服务在特定时间点的数据备份。元快照可以持久化存储在与 S3 兼容的存储中。
设置备份参数
要创建元快照,需要在第一次尝试备份之前设置backup_storage_url
和backup_storage_directory
的系统参数。
在已有快照的情况下请不要设置 backup_storage_url
和backup_storage_directory
的参数,虽然这并非严格禁止,但如果设置的话,请注意在设置之前拍摄的快照将全部无效,并且不能在还原中使用。
有关如何配置系统参数的信息,请查看如何配置系统参数。
创建元快照
元快照由元服务创建。
以下是使用risectl
新建元快照的示例:
risectl meta backup-meta
risectl
包含在预构建的 RisingWave 二进制文件中。详细信息请查看快速上手指南。
查看现有元快照
调用以下 SQL 命令可以列出现有的元快照:
SELECT meta_snapshot_id FROM rw_catalog.rw_meta_snapshot;
输出示例:
meta_snapshot_id
------------------
3
4
删除元快照
以下是使用risectl
删除元快照的示例:
risectl meta delete-meta-snapshots [snapshot_ids]
从元快照中恢复
运行以下步骤从元快照中恢复。
关闭元服务。
note该步骤尤为重要,因为元备份和恢复过程不会复制 SST 文件。注意任何时候都不允许多个集群在运行具有相同 SST 设置,因为这可能会损坏 SST 文件。
创建空元存储。
将元快照恢复到新建的元存储。
risectl \
meta \
restore-meta \
--meta-store-type etcd \
--meta-snapshot-id [snapshot_id] \
--etcd-endpoints [etcd_endpoints] \
--backup-storage-url [backup_storage_url] \
--backup-storage-directory [backup_storage_directory ] \
--hummock-storage-url [hummock_storage_url] \
--hummock-storage-directory [hummock_storage_directory]如果 etcd 启用身份验证,还要指定以下内容:
--etcd-auth \
--etcd-username [etcd_username] \
--etcd-password [etcd_password] \restore-meta
从备份存储中读取快照数据,并将其写入 etcd 和 Hummock 存储。配置元服务以使用新的元存储。
访问由元快照备份的历史数据
元快照可用于支持历史数据访问,也称为时间旅行查询(time travel query)。
执行以下步骤以进行时间旅行查询。
列出所有有效的历史时间点,即纪元(epoch)。
SELECT safe_epoch,safe_epoch_ts,max_committed_epoch,max_committed_epoch_ts FROM rw_catalog.rw_meta_snapshot;
输出示例:
safe_epoch | safe_epoch_ts | max_committed_epoch | max_committed_epoch_ts
------------------+-------------------------+---------------------+-------------------------
3603859827458048 | 2022-12-28 11:08:56.918 | 3603862776381440 | 2022-12-28 11:09:41.915
3603898821640192 | 2022-12-28 11:18:51.922 | 3603900263432192 | 2022-12-28 11:19:13.922在 (
safe_epoch
,max_committed_epoch
) 范围内为有效纪元。例如,在 [3603859827458048, 3603862776381440] 或在 [3603898821640192, 3603900263432192] 范围内的任何纪元都为有效纪元。safe_epoch_ts
和max_committed_epoch_ts
为提示性代称。设置会话配置
QUERY_EPOCH
。默认状态下为 0,表示禁用历史查询。SET QUERY_EPOCH=[chosen epoch];
之后,此会话中的批量查询将返回截至此时期的数据,而非最新数据。
禁用历史查询。
SET QUERY_EPOCH=0;
RisingWave 仅支持在至少有一个元数据快照的情况下,按特定时间点访问历史数据。