首先准备两台服务器(centos7)

A:192.168.75.160   

B:192.168.75.161  

A机器当做客户端,B机器当做服务端

rsync 安装

客户端服务器端都要安装rsync ,但是客户端A不需要启动,服务器端B需要启动

接下来先安装rsync,可以用源码安装,从rsync官网:rsync.samba.org,下载源码包,或者用yum安装

1)源码安装:

可以进到 https://rsync.samba.org/ftp/rsync/下载

也可以用wget下载

 

# tar -xzvf rsync-3.1.3.tar.gz 

# ./configure   (默认的安装路径是/usr/local 可以通过 ./configure --help查看到)

# make && make install

安装完成,如果需要开机启动的话,需要把rsync启动命令放到 rc.local 文件中,服务端需要开机启动,客户端不需要

echo "/usr/local/bin/rsync --daemon --config=/etc/rsyncd.conf" >>/etc/rc.local

2)rpm安装(yum)

# yum install rsync

yum 安装会把rsync安装到 /usr/bin目录下,并且会生成 /etc/xinetd.d/rsync文件;

如果想要开机启动和源码安装方式相同,还有另外方法:

用yum安装时,会生成/etc/xinetd.d/rsync文件

centos7 下 rsync 默认会以xinetd方式运行rsync服务,所以只需启动xinetd服务即可

但是要修改下配置文件/etc/xinetd.d/rsync 

  1 # default: off                                                                                                  
  2 # description: The rsync server is a good addition to an ftp server, as it \
  3 #   allows crc checksumming etc.
  4 service rsync
  5 {
  6     disable = no
  7     flags       = IPv6
  8     socket_type     = stream
  9     wait            = no
 10     user            = root
 11     server          = /usr/bin/rsync
 12     server_args     = --daemon --config=/etc/rsyncd.conf
 13     log_on_failure  += USERID
 14 }

配置完毕后 ,还需要安装xinetd包,否则xinetd服务无法启动,

# yum install xinetd  安装

# /etc/init.d/xinetd start  启动

# chkconfig xinetd on   设置开机启动

# netstat -tunlp | grep 873  检查是否启动成功 

rsync配置

服务器端配置:

rsync服务器端需要两个配置文件 rsyncd.conf rsyncd.password

1)rsyncd.conf文件

rsyncd.conf 默认放在/etc 目录下此文件需要手动创建,是rsync服务的主配置文件;rsyncd.password 主要 用户存储rsync用户名和密码

uid = root
gid = root
use chroot = no
max connections = 10
timeout=600
log file = /var/run/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock

[backup]
path = /root/backup/
ignore errors
read only = no
list = no
auth users = cap
secrets file = /etc/rsyncd.password
host allow = 192.168.75.160

rsync默认是在nobody用户下运行,为了之后由于不明权限问题影响,此处uid=root用户

[backup]为要同步的模块名称 可以随意命名,但之后用到模块需要名称保持一致 ,可以有多个模块,此处指举了一个例子

path 为该模块要同步的目录 

auth users 为用户,这个用户是自己命名,跟系统用户没有关系,是在 rsyncd.password 文件中与之对应的

secrets file 为用户、密码文件

2) rsyncd.password

只需添加 用户名 : 密码即可 (可以有多组用户名和密码)

# vim /etc/rsyncd.password

cap:cap

创建完成之后更改这个文件的权限为600 

# chmod 600 /etc/rsyncd.password

创建完毕之后,需要对模块中的目录授权

chown root:root -R /root/backup/

客户端配置

客户端配置只需要创建 /etc/rsyncd.password文件

客户端rsyncd.password文件里面只需要添加密码即可,不需要用户,但是有多个用户名和密码时,注意与服务器端rsyncd.password文件顺序对应上

# vim /etc/rsyncd.password

cap

同样授权 600  

# chmod 600 /etc/rsyncd.password

启动rsync服务

如果使用源码安装rsync  使用 rsync-daemon 来启动rsync

# echo PATH=$PATH:/usr/local/bin/ >> /etc/profile
# source /etc/profile
# rsync -daemon
# ps aux | grep rsync
# netstat -tunlp | grep 873

