1.
项目目标与范围定义
目标是实现
香港机房云主机的业务连续性:日常数据备份、7×24小时异地副本、以及在故障时的快速切换。明确RPO(如5分钟/小时)与RTO(如15分钟/1小时)、备份对象(文件、数据库、镜像)和保留策略(7天/30天)。
2.
部署前准备与权限要求
确认两侧环境(香港主站与异地备份站)具备公网或专线连通、SSH密钥互信、备份存储(S3兼容或NFS)、备份用户(backup)及sudo权限。示例:在两端执行ssh-keygen,然后ssh-copy-id backup@remote。
3.
网络与安全设计
建议使用VPC对等或VPN/IPSec专线,配置安全组只打开必要端口(22、3306、5432、80/443)。开启流量加密(rsync over ssh 或 s3s),并在防火墙限制来源IP。
4.
文件级备份:rsync增量方案
安装rsync并配置基础脚本,示例脚本:rsync -az --delete --link-dest=/backup/daily.1 /var/www/ backup@remote:/backup/daily.0。用hardlink实现增量副本,配合crontab定时:0 */6 * * * /usr/local/bin/backup_files.sh。
5.
数据库备份:MySQL/MariaDB 实操
对小库可用mysqldump:mysqldump -ubackup -p'PW' --single-transaction --routines --events --databases dbname > /backup/dbname.sql。对大库推荐Percona XtraBackup:xtrabackup --backup --target-dir=/backup/xtrabak && xtrabackup --prepare --target-dir=/backup/xtrabak,再rsync到远端。
6.
数据库备份:PostgreSQL 实操
使用pg_basebackup做流复制备份:在主库配置postgresql.conf set wal_level=replica;在备库运行:pg_basebackup -h 主机 -D /var/lib/postgresql/backup -U replication -Fp -Xs -P。并持续传输WAL。
7.
镜像与快照策略
利用云厂商快照做定时镜像,示例:每日自动快照 + 保留策略。快照结合异地复制:将快照导出为镜像并上传至异地S3或对象存储,脚本化snapshot->export->upload流程。
8.
对象存储与备份压缩
建议把长期备份存到S3兼容对象存储(如MinIO或云厂商对象存储)。使用rclone或aws cli上传:rclone sync /backup remote:bucket/backup --bwlimit 10M。对数据库备份先用gzip/xz压缩:gzip -9 db.sql。
9.
自动化与调度
用cron或系统d timer调度,配合Ansible统一分发备份脚本与配置。示例cron条目:30 2 * * * /usr/local/bin/backup_db.sh >> /var/log/backup_db.log 2>&1。Ansible playbook示例:copy备份脚本、设置crontab、验证连接。
10.
监控与告警
集成Prometheus + Alertmanager或简单的脚本邮件告警。脚本中检测备份是否生成、文件大小、最近上传时间:if [ ! -f /backup/db.sql.gz ]; then echo "backup missing" | mail -s "备份失败" ops@company.com; fi。
11.
容灾切换设计(Keepalived+VIP)
推荐在同城多节点或跨区用Keepalived做VIP漂移,结合BGP或DNS策略实现流量切换。配置示例(keepalived.conf):vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 virtual_ipaddress { 1.2.3.4 } }。切换时调整优先级或停掉主节点,VIP会漂移到备用。
12.
DNS切换与TTL优化
为减少切换时间,提前把DNS TTL降至60s。切换步骤:将VIP或备用负载均衡IP写入DNS,验证解析后执行流量切换。切换后观察日志并回升TTL。
13.
演练与恢复步骤(实操流程)
定期演练:1) 降低DNS TTL;2) 在非高峰时模拟主机宕机;3) 触发Keepalived或手动启动备用服务;4) 验证数据库最新事务是否同步(检查binlog或WAL位置);5) 验证应用功能。记录RTO/RPO并优化。
14.
回滚与数据一致性校验
在切换后用校验脚本比对关键表行数或checksum(如pt-table-checksum或pg_dump --schema-only + checksum),若不一致按回滚计划恢复主库或回滚流量。
15.
常用脚本示例(备份+上传)
示例bash:#!/bin/bash; DATE=$(date +%F_%H%M); mysqldump -ubackup -pPW db | gzip > /backup/db_$DATE.sql.gz; rclone copy /backup remote:hk-backup/ --min-age 1m && find /backup -mtime +7 -delete。
16.
权限与合规注意事项
备份数据应加密(gpg或对象存储端加密),敏感信息脱敏或单独加密。保留审计日志并定期清理符合合规要求(如PDPO、GDPR视情况)。
17.
成本优化建议
冷热分层:短期热备存在快速恢复,长期冷备上传至低频对象存储;使用增量和hardlink减少存储占用,设置生命周期策略自动归档或删除。
18.
问题:如何保证数据库切换时不丢事务?
19.
回答:采用同步或半同步复制+延迟切换
在主备间配置半同步(MySQL semi-sync)或PostgreSQL synchronous_commit,切换前确认备库已应用到主库最新的binlog/WAL位置:SHOW SLAVE STATUS; 或 pg_last_wal_replay_lsn()。必要时暂停写操作、确认一致后再切换。
20.
问题:如何控制切换时间(RTO)在可接受范围内?
21.
回答:提前降低DNS TTL与VIP方案结合
使用VIP/LoadBalancer能立即切换IP,结合DNS低TTL可将外部缓存缩短。把切换步骤写成Runbook并自动化(脚本化启动服务、调整LB权重、健康检查),演练以验证时间。
22.
问题:日常如何验证备份有效性?
23.
回答:定期恢复演练+校验脚本
每月进行一次从备份恢复到隔离环境的演练,恢复后跑一致性校验(行数、checksum、业务接口测试)。同时在监控中加入备份成功率、上传时延等指标。
来源:云主机香港机房数据备份与容灾切换设计方案落地案例