服务器跨区域容灾,双站点异地备份:服务器跨区域容灾
服务器跨区域容灾的核心目标是:当主站点所在区域发生断电、断网或机房故障时,备用站点能快速接管,且数据丢失尽量少。
对零基础用户来说,最实用的起步方式是先搭建双站点异地备份,即主站数据实时或定时同步到异地备站。
下面从准备到验证,一步步说明如何操作。
准备两台服务器和网络环境
搭建双站点异地备份前,需要准备以下资源:
- 两台处于不同地理区域的服务器,例如一台在华东,一台在华南。建议系统版本保持一致,本文以 CentOS 7 和 Ubuntu 20.04 为例,其他发行版命令略有差异。
- 两台服务器之间网络互通,安全组或防火墙放行 SSH 端口(默认 22)和 rsync 默认端口(873,若使用 SSH 隧道则只需 22)。
- 主站服务器安装
rsync,备站服务器安装rsync和lsyncd(如需实时同步)。
安装命令(以 CentOS 为例):
yum install -y rsync lsyncd
Ubuntu 使用:
apt update && apt install -y rsync lsyncd
在两台服务器上分别创建用于同步的系统用户,例如 backupuser,并配置 SSH 免密登录。
在主站执行:
ssh-keygen -t rsa
ssh-copy-id backupuser@备站IP
验证免密登录:ssh backupuser@备站IP 能直接进入即成功。
用 rsync 完成首次全量同步
首次同步数据量较大,建议在业务低峰期执行。
在主站运行:
rsync -avz --delete /var/www/html/ backupuser@备站IP:/backup/html/
参数说明:-a 归档模式保留权限,-v 显示过程,-z 压缩传输,--delete 删除备站多余文件,保持与主站一致。
如果希望同步更安全,可以加上 -e "ssh -p 22" 指定 SSH 端口。
执行完成后,登录备站检查 /backup/html/ 目录,确认文件数量与主站一致。
可以用 du -sh /var/www/html 和 du -sh /backup/html 对比大小,误差在合理范围内即可。
首次全量同步完成后,后续增量同步才会更快。 如果数据量超过 100GB,建议先打包传输再解压,避免中途断线重传。
配置 lsyncd 实现准实时同步
如果希望主站文件一有变化就同步到备站,可以用 lsyncd 监控目录。
在主站创建配置文件 /etc/lsyncd.conf:
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
inotifyMode = "CloseWrite",
maxProcesses = 2,
}
sync {
default.rsyncssh,
source = "/var/www/html/",
host = "backupuser@备站IP",
targetdir = "/backup/html/",
exclude = { ".git", "*.tmp" },
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
},
ssh = {
port = 22,
},
delay = 5,
}
保存后启动服务:
systemctl start lsyncd
systemctl enable lsyncd
检查日志 tail -f /var/log/lsyncd/lsyncd.log,看到 Normal 状态即正常。
在主站新建一个测试文件,几秒后到备站查看是否出现,出现则实时同步生效。
lsyncd 适合文件数量多、单文件不大的场景;
如果单文件超过 1GB 或目录极深,建议改用定时 rsync 加 inotify 脚本,减少资源占用。
避坑指南:权限、防火墙与数据一致性
常见问题一:同步报错 Permission denied。
原因是备站目标目录权限不足,确保 backupuser 对 /backup/html/ 有写权限,可执行 chown -R backupuser:backupuser /backup/html。
常见问题二:防火墙拦截 rsync 端口。
如果直接使用 rsync 守护进程模式,需放行 873 端口;
本文使用 SSH 隧道,只需放行 22 端口。
检查命令:firewall-cmd --list-ports 或 ufw status。
常见问题三:数据库文件同步不一致。
直接同步 MySQL 数据目录可能导致文件损坏。
正确做法是先 mysqldump 导出 SQL 文件,再同步 SQL 文件到备站,在备站导入。
导出命令:
mysqldump -u root -p --all-databases > /backup/all.sql
跨区域容灾中,数据一致性比同步速度更重要。 建议对数据库采用“导出加传输”方式,对静态文件采用实时同步。
验证容灾切换是否可用
备份完成不等于容灾可用。
需要定期做切换演练:
- 在备站停止同步服务,模拟主站故障。
- 修改本地 hosts 或 DNS 解析,将域名指向备站 IP。
- 启动备站 Web 服务(如 Nginx),访问页面检查是否正常显示。
- 在备站尝试写入数据,确认业务可运行。
- 演练结束后,恢复主站并重新同步差异数据。
每次演练后记录切换耗时和数据丢失量。如果切换超过 30 分钟或丢失超过 5 分钟数据,需要优化同步频率或增加带宽。
常见疑问
双站点异地备份需要专线吗? 不强制。
普通公网加 SSH 加密即可,但跨区域延迟高时建议压缩传输或限制同步时段。
rsync 和 lsyncd 能同时用吗? 可以。
lsyncd 负责实时增量,rsync 定期全量校验,两者互补。
备站需要多大磁盘? 至少与主站数据量相同,建议预留 20% 余量用于临时文件和版本回滚。
跨区域容灾不是一次配置就结束,建议每季度检查同步日志、磁盘空间和切换脚本。
如果你正在搭建双站点异地备份,先按本文完成首次全量同步和实时同步,再通过切换演练验证效果,遇到异常优先检查权限和防火墙。