实验环境:CentOS Linux release 7.6.1810

node1:192.168.216.130 客户端(向服务端发起数据同步)

node2:192.168.216.132 服务端(接收来自客户端的数据)

本次实验为单向同步

1、在两个节点安装rsync

yum -y install rsync

2、在node2节点修改rsyncd.conf配置文件,注意hosts allow允许数据同步的IP、path同步目录、 comment备注信息、auth users认证用户、secrets file密钥文件,其参数值需要和实际一致

cat /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode # See rsyncd.conf man page for more options. # configuration example: uid = 0
gid = 0
use chroot = no
max connections = 200
timeout = 1000
pid file = /var/run/rsyncd.pid
# exclude = lost+found/
transfer logging = yes
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
log format = %t %a %m %f %b
reverse lookup = no
hosts allow = 192.168.216.0/24
# timeout = 900
# ignore nonreadable = yes
# dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # [ftp]
# path = /home/ftp
# comment = ftp export area [data]
path = /data/
comment = data
ignore errors
read only = no
#write only = yes
list = false
auth users = postgres
secrets file = /etc/rsync/rsync.passwd

3、在node2上启动rsync服务,并创建用户认证文件,注意认证文件中的用户必须实际存在,自行创建用户

启动服务
systemctl start rsyncd
创建用户名/密码认证文件
echo "postgres:123456" > /etc/rsync/rsync.passwd
修改认证文件权限为600
chmod 600 /etc/rsync/rsync.passwd
查看认证文件
cat /etc/rsync/rsync.passwd
postgres:123456

4、在node1上创建用户认证文件

node1节点只需要存放密码内容即可
echo "123456" > /etc/rsync/rsync.passwd
cat /etc/rsync/rsync.passwd
chmod 600 /etc/rsync/rsync.passwd

5、在node1上执行以下命令,手动测试是否可以正常同步数据,同步node1上data目录的文件至node2上的data目录  

touch /data/a{1..100}
rsync -avz --password-file=/etc/rsync/rsync.passwd /data/ postgres@192.168.216.132::data

此时可以看到node2下的data目录数据和node1一致

6、在node1上安装inotify-tools,这里采用编译安装,也可以执行yum install inotify-tools安装

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

7、在node1上创建shell脚本用于实时监控目录数据变化,并自动完成数据同步

vi inotify_rsync.sh
#!/bin/bash
SRC='/data/'
DEST='postgres@192.168.216.132::data'
inotify_home=/usr/local/include/
${inotify_home}/bin/inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |
while read DATE TIME DIR FILE;do
FILEPATH=${DIR}${FILE}
rsync -az --delete --password-file=/etc/rsync/rsync.passwd $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
done

这里引入一个--delete 选项,表示客户端上的数据要与服务器端完全一致,如果 /data目录中有服务器上不存在的文件,则删除。最终目的是让客户端/data目录上的数据完全与服务器上/data保持一致;用的时候要 小心点,最好不要把已经有重要数所据的目录,当做本地更新目录,否则会把你的数据全部删除;
注意脚本中变量SRC(同步目录)、DEST(服务端信息)、inotify_home(inotify-tools安装目录)需要和实际目录一致

8、后台运行脚本sh inotify_rsync.sh &

参考:https://blog.51cto.com/14234525/2396910

最新文章

  1. 【Android】如何快速构建Android Demo
  2. Java for LeetCode 171 Excel Sheet Column Number
  3. 从exchange2010上面删除特定主题或特定时间的邮件
  4. 【bzoj1003】[ZJOI2006]物流运输
  5. InkPicture 控件使用_01
  6. hdu 2295 Radar 重复覆盖+二分
  7. android电池充电以及电量检测驱动分析
  8. Hololens生成与安装(旁加载)应用
  9. Asp.Net BulletedList使用及详解
  10. Springs Element 'beans' cannot have character [children], because the type's content type is element-only
  11. Android中build target,minSdkVersion,targetSdkVersion,maxSdkVersion概念区分
  12. Hive分区和桶
  13. $.ajax()方法详解 jquery
  14. 浅谈java线程池实现
  15. VBA操作word生成sql语句
  16. Ubuntu 16.04下指定Sublime Text 3 默认python编译版本
  17. Linux udhcp client (udhcpc) get IP at anytime
  18. 2017"百度之星"程序设计大赛 - 初赛(A) 小C的倍数问题
  19. Kali之aircrack-ng
  20. cesium运行环境搭建

热门文章

  1. 腾讯物联网操作系统正式开源,最小体积仅1.8 KB
  2. c++中共享内存原理及实现
  3. TCP/IP学习笔记1--概述,分组交换协议
  4. DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render
  5. oralce学习笔记(二)
  6. :阿里巴巴 Java 开发手册 (十一)工程结构
  7. Sqlserver 总结(2) 存储过程
  8. js获取对象的属性个数
  9. jQuery.Form.js使用方法
  10. Dockerfile构建jar镜像