服务端:192.168.1.1

客户端:192.168.1.2

一、安装rsync

两种方式:源码安装和rpm安装

1.1源码安装

先去官网下载源码包

# wget http://rsync.samba.org/ftp/rsync/src/rsync-3.1.1.tar.gz# tar zxvf rsync-3.1.1.tar.gz# cd rsync-3.1.1# ./configure -prefix=/usr/local/rsync# make#  make install#  ln -s /usr/local/rsync/bin/rsync /usr/local/bin/rsync

1.2.server端配置文件

# vi /usr/local/rsync/rsyncd.confpid file = /var/run/rsyncd.pidport = 873pid = rootgid = rootuse chroot = nomax connections = 200                           #最大连接数timeout 600                                       #设置超时时间lock file = /var/run/rsyncd.locklog file = /var/run/rsyncd.logsecrets file = /usr/local/rsync/rsyncd.secrets #密码文件motd file = /etc/rsyncd.motd[test]path = /test/                                    #rsync服务端数据目录路径ignore errorsread only = no                                 #改为默认是yes,改为no才可以推送数据否则只能拉取数据list = false                                     #是否显示rsync服务端资源列表hosts allow = *#hosts deny = 0.0.0.0/32auth users root                                #该用户系统中存在且对后面指定的备份目录拥有权限comment = ocpyang  test

1.3.加载提示文件

#vi /usr/local/rsync/rsyncd.motd++++++++++++++++++++++++++++++++++++Wlecome to ocpyang  rsync services++++++++++++++++++++++++++++++++++++

1.4.指定rsync访问的密码,密码不需要和系统账号密码相同

# vi /usr/local/rsync/rsyncd.secretsroot:snow01

1.5设置软连接和权限

# ln -s /usr/local/rsync/rsyncd.conf /etc/rsyncd.conf# ln -s /usr/local/rsync/rsyncd.motd /etc/rsyncd.motd# ln -s /usr/local/rsync/rsyncd.secrets  /etc/rsyncd.secretschmod 600 /usr/local/rsync/rsyncd.secretschown root:root /usr/local/rsync/rsyncd.secrets

1.6启动rsync

# /usr/bin/rsync --daemon --config=/etc/rsyncd.conf查看端口# netstat -lntp | grep 873tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      10689/rsynctcp        0      0 :::873

1.7设置开机启动

# echo "/usr/bin/rsync --daemon --config=/etc/rsyncd.conf" >> /etc/rc.d/rc.local# cat /etc/rc.d/rc.local#!/bin/sh## This script will be executed *after* all the other init scripts.# You can put your own initialization stuff in here if you don't# want to do the full Sys V style init stuff.touch /var/lock/subsys/local/usr/bin/rsync --daemon

1.8,命令

#pkill rsync--新建测试文件#dd if=/dev/zero of=/test/t01.file bs=1M count=50

客户端配置:

2.1.新建客户端密码文件(客户端不带用户名)

#vi /etc/rsyncd.secretssnow01设置权限#chmod 600 /etc/rsyncd.secrets

2.2测试

客户端拉取服务端数据

#rsync -vzrtopg --progress --delete  --password-file=/etc/rsyncd.secrets  root@192.168.1.1::test /test/

客户端推送数据到服务端

#rsync -avzP --delete --password-file=/etc/rsyncd.secrets /test/*  root@192.168.1.1::test ++++++++++++++++++++++++++++++++++++Wlecome to ocpyang  rsync services       ++++++++++++++++++++++++++++++++++++sending incremental file listtest/test/a.txt              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=3/5)test/t01.file     52,428,800 100%  127.80MB/s    0:00:00 (xfr#2, to-chk=2/5)test/t02.file     52,428,800 100%   64.60MB/s    0:00:00 (xfr#3, to-chk=1/5)test/t03.file     52,428,800 100%   43.33MB/s    0:00:01 (xfr#4, to-chk=0/5)sent 153,295 bytes  received 96 bytes  102,260.67 bytes/sectotal size is 157,286,400  speedup is 1,025.40

二、实现实时同步:

1.1、

利用计划任务同步

2.1、

使用inotify-tools工具,实时触发rsync进行同步

1、查看服务器内核是否支持inotify #列出文件目录,出现下面的内容,说明服务器内核支持inotify

#ll /proc/sys/fs/inotify/total 0-rw-r--r-- 1 root root 0 Nov 23 23:54 max_queued_events-rw-r--r-- 1 root root 0 Nov 23 23:54 max_user_instances-rw-r--r-- 1 root root 0 Nov 23 23:54 max_user_watches

