Rsync远程同步

2022-07-03 16:20:58 浏览数 (1)

rsync简介:

rsync是一款优秀的、快速的、多平台的本地或远程数据镜像同步备份工具。适用于Unix/Linux/Windows等多种平台。

在同步备份时,默认情况下,rsync通过其独特的quick check算法,仅同步大小或者最后修改时间发生变化的文件或目录(也可根据权限,属主等变化同步,需指定参数)甚至是只同步一个文件里有变化的内容部分,所以,可以实现快速的同步数据的功能。

rsync和cp,scp的区别:

cp,scp工具拷贝每次均为完整拷贝,而rsync除了完整备份,还具备增量拷贝的功能,因此,从性能及效率上更胜一筹。

rsync工作方式:      rsync大致使用三种主要的方式来传输数据:   1.本地数据传输   2.通过rcp,ssh等通道传输   3.以守护进程的方式传输数据

本地数据传输 语法:   rsync [OPTION] SRC... [DEST] SRC:源文件 DEST:目标文件 option参数说明:    #一般使用-avz就可以 -a:归档模式,递归并保留对象属性,等同于 -rlptgoD -r:递归模式,包含目录及子目录中所有文件 -l:对于符号链接文件仍然复制为符号链接文件 -p:保留文件的权限标记 -t:保留文件的时间标记 -g:保留文件的属组标记(仅超级用户使用) -o:保留文件的属主标记(仅超级用户使用) -D:保留设备文件及其他特殊文件 -v:显示同步过程的详细(verbose)信息 -z:在传输文件时进行压缩(compress) -H:保留硬连接文件 -A:保留ACL属性信息 --delete:删除目标位置有而原始位置没有的文件 --checksum:根据对象的校验和来决定是否跳过文件

演示:将/etc 目录下的文件拷贝到/tmp 目录下  [root@localhost ~]# rsync -avz -P /etc /tmp/  #第一次拷贝的时候时间比较长,输出信息也比较多 第二次拷贝非常快,因为/etc目录下没有数据更新  [root@localhost ~]# rsync -avz -P /etc /tmp/ building file list ... 2141 files to consider

sent 61983 bytes  received 20 bytes  124006.00 bytes/sec total size is 88435897  speedup is 1426.32 注意:rsync -avz -P /etc/ /tmp/      仅同步etc目录里的内容,etc本身不同步        rsync -avz -P /etc /tmp/      把etc和etc里面的内容全部考到tmp目录下 通过远程shell进行数据传输: 语法: 拉取:rsync [option] [USER@]HOST:SRC...  [DEST] 推送:rsync [option] SRC... [USER@]HOST:DEST [USER@]HOST:为Rsync同步的远程的连接用户和主机地址 SRC:为源,即拷贝的分区、文件或目录等,和HOST之间用一个冒号连接; [DEST]为目的分区、文件或目录等

演示:要事先做好ssh通道 将本地的etc目录推送到tmp目录下,由于有ssh通道,所以没有要密码 [root@localhost ~]# rsync -avz -P /etc -e 'ssh -p 22' root@192.168.0.108:/tmp/

将远端的etc目录备份到本地的tmp目录下 [root@localhost ~]# rsync -avz -P -e 'ssh -p 22' root@192.168.0.108:/etc /tmp/

守护进程的方式: [root@localhost ~]# vim /etc/rsyncd.conf uid = root gid = root use chroot = no        #锁定在家目录 max connections = 200  #最大连接数 timeout = 300          #超时时间 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log [www]                    #模块,读取数据的时候需要用这个名 path= /var/www/html/    #远端备份的路径,抓取也是从这里抓,如果用户上传uid和gid用户需要用上传权限,如果度也要有读取权限 ignore errors            #忽略错误 read only = false        #只读为假就是可以上传数据,如果是true那么就不能上传数据了 list = false  hosts allow = 192.168.0.0/24 hosts deny = 0.0.0.0/32 auth users = rbackup                #认证的用户 secrets file = /etc/rsync.password  #存放用户和密码文件

创建存放认证用户的文件 [root@localhost ~]# vim /etc/rsync.password rbackup:RedHat [root@localhost ~]# chmod 600 /etc/rsync.password  #权限必须是600 [root@localhost ~]# ls /etc/rsync.password -l -rw------- 1 root root 15 12-10 10:18 /etc/rsync.password

启动服务 [root@localhost ~]# rsync --daemon    #--daemon表示以守护进程的方式启动 [root@localhost ~]# ps -ef | grep rsync | grep -v grep root      7915    1  0 10:20 ?        00:00:00 rsync --daemon [root@localhost ~]# netstat -lnt | grep 873 tcp        0      0 0.0.0.0:873                0.0.0.0:*                  LISTEN      tcp        0      0 :::873                      :::*                        LISTEN

设置开机自动启动 [root@localhost ~]# echo "/usr/bin/rsync --daemon" >> /etc/rc.d/rc.local [root@localhost ~]# tail -1 /etc/rc.d/rc.local /usr/bin/rsync --daemon

