【运维实战】Rsync将一台主Web服务器上的文件和目录同步到另一台备份服务器!
在管理 Web 服务器时,确保数据安全且在发生故障时能够快速恢复至关重要,备份和镜像 Web 服务器数据最可靠的方法之一是使用 rsync
。
Rsync 工具可以帮助在两台服务器之间同步文件和目录,非常适合用于创建 Web 服务器数据的备份和镜像。
下面将详细介绍使用 rsync
将 Web 服务器与备份服务器进行同步。同时介绍设置无密码登录,通过 cron
定时任务实现自动化的同步过程。
1.环境说明
现在有两台服务器,一台为主 WEB 服务器,另一台为备份服器,其关键信息如下表所示:
服务器类型 | IP 地址 | 主机名 |
---|---|---|
主 Web 服务器 | 192.168.250.100 | web.test.com |
备份服务器 | 192.168.250.200 | backup.test.com |
其拓扑图如下:
注:两台服务器之间应启用 SSH 访问,这将用于通过 SSH 密钥设置无密码登录,从而实现顺畅的自动化操作。
2.设置无密码 SSH 登录
为了通过 cron
自动化同步过程,需要从主 Web 服务器(主服务器)到备份服务器设置无密码 SSH
登录,这将允许 rsync
在每次运行时无需输入密码。
登录到主 Web 服务器(web.test.com),生成 SSH 密钥,并确保接受默认的文件位置且不设置密钥密码。
ssh-keygen -t rsa -b 2048
接下来,使用 ssh-copy-id
命令将公钥复制到备份服务器:
ssh-copy-id admin@192.168.250.200
最后,通过从主 Web 服务器登录到备份服务器来测试连接:
ssh admin@192.168.250.200
如果无需输入密码即可登录,则表示设置成功。
3.使用 Rsync 同步 Web 服务器数据
现在我们已经设置了无密码 SSH,可以使用 rsync 将 Web 服务器的数据同步到备份服务器。Web 服务器的数据通常存储在 /var/www/html/
目录中,我们将使用该目录进行备份和镜像。
# 基本的 Rsync 命令用法补充
要在主 Web 服务器(web.test.com)上执行一次性备份,请运行以下命令:
rsync -avz /var/www/html/ user@host_ip:/path/to/backup/directory
上述命令的解释如下:
-
-a
表示“归档模式”,可保留文件的权限、时间戳和其他属性。 -
-v
启用详细输出,以便您可以看到正在传输的文件。 -
-z
启用压缩,以减少数据传输量。
1)将文件同步到备份服务器目录
将 /path/to/backup/directory
替换为备份服务器(这里假设备份服务器的备份目录在/data/backup/web
下)上规划存储备份的实际路径。
例如:
rsync -avz /var/www/html/ admin@192.168.250.200:/data/backup/web
2)镜像 Web 服务器目录
如果需要镜像目录(即使备份与源目录完全一致),可以使用 --delete
选项:
rsync -avz --delete /var/www/html/ admin@192.168.250.200:/data/backup/web
--delete
参数会删除备份目录中不再存在于 Web 服务器上的文件,确保两个目录完全一致。
4.使用 Cron 自动化备份
为了确保定期备份,我们可以使用 cron
定时任务自动运行 rsync
命令,这样备份过程将在指定的时间运行,例如每天午夜。
在主 Web 服务器(web.test.com)上,通过运行以下命令打开 crontab
文件:
crontab -e
要将备份设置为每天00:00
运行,请在 crontab
中添加以下行:
0 0 * * * rsync -avz --delete /var/www/html/ admin@192.168.250.200:/data/backup/web
保存 crontab
文件并退出,这样 cron
任务将每天自动在凌晨 12:00
运行(半夜时分)。
也可以根据需要调整时间,比如,要改成每天凌晨 1:00
运行,可以这样修改:
0 1 * * * rsync -avz --delete /var/www/html/ admin@192.168.250.200:/data/backup/web
5.验证备份
设置好 cron
任务后,可以通过检查系统日志来验证 cron
任务是否按预期运行:
grep CRON /var/log/syslog
登录到备份服务器(backup.test.com),检查 /data/backup/web
目录中的文件是否与主 Web 服务器上的 /var/www/html/
目录中的文件一致。
我们还可以通过在主 Web 服务器上删除一个文件,然后验证在下一次 rsync
运行后该文件是否从备份目录中删除,来进行测试。