备注:Linux下支持inotify的内核最小2.6.13,可以输入命令:uname -a查看内核

一般5.x以上都支持5.x为2.6.18

2.安装inotify-tools

# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz# tar -xf inotify-tools-3.14.tar.gz# cd inotify-tools-3.14# ./configure --prefix=/usr/local/inotify# make && make install

3.设置系统环境变量,添加软连接

# echo "PATH=/usr/local/inotify/bin:$PATH" >>/etc/profile.d/inotify.sh# source /etc/profile.d/inotify.sh  #使设置立即生效# echo "/usr/local/inotify/lib" >/etc/ld.so.conf.d/inotify.conf# ln -s /usr/local/inotify/include  /usr/include/inotify

4、修改inotify默认参数(inotify默认内核参数值太小)

查看系统默认参数值

sysctl -a | grep max_queued_events结果是:fs.inotify.max_queued_events = 16384sysctl -a | grep max_user_watches结果是:fs.inotify.max_user_watches = 8192sysctl -a | grep max_user_instances结果是:fs.inotify.max_user_instances = 128修改参数:sysctl -w fs.inotify.max_queued_events="99999999"sysctl -w fs.inotify.max_user_watches="99999999"sysctl -w fs.inotify.max_user_instances="65535"vi /etc/sysctl.conf #添加以下代码fs.inotify.max_queued_events=99999999fs.inotify.max_user_watches=99999999fs.inotify.max_user_instances=65535:wq! #保存退出

参数说明:

max_queued_events

inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确

max_user_watches

要同步的文件包含多少目录,可以用:find /test -type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/test为同步文件目录)

max_user_instances

每个用户创建inotify实例最大值

5、创建脚本,实时触发rsync进行同步

vi /usr/local/inotify/rsync.sh   #编辑,添加以下代码

======================================

#!/bin/shsrcdir=/test/*                                    dstdir=test                                     excludedir=/usr/local/inotify/exclude.list      rsyncuser=rootrsyncpassdir=/etc/rsyncd.secretsdstip="192.168.1.1"for ip in $dstipdo    #rsync -avH --port=873 --progress --delete  --exclude-from=$excludedir  $srcdir $rsyncuser@$ip::$dstdir --password-file=$rsyncpassdir    /usr/local/rsync-3.1.1/bin/rsync -avzP --port=873 --progress --delete  --exclude-from=$excludedir $srcdir  $rsyncuser@$ip::$dstdir --password-file==$rsyncpassdirdone/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $srcdir |  while read filedo    for ip in $dstip    do        #rsync -avH --port=873 --progress --delete  --exclude-from=$excludedir  $srcdir $rsyncuser@$ip::$dstdir --password-file=$rsyncpassdir        #/usr/local/rsync-3.1.1/bin/rsync -avzP --port=873 --progress --delete /test/*  root@192.168.1.1::test --password-file=/root/rsyncd.secrets        /usr/local/rsync-3.1.1/bin/rsync -avzP --port=873 --progress --delete  --exclude-from=$excludedir $srcdir  $rsyncuser@$ip::$dstdir --password-file==$rsyncpassdir        echo "  ${file} was rsynced" >> /tmp/rsync.log 2>&1    donedone

======================================

chmod +x /usr/local/inotify/rsync.sh   #添加脚本执行权限

脚本参数说明:

srcdir=/test #源服务器同步目录

dstdir=test    #目标服务器rsync同步目录模块名称

excludedir=/usr/local/inotify/exclude.list   

#不需要同步的目录,如果有多个,每一行写一个目录,使用相对于同步模块的路径;

#例如:不需要同步/test目录下的a目录和b目录下面的b1目录,exclude.list文件可以这样写

a/

b/b1/

rsyncuser=root  #目标服务器rsync同步用户名

rsyncpassdir=/etc/passwd.secrets#目标服务器rsync同步用户的密码在源服务器的存放路径

dstip="192.168.1.1 192.168.1.1"  #目标服务器ip,多个ip用空格分开

/tmp/rsync.log  #脚本运行日志记录

6、设置脚本开机自动执行

vi /etc/rc.d/rc.local  #编辑,在最后添加一行

sh /usr/local/inotify/rsync.sh & #设置开机自动在后台运行脚本

:wq!  #保存退出

7、测试inotify实时触发rsync同步脚本是否正常运行

如果以上测试都通过,说明inotify实时触发rsync同步脚本运行正常。

至此,Linux下Rsync+Inotify-tools实现数据实时同步完成。

转载连接地址: