一、Rsync简介
rsync(Remote Sync,远程同步) 是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客户机的rsync同步操作的服务器称为同步源。在同步过程中,同步源负责提供文件的原始位置,发起端应对该位置具有读取权限。
Rsync 是 Linux 系统下的数据镜像备份工具,使用快速增量备份工具 Remote Sync 可以远程同步, 可以在不同主机之间进行同步,可实现全量备份与增量备份,保持链接和权限,且采用优化的同步算法, 传输前执行压缩,因此非常适合用于架构集中式备份或异地备份等应用。同时Rsync支持本地复制,或者与其他 SSH、rsync 主机同步
二、同步方式
1. 本地同步
在同一台机器的不同目录之间进行文件同步:
rsync -av /src/dir/ /dest/dir/
/src/dir/
:源目录,注意末尾的斜杠表示复制目录的内容而非目录本身。/dest/dir/
:目标目录。
这种方式通常用于本地文件备份和不同硬盘或分区之间的数据迁移。
2. 本地到远程同步
将本地文件同步到远程服务器:
rsync -avz /local/dir/ user@remote:/remote/dir/
user@remote:/remote/dir/
:远程服务器上的目标路径,user@remote
是远程服务器的 SSH 用户和主机地址。-z
:在传输过程中压缩文件,以减少带宽占用。
这种方式常用于将本地数据备份到远程服务器。
3. 远程到本地同步
将远程服务器上的文件同步到本地:
rsync -avz user@remote:/remote/dir/ /local/dir/
- 这个命令会将远程服务器
/remote/dir/
的内容同步到本地的/local/dir/
。
常用于从服务器上下载数据或将远程文件备份到本地。
4. 远程到远程同步
直接在两台远程服务器之间同步数据:
rsync -avz user1@remote1:/remote1/dir/ user2@remote2:/remote2/dir/
user1@remote1:/remote1/dir/
:源远程服务器及目录。user2@remote2:/remote2/dir/
:目标远程服务器及目录。
这种方式可以在不同服务器之间移动数据,而不需要先将数据同步到本地。
5. 守护进程模式
rsync
还可以以守护进程的方式运行,监听特定端口,提供文件同步服务。使用 rsync://
协议来进行同步:
在远程机器上启用 rsync
守护进程:
rsync --daemon
然后在客户端机器上使用 rsync://
协议进行同步:
rsync -avz rsync://remote-host/module /local/dir/
这种方式可以为多用户提供持续的同步服务。
6. 增量同步
rsync
默认执行增量同步,即只传输源文件中不同于目标文件的部分。无需额外选项,增量同步已经是 rsync
的核心特性。
7. 双向同步
rsync
自身并不支持直接的双向同步,但可以通过第三方工具(如 unison
)实现双向文件同步。rsync
更适用于单向同步,特别是在备份和数据分发场景中。
常用选项总结
-a
:归档模式,保留文件权限、符号链接、时间戳等。-z
:压缩传输数据,适用于远程同步。-v
:详细模式,显示同步进度。--delete
:删除目标目录中源目录不存在的文件,保持完全同步。-u
:仅更新较新的文件,避免将旧文件覆盖新文件。
备份的方式:
1. 简单备份
这是最基本的备份方式,直接将本地目录同步到备份目录或远程服务器上。
rsync -av /source/dir/ /backup/dir/
-a
:归档模式,递归复制目录并保留文件属性(权限、时间戳、符号链接等)。-v
:详细输出,同步过程中显示每个文件的信息。/source/dir/
:源目录。/backup/dir/
:备份目录。
这是一种简单的备份方式,适用于本地文件或目录的备份。
2. 远程备份
将本地目录备份到远程服务器,通过 SSH 进行安全的远程同步。
rsync -avz /source/dir/ user@remote:/backup/dir/
-z
:压缩传输数据,适合远程备份。user@remote:/backup/dir/
:远程服务器的目标目录。
这种方式适合将数据从本地备份到远程服务器,以防止本地硬盘损坏或数据丢失。
3. 增量备份
rsync
天然支持增量备份,它只会同步源目录和目标目录中不同的部分。无论是文件新增、修改,还是删除,rsync
都会处理对应的变化。
rsync -av --delete /source/dir/ /backup/dir/
--delete
:删除目标目录中源目录不存在的文件,以确保目标目录和源目录完全一致。
增量备份大大节省了带宽和时间,仅传输变化的文件或文件差异。
4. 定期备份(使用 cron
定时任务)
通过 cron
实现定时备份。首先,编辑 cron
配置:
crontab -e
添加如下条目,设置每天凌晨 3 点自动运行备份任务:
0 3 * * * rsync -av --delete /source/dir/ /backup/dir/
这将定期执行 rsync
备份,可以确保文件每天得到更新备份。
5. 备份并保留历史版本
为了避免在同步中覆盖旧的备份,可以采用日期标记或软链接的方式保留历史版本。
1) 带日期的备份
每次备份时,使用日期作为备份目录名:
rsync -av /source/dir/ /backup/dir-$(date +%Y-%m-%d)/
这会在备份时创建以日期命名的目录,例如 /backup/dir-2024-09-13/
。
2) 使用 --link-dest
进行增量备份
--link-dest
选项可以实现基于硬链接的增量备份,只备份发生变化的文件,同时保留历史备份。每次备份都会创建一个新的目录,但相同文件不会占用额外的磁盘空间。
rsync -av --delete --link-dest=/backup/previous/ /source/dir/ /backup/current/
--link-dest=/backup/previous/
:使用上一次备份作为参考,只备份不同的文件。/backup/current/
:当前备份的目标目录。
这种方式可以节省磁盘空间,同时保留多个备份版本。
6. 排除不必要的文件或目录
在备份时,可能不需要备份某些文件或目录,比如临时文件、日志文件等。可以使用 --exclude
选项排除特定文件或目录。
rsync -av --exclude='*.log' --exclude='/tmp/' /source/dir/ /backup/dir/
--exclude='*.log'
:排除所有以.log
结尾的文件。--exclude='/tmp/'
:排除/tmp/
目录。
这种方式可以精确控制备份的内容,避免不必要的文件占用备份空间。
7. 带带宽限制的备份
如果在网络较慢或带宽有限的情况下进行远程备份,rsync
提供 --bwlimit
选项来限制传输速度。
rsync -avz --bwlimit=1000 /source/dir/ user@remote:/backup/dir/
--bwlimit=1000
:限制传输速度为 1000 KB/s。
这种方式可以避免备份任务占用过多带宽,影响其他网络服务。
8. 检查备份
使用 --dry-run
选项,可以在不实际执行备份的情况下,先查看 rsync
会执行的操作。
rsync -av --dry-run /source/dir/ /backup/dir/
--dry-run
:模拟运行,显示哪些文件将被同步,但不实际执行。
这非常适合在备份之前检查配置是否正确。
总结
rsync
提供了多种灵活的备份方式,支持本地备份、远程备份、增量备份、历史版本保留等。它高效、可靠,并且通过压缩和带宽限制选项,适用于各种网络条件。
三、常用rsync命令
基本格式:rsync [选项] 原始位置 目标位置
常用选项:
- -r:递归模式,包含目录及子目录中的所有文件。
- -l:对于符号链接文件仍然复制为符号链接文件。
- -v:显示同步过程的详细(verbose)信息。
- -z:在传输文件时进行压缩(compress)。
- -a:归档模式,保留文件的权限、属性等信息,等同于组合选项“-rlptgoD”。
- -p:保留文件的权限标记。
- -t:保留文件的时间标记。
- -g:保留文件的属组标记(仅超级用户使用)。
- -o:保留文件的属主标记(仅超级用户使用)。
- -H:保留硬连接文件。
- -A:保留 ACL 属性信息。
- -D:保留设备文件及其他特殊文件。
- --delete:删除目标位置有而原始位置没有的文件。
- --checksum:根据校验和(而不是文件大小、修改时间)来决定是否跳过文件。
四、配置源的两种表达方式
格式一:
用户名@主机地址::共享模块名
rsync -avz backuper@192.168.10.22::wwwroot /opt/
格式二:
rsync://用户名@主机地址/共享模块名
rsync -avz rsync://backuper@192.168.10.22/wwwroot /opt/
五、配置服务端与客户端的实验
前提首先关闭防火墙和增强功能
systemctl stop firewalld
setenforce 0
实验
192.168.10.18 服务端
192.168.10.20 客户端
① 配置rsync源服务器(192.168.10.18)
rpm -q rsync #一般系统已默认安装rsync
#建立/etc/rsyncd.conf 配置文件
vim /etc/rsyncd.conf #添加以下配置项
uid = root
gid = root
use chroot = yes #禁锢在源目录
address = 192.168.10.18 #监听地址
port 873 #监听端口 tcp/udp 873,可通过cat /etc/services | grep rsync查看
log file = /var/log/rsyncd.log #日志文件位置
pid file = /var/run/rsyncd.pid #存放进程 ID 的文件位置
hosts allow = 192.168.10.0/24 #允许访问的客户机地址
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不再压缩的文件类型
[wwwroot] #共享模块名称
path = /var/www/html #源目录的实际路径
comment = Document Root of www.kgc.com
read only = yes #是否为只读
auth users = backuper #授权账户,多个账号以空格分隔
secrets file = /etc/rsyncd_users.db #存放账户信息的数据文件
uid = root
gid = root
use chroot = yes
address = 192.168.10.18
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.10.0/24
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z
[wwwroot]
path = /var/www/html
comment = Document Root of www.kgc.com
read only = yes
auth users = backuper
secrets file = /etc/rsyncd_users.db
#如采用匿名的方式,只要将其中的“auth users”和“secrets file”配置项去掉即可。
#为备份账户创建数据文件
vim /etc/rsyncd_users.db
backuper:123456 #无须建立同名系统用户
chmod 600 /etc/rsyncd_users.db
#保证所有用户对源目录/var/www/html 都有读取权限
chmod +r /var/www/html/
ls -ld /var/www/html/
#启动 rsync 服务程序
rsync --daemon #启动 rsync 服务,以独立监听服务的方式(守护进程)运行
netstat -anpt | grep rsync
#关闭 rsync 服务
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
② 发起端(192.168.10.20)
#将指定的资源下载到本地/opt 目录下进行备份。
格式一:
rsync -avz backuper@192.168.10.18::wwwroot /opt/ #密码123456
格式二:
rsync -avz rsync://backuper@192.168.10.18/wwwroot /opt/
#免交互格式配置:
echo "123456" > /etc/server.pass
chmod 600 /etc/server.pass
crontab -e
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass backuper@192.168.10.18::wwwroot /opt/
#为了在同步过程中不用输入密码,需要创建一个密码文件,保存 backuper 用户的密码,如 /etc/server.pass。在执行 rsync 同步时使用选项 “--password-file=/etc/server.pass” 指定即可。
systemctl restart crond
systemctl enable crond