知识库

拍摄快照,并恢复它

快照是如何拍摄的,为什么崩溃一致性通常就足够了,当不够时如何静默,以及恢复对运行中实例的影响。

这里的快照是什么

实例磁盘在某个时间点的副本,在存储层获取,并写入与实例运行所在不同的存储。槽位按包出售;一个槽位容纳一个快照,当您覆盖它时会被重用。获取快照不会暂停实例,随后几分钟内的写时复制成本很小,通常不会在延迟图上显示出来。

它不是备份。快照与实例位于同一站点,这能保护您免受自己的rm,而不是站点故障。异地节点备份是单独的可选附加项,在您这边加密,写入不同的城市。

获取快照

curl -s -X POST https://paragonvps.com/api/v1/instances/<instance-id>/snapshots -H "Authorization: Bearer $Paragon_TOKEN" -H "Content-Type: application/json" -d '{"label":"pre-upgrade"}'
curl -s https://paragonvps.com/api/v1/instances/<instance-id>/snapshots -H "Authorization: Bearer $Paragon_TOKEN" | jq -r '.[] | .id + " " + .label + " " + .created'

崩溃一致性,以及何时不够

正在运行的实例的快照正好是断电后磁盘的样子。我们镜像中的 PostgreSQL、MariaDB 和每个日志文件系统在启动时都会从该状态恢复,因为恢复此类状态正是它们的功能。风险并不真正在于数据库,而是您自己的应用程序,它可能正在半途中写入两个需要相互一致的文件。

在需要干净一致点的情况下,请刷新并冻结数据卷,只需一秒:

sync
fsfreeze -f /srv/data
# take the snapshot here
fsfreeze -u /srv/data

冻结数据卷。切勿冻结/。冻结的根文件系统会阻止旨在解冻它的进程做任何事,解决办法是硬重置。

对于数据库,更简洁的选择是获取快照并让引擎恢复,然后检查恢复是否成功:

sudo -u postgres pg_isready
journalctl -u postgresql -n 50

恢复

恢复会停止实例,将磁盘替换为快照,然后重新启动。只需几秒,而非几分钟。地址不变,您设置的反向 DNS 保持不变,但自快照以来的所有写入都会丢失。

这包括让您决定恢复的任何东西。如果您有任何可能希望读取损坏状态的日志,请先获取快照,然后恢复覆盖。

curl -s -X POST https://paragonvps.com/api/v1/snapshots/<snapshot-id>/restore -H "Authorization: Bearer $Paragon_TOKEN"

计划

每个实例的计划随平台修订版 5.4 引入。每日固定时间搭配滚动窗口是常见选择:一旦槽位满了,最旧的会被删除。

curl -s -X PUT https://paragonvps.com/api/v1/instances/<instance-id>/snapshot-schedule -H "Authorization: Bearer $Paragon_TOKEN" -H "Content-Type: application/json" -d '{"cron":"20 3 * * *","keep":7}'

选择对您工作负载来说是空闲的时间,而不是对我们空闲的时间。快照的存储成本与之后的更改量成正比,因此在夜间批处理作业期间触发的计划保存的数据远多于一小时后触发的计划。

取消实例会删除其快照

立即删除,没有宽限期,因为它们存储在实例上。取消后您想保留的任何内容都应放在异地备份或完全不在我们这里。

随时恭候

选择城市,选择大小,用加密货币支付。

无需填写关于您的身份信息的表格,无需等待人工审批,无需电话验证。账单结清后,凭证将发送到您的邮箱。