服务端:192.168.1.1

客户端:192.168.1.2

一、安装rsync

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

1.1源码安装

先去官网下载源码包

https://rsync.samba.org/

# 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.conf
pid file = /var/run/rsyncd.pid
port = 873
pid = root
gid = root
use chroot = no
max connections = 200                           #最大连接数
timeout 600                                       #设置超时时间
lock file = /var/run/rsyncd.lock
log file = /var/run/rsyncd.log
secrets file = /usr/local/rsync/rsyncd.secrets #密码文件
motd file = /etc/rsyncd.motd

[test]
path = /test/                                    #rsync服务端数据目录路径
ignore errors
read only = no                                 #改为默认是yes,改为no才可以推送数据否则只能拉取数据
list = false                                     #是否显示rsync服务端资源列表
hosts allow = *
#hosts deny = 0.0.0.0/32
auth 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.secrets
root: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.secrets

chmod 600 /usr/local/rsync/rsyncd.secrets
chown root:root /usr/local/rsync/rsyncd.secrets

1.6启动rsync

# /usr/bin/rsync --daemon --config=/etc/rsyncd.conf

查看端口
# netstat -lntp | grep 873
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      10689/rsync
tcp        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.secrets
snow01

设置权限
#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 list
test/
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/sec
total 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 = 16384
sysctl -a | grep max_user_watches
结果是:fs.inotify.max_user_watches = 8192
sysctl -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=99999999
fs.inotify.max_user_watches=99999999
fs.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/sh

srcdir=/test/*                                    
dstdir=test                                     
excludedir=/usr/local/inotify/exclude.list      
rsyncuser=root
rsyncpassdir=/etc/rsyncd.secrets
dstip="192.168.1.1"

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  --exclude-from=$excludedir $srcdir  $rsyncuser@$ip::$dstdir --password-file==$rsyncpassdir
done

/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 file
do
    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
    done
done

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

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实现数据实时同步完成。








转载连接地址:


https://blog.csdn.net/zxh2075/article/details/52711945

https://×××w.osyunwei.com/archives/7435.html