rsync远程同步

一、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值