一、rsync简介
rsync是linux/unix系统下的文件同步和传输工具,采用rsync算法是一个客户机和远程文件服务器的文件同步;rsync可以再中断后恢复传输,只传输源文件和目标文件之间不一致的部分。
rsync的安装:
# tar xf rsync-3.0.9.tar.gz # cd rsync-3.0.9 # ./configure # make && make install
二、rsync的应用模式
1、第一种shell应用模式,也成为本地模式
本地shell模式主要用户复制目录到另一个目录:
# rsync -av nagios /tmp # rsync -av nagios/ /tmp
-a:表示使用归档模式,并且保持文件属性
-v:表示输出详细信息
注意这里nagios后面的"/",如果加/的话表示不会复制目录本身,只复制目录中的内容
2、远程shell模式,它利用SSH执行底层连接和加密传输
# rsync -a nagios 192.168.163.143:/tmp root@192.168.163.143's password:
输入密码后就会复制过去了
3、查询模式,于ls命令实现的功能类似
# rsync -a 192.168.163.143:/tmp //查看远程服务器的/tmp目录下的内容 # rsync -a /tmp //当然也可以查询本地的目录 # rsync --list-only root@192.168.56.101:: //列出定义的模块 www web bakup
4、服务器模式
服务器模式下,rsync在后台启用了一个守护进程,这个守护进程在rsync服务器端永久运行,用户接受文件传输请求。
客户端:192.168.164.144
备份服务器:192.168.163.143
安装就不说了,直接配置
(1)、配置192.168.163.144
建立配置文件,默认没有 # vim /etc/rsyncd.conf uid = nobody //守护进程的 uid gid = nobody //守护进程的 gid use chroot = no // max connections = 10 //指定模块的最大并发连接数,默认是0 ,即没有限制 strict modes = yes //指定使用检查口令文件的权限,如果为yes,密码文件权限必须为root pid file = /var/run/rsyncd.pid //pid文件路径 lock file = /var/run/rsyncd.lock //lock锁文件路径 log file = /var/log/rsyncd.log //日志文件路径 [redhat] //定义一个模块的模块名称 path = /data //指定需要备份的文件或目录 comment = peace file // ignore errors //可以忽略一些无关的I/O错误 read only = no //表示客户端可以上传文件,yes表示为只读 write only = no //表示客户端可以下载文件,no表示不能下载 hosts allow = 192.168.163.143 //设置可以连接的服务器的主机 hosts deny = * //设置禁止连接的服务器的主机,*表示所有 list = false //表示的当用户请求可以使用的模块列表是,是否列出,false表示隐藏 uid = root gid = root auth users = backup //定义连接模块的用户 secrets file = /etc/server.pass //指定连接的用户名密码文件
建立密码文件,默认没有
# cat /etc/server.pass backup:redhat123 # chmod 600 /etc/server.pass
启动进程,ps查看
# rsync --daemon # ps -ef | grep rsync root 7976 1 0 18:35 ? 00:00:00 rsync --daemon
看下/data下的文件
# ls /data/ a.access.a access access.a a.debug a.test debug.a test.a
(2)配置192.168.163.143
# chmod 600 /etc/server.pass 开始同步指令如下: # rsync -vzrtopg --delete --progress --exclude "*access*" --exclude "debug*" backup@192.168.163.144::redhat /data --password-file=/etc/server.pass receiving file list ... 4 files to consider created directory /data ./ a.debug 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=2/4) a.test 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=1/4) test.a 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=0/4) sent 163 bytes received 283 bytes 892.00 bytes/sec total size is 0 speedup is 0.00 可以看到已经同步过来的3个文件 -v:详细输出 -z:传输时进行压缩 -r:对子目录递归处理 -t:保存文件时间信息 -o:保存文件的属主 -g:保持文件的属组 -p:保持文件权限 --delete:保持目录的一致性 --progress:显示同步过程 --exclude:排除不需要的文件 backup@192.168.163.144::redhat:指定对144中的redhat模块以backup用户备份 /data:备份到的目录 --password-file:指定密码文件
5、以上就配置完毕了,可以加到计划任务中,但是没法实时的同步,所以就有了rsync+inotify的搭建了
服务器A:192.168.163.144(rsync)
服务器B:192.168.163.143(rsync+inotify)
rsync的安装就不介绍了,直接在143上面装inotify:
# tar xf inotify-tools-3.14.tar.gz # cd inotify-tools-3.14 # ./configure && make && make install
之后143上写个脚本,如下:
# cat in.sh #!/bin/bash host1=192.168.163.144 src=/data des1="redhat" user1="backup" /usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib ${src} \ | while read files do rsync -vzrtopg --delete --progress ${src}/ ${user1}@${host1}::${des1} --password-file=/etc/server.pass && echo "${files} was rsynced" >> /tmp/rsync.log 2>&1 done # chmod 755 in.sh # /root/in.sh &
之后在/data下新建文件,144上就会同步过来,相比而言是实时的,不过当有大量文件的时候系统性能的问题可想而知了。