rsync 远程同步

rsync 远程同步

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。

已支持跨平台,可以在Windows与Linux间进行数据同步。


在这里插入图片描述

特性

可以镜像保存整个目录树和文件系统。

可以很容易做到保持原来文件的权限、时间、软硬链接等等。

无须特殊权限即可安装。

快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。

安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。

支持匿名传输,以方便进行网站镜像

rsync服务器配置

rsync服务器: 192.168.237.128

[root@localhost ~]# rpm -q rsync
rsync-3.0.9-18.el7.x86_64
[root@localhost ~]# vim /etc/rsyncd.conf
vim /etc/rsyncd.conf			  	 		#添加以下配置项
uid = nobody					    		#也可以为root
gid = nobody					    		#也可以为root
use chroot = yes							#禁锢在源目录
address = 192.168.237.128				#监听地址,监听本机地址
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.237.0/24				#允许同步的客户机网段
[wwwroot]					        		#共享模块名称
path = /var/www/html						#源目录的实际路径(同步的目录)
comment = Document Root of www.wpc.com
read only = yes					    		#是否为只读
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z		#同步时不再压缩的文件类型
auth users = backuper						#授权账户,多个账号以空格分隔
secrets file = /etc/rsyncd_users.db		    #存放账户信息的数据文件
:wq
[root@localhost ~]# vim /etc/rsyncd_users.db
backuper:abc123					#无须建立同名系统用户
:wq
[root@localhost ~]# chmod 600 /etc/rsyncd_users.db   #补充:SSH -i 密钥文件位置 root@192.168.200.1   #授权远程登录,密钥文件的权限需要是600

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ll
总用量 0
[root@localhost html]# echo “this is wpc” > /var/www/html/wpc.txt
[root@localhost html]# chmod +r /var/www/html/
[root@localhost html]# ls -ld /var/www/html
drwxr-xr-x. 2 root root 21 617 16:14 /var/www/html
[root@localhost html]# rsync --daemon
[root@localhost html]# netstat -anpt | grep rsync
tcp        0      0 192.168.237.128:873     0.0.0.0:*               LISTEN      3442/rsync       

rsync基础命令参数

参数说明
-a, ––archive归档模式,表示以递归方式传输文件,并保持所有文件属性,等价于 -rlptgoD (注意不包括 -H)
-r, ––recursive对子目录以递归模式处理
-l, ––links保持符号链接文件
-H, ––hard-links保持硬链接文件
-p, ––perms保持文件权限
-t, ––times保持文件时间信息。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新检查出mtime不同从而导致增量传输无效
-g, ––group保持文件属组信息
-o, ––owner保持文件属主信息 (super-user only)
-D保持设备文件和特殊文件 (super-user only)
-z, ––compress在传输文件时进行压缩处理
––exclude=PATTERN指定排除一个不需要传输的文件匹配模式
––exclude-from=FILE从 FILE 中读取排除规则
––include=PATTERN指定需要传输的文件匹配模式
––include-from=FILE从 FILE 中读取包含规则
––copy-unsafe-links拷贝指向SRC路径目录树以外的链接文件
––safe-links忽略指向SRC路径目录树以外的链接文件(默认)
––existing仅仅更新那些已经存在于接收端的文件,而不备份那些新创建的文件
––ignore-existing忽略那些已经存在于接收端的文件,仅备份那些新创建的文件
-b, ––backup当有变化时,对目标目录中的旧版文件进行备份
––backup-dir=DIR与 -b 结合使用,将备份的文件存到 DIR 目录中
––link-dest=DIR当文件未改变时基于 DIR 创建硬链接文件
––delete删除那些接收端还有而发送端已经不存在的文件
––delete-before接收者在传输之前进行删除操作 (默认)
––delete-during接收者在传输过程中进行删除操作
––delete-after接收者在传输之后进行删除操作
––delete-excluded在接收方同时删除被排除的文件
-e, ––rsh=COMMAND指定替代 rsh 的 shell 程序
––ignore-errors即使出现 I/O 错误也进行删除
––partial保留那些因故没有完全传输的文件,以是加快随后的再次传输
––progress在传输时显示传输过程
-P等价于 ––partial ––progress
––delay-updates将正在更新的文件先保存到一个临时目录(默认为 “.tmp”),待传输完毕再更新目标文件
-v, ––verbose详细输出模式
-q, ––quiet精简输出模式
-h, ––human-readable输出文件大小使用易读的单位(如,K,M等)
-n, ––dry-run显示哪些文件将被传输
––list-only仅仅列出文件而不进行复制
––rsyncpath=PROGRAM指定远程服务器上的 rsync 命令所在路径
––password-file=FILE从 FILE 中读取口令,以避免在终端上输入口令,通常在 cron 中连接 rsync 服务器时使用
-4, ––ipv4使用 IPv4
-6, ––ipv6使用 IPv6
-bwlimit=KBPS限制I/O带宽
––version打印版本信息
––help显示帮助信息

