首先准备两台服务器(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

最新文章

  1. MVC 后台管理框架 FineUIMvc 在线示例
  2. Python企业级开发之一:基础
  3. Linux三剑客之grep 与 egrep
  4. IDEA SSH
  5. Xamarin环境搭建
  6. Windows Phone 硬件检测
  7. C++命名空间 namespace的作用和使用解析
  8. (转载)UITableView的详细讲解
  9. POJ 1416 Shredding Company
  10. silverlight 打印
  11. 分页 js
  12. Map,HashMap,LinkedHashMap,TreeMap比较和理解
  13. c++有关构造函数、析构函数和类的组合的一个简单例子
  14. Jmeter连接Redis,获取Redis数据集
  15. 核心编程9 文件和文件的输入输出 (os模块)
  16. PythonStudy——函数对象 Function object
  17. 利用 groupby apply list 分组合并字符
  18. POJ 1679 The Unique MST(判断最小生成树是否唯一)
  19. 十个问题带你了解和掌握java HashMap
  20. Python 开发

热门文章

  1. python_print 函数 (99乘法表)
  2. 什么是压测,为什么要进行压力测试?Jmeter工具的使用
  3. ansiable学习
  4. iOS App转让/转移详细步骤(配图)
  5. UE4 编辑器的非运行时,给StaticMeshActor设置StaticMesh
  6. python中json的四个方法总结dumps、dump、loads、load
  7. nginx二进制安装脚本
  8. 在gitlab仓库中cli 编译通不过 怎样解决
  9. C#基于数据库链接增删改查
  10. Qt之新建界面动态库并使用