rsync+inotify实时同步

  • 格式:doc
  • 大小:252.50 KB
  • 文档页数:6

rsync+inotify实时同步 1.安装环境 操作系统:rhel5.5 64位 软件:rsync-2.6.8-3.1, inotify-tools-3.14 安装结构图:

RsyncRsyncInotify+Rsync源端

Rsync目标端

Rsync目标端AB

C 假设每台机器上需要同步的目录及文件属主为test:test。Test用户的密码也为test。 2.安装配置rsync

三台服务器均要配置rsync,默认系统安装的话: rpm -q rsync rsync-2.6.8-3.1

2.1 在B和C服务器上配置:

1.B和C服务器需要启动Rsync服务,添加Rsync配置文件:vi /etc/rsyncd.conf(root用户) uid=test gid=test use chroot=no max connections=200 timeout=600 pid file=/var/run/rsyncd.pid lock file=/var/run/rsyncd.lock log file=/var/log/rsyncd.log #或者用log file=/dev/null不记录日志 [backup] path=/usr/local/test ignore errors read only=no list=no hosts allow=172.16.41.0/255.255.255.0 auth users=test secrets file=/etc/rsyncd.password 2. 修改vi /etc/xinetd.d/rsync 将disable改成no。(root用户) 3. 修改vi /etc/xinetd.d/rsync ,增加log_type = file /dev/null 4. echo "test:test" >/etc/rsyncd.password(root用户) 5. chmod 600 /etc/rsyncd.password 6. service xinetd restart,启动后用netstat –nat查看873端口是否LISTEN。

2.2 在A服务器上的配置

1. A服务器不用启动rsync服务,直接添加密码文件:echo "test" >/etc/rsyncd.password 2.chown test:test /etc/rsyncd.password 3.chmod 600 /etc/rsyncd.password

3.在A服务器上配置inotify

1. tar zxvf inotify-tools-3.14.tar.gz(root用户) 2. cd inotify-tools-3.14(root用户) 3. ./configure --prefix=/usr/local/inotify(root用户) 4. make && make install(root用户) 5. chown –R test:test /usr/local/inotify(root用户) 6. 编写inotify脚本: vi /usr/local/inotify/rsync.sh #!/bin/bash src=/usr/local/test/ des=backup ip1=172.16.41.105 ip2=172.16.41.25 /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib $src | while read D E F do rsync -vzrtopg --delete $src test@$ip1::$des --password-file=/etc/rsyncd.password && echo "$ip1 $src was rsynced" rsync -vzrtopg --delete $src test@$ip2::$des --password-file=/etc/rsyncd.password && echo "$ip2 $src was rsynced" done 7. 可在A服务器上用如下命令先行测试A-B和A-C是否正常同步(test用户执行): rsync -vzrtopg --delete /usr/local/test/ test@172.16.41.25::backup --password-file=/etc/rsyncd.password 8. 后台运行编辑的脚本(test用户在/usr/local/inotify下执行,日志输出文件为nohup.out): nohup /usr/local/inotify/rsync.sh & nohup /usr/local/inotify/rsync_upload.sh > upload.out 2>&1 & nohup /usr/local/inotify/rsync_index.sh > index.out 2>&1 & 9. 启动完成后会有如下三个进程 apache 24197 24160 0 11:37 pts/1 00:00:00 /bin/bash /usr/local/inotify/rsync.sh apache 24198 24197 0 11:37 pts/1 00:00:00 /usr/local/inotify/bin/inotifywait -mrq --timefmt %d/%m/%y %H:%M --format %T %w%f -e modify,delete,create,attrib,moved_from,moved_to /usr/local/apache2.2.19/htdocs/ apache 24199 24197 0 11:37 pts/1 00:00:00 /bin/bash /usr/local/inotify/rsync.sh 10. 如果需要重启,需要将三个进程KILL。 说明: Inotify文件操作状态: Inotify可以监视的文件系统事件包括: IN_ACCESS: 即文件被访问。 IN_MODIFY: 文件被write。 IN_ATTRIB: 文件属性被修改,如chmod、chown、touch等。 IN_CLOSE_WRITE: 可写文件被close。 IN_CLOSE_NOWRITE: 不可写文件被close。 IN_OPEN: 文件被open。 IN_MOVED_FROM: 文件被移走,如mv。 IN_MOVED_TO: 文件被移来,如mv、cp。 IN_CREATE: 创建新文件。 IN_DELETE: 文件被删除,如rm。 IN_DELETE_SELF: 自删除,即一个可执行文件在执行时删除自己。 IN_MOVE_SELF: 自移动,即一个可执行文件在执行时移动自己。 IN_UNMOUNT: 宿主文件系统被umount。 IN_CLOSE: 文件被关闭,等同于(IN_CLOSE_WRITEIN_CLOSE_NOWRITE)。 IN_MOVE: 文件被移动,等同于(IN_MOVED_FROMIN_MOVED_TO)。 注意 上面所说的文件也包括目录。 Rsync 参数选项说明 -v, --verbose 详细模式输出 -q, --quiet 精简输出模式 -c, --checksum 打开校验开关,强制对文件传输进行校验 -a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD -r, --recursive 对子目录以递归模式处理 -R, --relative 使用相对路径信息

rsync foo/bar/foo.c remote:/tmp/

Rsync 参数在/tmp目录下创建foo.c文件,而如果使用-R参数: rsync -R foo/bar/foo.c remote:/tmp/ Rsync 参数会创建文件/tmp/foo/bar/foo.c,也就是会保持完全路径信息。 -b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。 --backup-dir 将备份文件(如~filename)存放在在目录下。 -suffix=SUFFIX 定义备份文件前缀 -u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件) -l, --links 保留软链结 -L, --copy-links 想对待常规文件一样处理软链结 --copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结 --safe-links 忽略指向SRC路径目录树以外的链结 -H, --hard-links 保留硬链结 -p, --perms 保持文件权限 -o, --owner 保持文件属主信息 -g, --group 保持文件属组信息 -D, --devices 保持设备文件信息 -t, --times 保持文件时间信息 -S, --sparse 对稀疏文件进行特殊处理以节省DST的空间 -n, --dry-run现实哪些文件将被传输 -W, --whole-file 拷贝文件,不进行增量检测 -x, --one-file-system 不要跨越文件系统边界 -B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节 -e, --rsh=COMMAND 指定替代rsh的shell程序 --rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息 -C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件 --existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件 --delete 删除那些DST中SRC没有的文件 --delete-excluded 同样删除接收端那些被该选项指定排除的文件 --delete-after 传输结束以后再删除