客户端部署 [root@localhost ~]# echo "redhat" > /etc/rsync.password  #仅需密码无须帐号 [root@localhost ~]# chmod 600 /etc/rsync.password        #文件权限600 [root@localhost ~]# cat /etc/rsync.password redhat

使用守护进程的方式数据传输 拉取:rsync[OPTION][USER@]HOST::SRC [DEST]       rsync[OPTION] rsync://[USER@]HOST[:PORT]/SRC... [DEST] 推送:rsync[OPTION] SRC... [USER@]HOST::DEST       rsync[OPTION] SRC... rsync://[USER@]HOST[:PORT]/DEST 客户端创建一个文件推送到服务器端 [root@localhost html]# touch a.txt [root@localhost html]# rsync -avz -P /var/www/html/ rbackup@192.168.0.102::www/ --password-file=/etc/rsync.password 或者 [root@localhost html]# rsync -avz -P /var/www/html/ rsync://rbackup@192.168.0.102:/www --password-file=/etc/rsync.password building file list ... 2 files to consider ./ a.txt           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/2)

sent 100 bytes  received 44 bytes  96.00 bytes/sec total size is 0  speedup is 0.00

服务器端查看推送成功 [root@localhost html]# ls a.txt  index.html  index.php

--deleted参数:保证本地数据和远端数据完全一致,本地有啥远端就有啥,如果本地没有远端就删除 客户端执行 [root@localhost ~]# mkdir aaa创建一个空目录 [root@localhost ~]# rsync -avz -P --delete /root/aaa/ rbackup@192.168.0.102::www/ --password-file=/etc/rsync.password building file list ... 1 file to consider deleting index.php deleting index.html deleting a.txt ./

sent 50 bytes  received 22 bytes  13.09 bytes/sec total size is 0  speedup is 0.00 服务端查看/var/www/html目录下面什么都没有了 [root@localhost ~]# ll /var/www/html/ 总计 0

服务器端多个目录,配置文件写法 [root@localhost ~]# vim /etc/rsyncd.conf uid = root gid = root use chroot = no max connections = 200 timeout = 300 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log ignore errors read only = false list = false hosts allow = 192.168.0.0/24 hosts deny = 0.0.0.0/32 auth users = rbackup secrets file = /etc/rsync.password [www] path = /www [bbs] path = /bbs [blog] path = /blog

更改完成重启服务 [root@localhost ~]# pkill rsync && rsync --daemon

rsync inotify实现触发式自动同步,inotify端创建或者一个文件rsync备份源也自动创建一个一模一样的文件,inotify删除一个文件rsync备份源也自动删除文件。

注意:inotify是部署在rsync服务成功的情况下

演示: 查看当前系统是否支持inotify [root@localhost ~]# ls -l /proc/sys/fs/inotify/ 总计 0 -rw-r--r-- 1 root root 0 12-11 10:36 max_queued_events  #监控事件队列 -rw-r--r-- 1 root root 0 12-11 10:36 max_user_instances  #最多监控实例数 -rw-r--r-- 1 root root 0 12-11 10:36 max_user_watches    #每个实例最多监控文件数

编译安装inotify tar zxf inotify-tools-3.14.tar.gz cd inotify-tools-3.14 ./configure --prefix=/usr/local/inotify-tools-3.14 make && make install

脚本

host01=10.0.0.191            #定义IP src=/data0/www/www/          #定义源目录 dst=www                      #目标目录 user=rsync_backup            #备份的用户 rsync_passfile=/etc/rsync.password      #密码文件 inotify_home=/usr/local/inotify-tools-3.14/  #inotify的目录 #judge                                        if [ ! -e "$src" ] || [ ! -e "${rsync_passfile}" ] || [ ! -e "${inotify_home}/bin/inotifywait" ] || [ ! -e "/usr/bin/rsync" ]; then   echo "Check File and Folder"              #判断上面的文件是否存在如果不存在就报错并且退出执行   exit 9 fi ${inotify_home}/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src | while read file        #监控的事件delete,create,attrib监控到之后通过read读取         do     cd $src && rsync -aruz -R --delete ./  --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} >/dev/null 2>&1         done exit 0

把脚本放到后台执行 [root@localhost ~]# sh inotify.sh & [1] 8216 [root@localhost ~]# ps -ef | grep inotify root      8216  7503  0 11:15 pts/2    00:00:00 sh inotify.sh root      8217  8216  0 11:15 pts/2    00:00:00 /usr/local/inotify-tools-3.14//bin/inotifywait -mrq --timefmt %d/%m/%y %H:%M --format %T %w%f -e close_write,delete,create,attrib /var/www/html root      8218  8216  0 11:15 pts/2    00:00:00 sh inotify.sh root      8220  7503  0 11:15 pts/2    00:00:00 grep inotify

这时创建几个文件 [root@localhost ~]# cd /var/www/html/ [root@localhost html]# touch a b c d 备份服务器查看就已经同步了 [root@localhost etc]# cd /var/www/html/ [root@localhost html]# ls a  a.txt  b  c  d

0 人点赞