1) 目标:保证日本VPS上线上服务在单点故障、误删或机房级故障下能在可接受的RTO(恢复时间目标)与RPO(数据丢失目标)内恢复。
2) 范围:文件系统、日志、配置、数据库、SSL证书与外部依赖(DNS、负载均衡)。
3) 要求:可自动化、可验证、加密传输/存储、成本可控。
1) 与VPS服务商申请API Key与快照权限;在控制面板确认快照、带宽和额外磁盘限制。
2) 在VPS上准备root或sudo账号、SSH密钥、tmux/screen用于长期任务。
3) 安装必要工具:rsync, borgbackup或restic, pv, gzip, mysql-client/postgresql-client, rclone, jq, curl。
1) 分层:关键数据(DB)- 高频备份(10min至1h),应用代码/配置 - 每小时或每次部署,系统镜像 - 每日快照,异地归档 - 每日/每周。
2) 决定保存周期(如日备7天、周备4周、月备6个月)并在备份工具中实现prune策略。
3) 加密与访问控制:本地加密密钥/密钥管理策略,限制恢复权限。
1) 云快照(推荐):使用VPS提供商API创建快照:示例(伪命令)curl -X POST "https://api.provider.jp/v1/instances/{id}/snapshot" -H "Authorization: Bearer $API_KEY".
2) LVM快照(自管VPS):sudo lvcreate -L1G -s -n snap-root /dev/vg0/root;mount /dev/vg0/snap-root /mnt/snap;tar/rsync导出后删除快照:lvremove /dev/vg0/snap-root。
3) 快照后导出到异地对象存储:使用rclone或provider的API上传镜像文件。
1) 初始化仓库(restic示例):export RESTIC_REPOSITORY=sftp:user@backup.jp:/path; restic init。
2) 备份命令示例:restic backup /var/www /etc --exclude /var/www/cache --tag web; 或 borg init --encryption=repokey /backup/repo;borg create /backup/repo::'{hostname}-{now}' /var/www。
3) 增量与Prune:restic forget --keep-daily 7 --keep-weekly 4 --prune;borg prune --keep-daily=7 --keep-weekly=4 --prefix '{hostname}-'。
1) MySQL(一致性):mysqldump --single-transaction --quick --routines --triggers --events --databases db1 db2 > /backup/db.sql;或使用Percona XtraBackup进行物理备份(xtrabackup --backup ...)。
2) PostgreSQL:pg_basebackup -h localhost -D /backup/pg_base -U replicator -Ft -z -P;或使用pg_dumpall用于逻辑备份。
3) 备份后立即上传至远端(restic/borg或rclone到S3兼容存储),并在备份日志中记录binlog/ WAL位置以支持增量恢复。
1) 配置rclone同步:rclone config(设置S3/Tencent/Alibaba/自建S3兼容端点),rclone sync /backup remote:bucket/vps-host --exclude *.tmp。
2) 在不同日本机房或跨国(东京-大阪)保持至少一份冷备份,使用较低频率减少流量成本。
3) 验证:定期从对象存储下载并比对sha256sum,自动化脚本检查文件完整性。
1) 文件恢复(restic示例):restic snapshots; restic restore
2) 数据库恢复:MySQL先停止服务,恢复.sql后启动并按binlog/WAL回放到所需时间点;Postgres使用pg_restore或恢复物理备份并重放WAL。
3) 整机恢复:若快照可直接还原为新实例,使用提供商控制台恢复镜像;自建镜像则在新实例挂载镜像并调整网络配置(/etc/fstab, SSH keys)。
1) DNS策略:设置低TTL(如60s),使用主从DNS或Global Traffic Manager;切换时先把记录指向备用IP。
2) 漂浮IP/Keepalived:使用keepalived在同一机房内实现VIP漂移;跨机房推荐云提供商的浮动IP或负载均衡器。
3) 健康检查与自动化:结合监控(Prometheus/Datadog)触发脚本自动切换并通知团队。
1) 自动化:使用Ansible/Cron/Systemd timers部署备份任务并在任务后调用prune与上传脚本。示例crontab:0 */1 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1。
2) 监控:备份成功率、时长、仓库空间、最近一次恢复测试;设置告警邮件/Slack。
3) 演练:每月进行恢复演练(至少文件和数据库),每季度做整机恢复演练并记录RTO/RPO差距。
Q:怎么保证MySQL或Postgres备份在不停服情况下是一致的?
A:MySQL使用--single-transaction的逻辑备份对InnoDB表可实现一致性;若有混表或需要物理备份,使用Percona XtraBackup做热备并记录binlog位置;Postgres推荐使用pg_basebackup加上WAL归档或使用逻辑备份与WAL回放,备份完成后验证恢复过程。
Q:备份到第三方对象存储时如何保证数据安全?
A:在本地对备份加密(restic/borg内置加密);使用TLS传输(HTTPS/SFTP);对象存储启用版本控制与服务器端加密,再配置IAM策略限制访问;定期轮换加密密钥并安全保管。
Q:遇到东京机房全面不可用时,如何快速将线上服务切换到大阪或海外节点?
A:事先准备备用镜像与数据同步(异地S3或rsync),把DNS TTL降至低值,启动备用实例并通过脚本自动恢复配置/证书、挂载最新备份、更新DNS指向备用IP;若使用云负载均衡或Anycast,可更快完成切换,并在切换后执行完整测试确认服务健康。