rsync备份

rsync源服务器:192.168.237.128

rsync客户端:192.168.237.148(配置免交互)

rsync备份指定资源到本地,类似于cp命令

  • rsync [选项] 原始位置 目标位置
[root@localhost html]# rsync /etc/fstab /opt
[root@localhost html]# ll /opt
总用量 1964
-rw-r--r--. 1 root root   10240 3月   3 13:32 123.txt
-rw-r--r--. 1 root root       7 3月   3 13:32 abc.txt
-rw-r--r--. 1 root root     617 6月  17 16:28 fstab
drwxrwxr-x. 6 root root    4096 614 17:16 redis-5.0.7
-rw-r--r--. 1 root root 1984203 6月   9 18:28 redis-5.0.7.tar.gz
drwxr-xr-x. 2 root root       6 326 2015 rh

[root@localhost opt]# rsync -rl /etc/fstab /boot/grub /opt
[root@localhost opt]# ll
总用量 1964
-rw-r--r--. 1 root root   10240 3月   3 13:32 123.txt
-rw-r--r--. 1 root root       7 3月   3 13:32 abc.txt
-rw-r--r--. 1 root root     617 6月  17 16:35 fstab
drwxr-xr-x. 2 root root      27 617 16:35 grub
drwxrwxr-x. 6 root root    4096 614 17:16 redis-5.0.7
-rw-r--r--. 1 root root 1984203 6月   9 18:28 redis-5.0.7.tar.gz
drwxr-xr-x. 2 root root       6 326 2015 rh

rsync备份指定资源到其他服务器

  • 用户名@主机地址::共享模块名

  • rsync://用户名@主机地址/共享 模块名

[root@localhost ~]# rsync -avz backuper@192.168.237.128::wwwroot /opt
Password: 
receiving incremental file list
./
wpc.txt

sent 83 bytes  received 170 bytes  101.20 bytes/sec
total size is 18  speedup is 0.07
[root@localhost ~]# ll /opt
总用量 1948
drwxrwxr-x. 6 root root    4096 614 17:27 redis-5.0.7
-rw-r--r--. 1 root root 1984203 6月   9 18:28 redis-5.0.7.tar.gz
drwxr-xr-x. 2 root root       6 326 2015 rh
-rw-r--r--. 1 root root      18 6月  17 16:14 wpc.txt
[root@localhost opt]# cat wpc.txt 
“this is wpc”

[root@localhost ~]# cd /opt
[root@localhost opt]# rm wpc.txt 
rm:是否删除普通文件 "wpc.txt"?y
[root@localhost opt]# rsync -avz rsync://backuper@192.168.237.128/wwwroot /opt
Password: 
receiving incremental file list
./
wpc.txt

sent 83 bytes  received 170 bytes  72.29 bytes/sec
total size is 18  speedup is 0.07
[root@localhost opt]# ll
总用量 1948
drwxrwxr-x. 6 root root    4096 614 17:27 redis-5.0.7
-rw-r--r--. 1 root root 1984203 6月   9 18:28 redis-5.0.7.tar.gz
drwxr-xr-x. 2 root root       6 326 2015 rh
-rw-r--r--. 1 root root      18 6月  17 16:14 wpc.txt
[root@localhost opt]# cat wpc.txt 
“this is wpc”
  • 免交互格式配置
