您的位置:首页 > 其它

文件备份同步工具—rsync

2012-10-26 13:38 696 查看
一、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上就会同步过来,相比而言是实时的,不过当有大量文件的时候系统性能的问题可想而知了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息