如果 rsync 的配置文件不在 /etc/目录下,那么启动时需要在参数中手动加上配置文件路径,比如

rsync --daemon --config=/RSYNCPATH/

如果用yum安装

/etc/init.d/xinetd start

停止服务

源码安装停止方法 

# pkill rsync

yum安装停止方法

/etc/init.d/xinetd stop

inotify的安装

再客户端进行安装,inotify主要功能是监视客户端被监控目录是否有变化,如果有变化,就向服务器端进行推送

先查看当前系统是否支持inotify

[root@VM_8_32_centos ~]# ll /proc/sys/fs/inotify
total 0
-rw-r--r-- 1 root root 0 Dec 18 15:50 max_queued_events
-rw-r--r-- 1 root root 0 Dec 18 15:50 max_user_instances
-rw-r--r-- 1 root root 0 Dec 18 15:50 max_user_watches

显示这三个文件证明支持

这三个文件说明

max_user_watches:设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
max_user_instances:设置每个用户可以运行的inotifywait或inotifywatch命令的进程数。
max_queued_events:设置inotify实例事件(event)队列可容纳的事件数量。

安装inotify方式可以用源码包安装 也可以用yum安装

源码安装:

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

[root@VM_8_32_centos bin]# ls /usr/local/inotify/bin/
inotifywait inotifywatch

一共安装了2个工具(命令),即inotifywait和inotifywatch

inotifywait:在被监控的文件或目录上等待特定文件系统事件(open、close、delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用。

inotifywatch:收集被监视的文件系统使用度统计数据,指定文件系统事件发生的次数统计

接下来编写脚本,rsynctest.sh

#!/bin/bash
#
src=/root/backup/
des=backup
host=192.168.75.161
user=cap
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T%w%f%e' -e modify,delete,create,attrib $src | while read files
do
    /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.password $src $user@$host::$des
    echo "${files} was fsynced " >>/tmp/rsync.log 2>&1
done

运行rsynctest.sh脚本,这个脚本是我在网上找的,有个问题就是里面  inotifywait 监控到变化的 files 变量 ,在下面rsync中实际并没有用到,这样每次虽然监控到是哪些文件有变化,但是rsync都是做的全量同步,又找了其他文档,有如下写法

#!/bin/bash
#
src=/root/backup/
user=cap
host=192.168.75.161
des=backup

/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f %e' -e modify,delete,create,attrib,close_write,move $src | while read file
do
    INO_EVENT=$(echo $file | awk '{print $4}')
    INO_FILE=$(echo $file | awk '{print $3}')
    echo "------------------------------$(date)--------------------------"
    echo "$file"
    echo "$INO_EVENT"
    echo "$INO_FILE"
    if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]
    then
        echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'
        rsync -avzcR --password-file=/etc/rsyncd.password $(dirname ${INO_FILE}) $user@$host::${des}
    fi
    if [[ $INO_EVENT =~ 'DELETE' ]]    || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
    then
        echo 'DELETE or MOVED_FROM'
        rsync -avzcR --delete --password-file=/etc/rsyncd.password $(dirname ${INO_FILE}) $user@$host::${des}
    fi
    if [[ $INO_EVENT =~ 'ATTRIB' ]]
    then
        echo 'ATTRIB'
        if [ ! -d "$INO_FILE" ]
        then
            rsync -avzcR --password-file=/etc/rsyncd.password $(dirname ${INO_FILE}) $user@$host::${des}
        fi
    fi
done

现在可以进行测试,在客户端 /root/backup/ 目录下进行文件操作(增删改查等),服务器端会随之更新变化

 PS

rsync --delete /空目录 /要删除的目录
ctrl + R --> 输入历史命令的关键字 --> 按下右光标键

参考文献:https://yq.aliyun.com/articles/43197

      https://www.ilanni.com/?spm=a2c4e.11153940.blogcont43197.26.1aad7857f1yu9o&p=8513

      https://www.cnblogs.com/hackerer/p/5243639.html

      https://www.cnblogs.com/ginvip/p/6430986.html

posted on 2018-12-18 16:23  队长china  阅读(207)  评论(0编辑  收藏  举报