[root@localhost opt]# rm -rf wpc.txt
[root@localhost opt]# echo "abc123" > /etc/server.pass
[root@localhost opt]# chmod 600 /etc/server.pass
[root@localhost opt]# ll
总用量 4
-rw-r--r--. 1 root root 18 6月  17 16:14 wpc.txt
[root@localhost opt]# cat wpc.txt 
“this is wpc”
  • 设置定时任务
[root@localhost opt]# crontab -e
30 22 * * * /usr/bin/rsync -avz --delete --password-file=/etc/server.pass backuper@192.168.237.128::wwwroot /opt/
:wq
[root@localhost opt]# systemctl restart crond
[root@localhost opt]# systemctl enable crond

rsync+inotify

使用inotify通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
将inotify机制与rsync工具相结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作。否则处于静跃等待状态。这样,就避免了按固定周期备份时存在的延迟性、周期过密等问题。
因为inotify通知机制由Linux内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步。

配置inotify+rsync 实时同步

rsync源服务器:192.168.237.128 (配置rsync+httpd)

rsync客户端:192.168.237.148 (配置rsync+inotify)

rsync客户端

[root@localhost ~]# cat /proc/sys/fs/inotify/max_queued_events
16384
[root@localhost ~]# cat /proc/sys/fs/inotify/max_user_instances
128
[root@localhost ~]# cat /proc/sys/fs/inotify/max_user_watches
8192

[root@localhost ~]# vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
:wq

[root@localhost ~]# vim /etc/sysctl.conf
[root@localhost ~]# sysctl -p
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

[root@localhost ~]# yum install gcc gcc-c++ make -y

[root@localhost ~]# cd /opt
[root@localhost opt]# tar zxvf inotify-tools-3.14.tar.gz
[root@localhost opt]# cd /opt/inotify-tools-3.14
[root@localhost inotify-tools-3.14]# ./configure
[root@localhost inotify-tools-3.14]# make && make install

#执行“inotifywait”命令,然后在另一个终端向/var/www/html 目录下添加文件、移动文件,跟踪屏幕输出结果。
#执行下面命令后会进入监听模式,无法操作,所以需要另开一个终端页面进行作
[root@localhost inotify-tools-3.14]# inotifywait -mrq -e modify,create,move,delete /opt

[root@localhost ~]# vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"     #持续监控
RSYNC_CMD="rsync -apzH --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.237.128::wwwroot/"     #进行同步
$INOTIFY_CMD       #输出监控内容
$INOTIFY_CMD | while read DIRECTORY EVENT FILE     #遍历
##while判断是否接收到监控记录
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then    #判断是否正在执行同步
        $RSYNC_CMD
    fi
done
:wq
[root@localhost ~]# chmod +x /opt/inotify.sh
[root@localhost ~]# chmod +x /etc/rc.d/rc.local
[root@localhost ~]# echo '/opt/inotify.sh' >> /etc/rc.d/rc.local			#加入开机自动执行
[root@localhost ~]# mkdir -p /var/www/html/
[root@localhost ~]# cd /var/www/html
[root@localhost ~]# cd /opt
[root@localhost opt]# ./inotify.sh &
[3] 6645
[root@localhost opt]# chmod 777 /var/www/html
[root@localhost opt]# cd /var/www/html
[root@localhost html]# echo "this is test" >> test.txt

rsync源服务器测试

[root@localhost html]# ll
总用量 4
-rw-r--r--. 1 root root 13 6月  17 19:12 test.txt
[root@localhost html]# cat test.txt 
this is test

rsync快速删除大量文件

在linux下删除大量文件,像/usr/local/nginx/proxy_temp的nginx缓存等,那么rm -rf * 可能就不好使了,因为要等待很长一段时间。在这种情况下我们可以使用rsync来巧妙处理。rsync实际用的是替换原理。

建立一个空的文件夹
[root@localhost ~]# mkdir /home/blank

用rsync删除目标目录
[root@localhost ~]# rsync --delete-before -a -H -v --progress --stats /home/blank/ /usr/local/nginx/proxy_temp
参数说明
–delete-before接收者在传输进行删除操作
-a归档模式,表示以递归方式传输文件,并保持所有文件属性
-H保持硬连接的文件
-v详细输出模式
–progress在传输时显示传输过程
–stats给出某些文件的传输状态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值