众客华禹

 找回密码
立即注册

QQ登录

只需一步,快速开始

查看: 476|回复: 0

Centos7 搭建rsync+inotify实时数据同步

[复制链接]

70

主题

70

帖子

378

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
378
发表于 2022-1-24 16:08:13 | 显示全部楼层 |阅读模式
一、概念讲解
1、实现实时同步
      1)要利用监控服务(inotify),监控同步数据服务器目录中信息的变化
      2)发现目录中数据产生变化,就利用rsync服务推送到备份服务器上
2、Inotify简介
       Inotify是一种强大的,细粒度的。异步的文件系统事件监控机制,linux内核从2.6.13起,加入了 Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而 inotify-tools 正是实施这样监控的软件。国人周洋在金山公司也开发了类似的实时同步软件sersync。

      Inotify实际是一种事件驱动机制,它为应用程序监控文件系统事件提供了实时响应事件的机制,而无须通过诸如cron等的轮询机制来获取事件。cron等机制不仅无法做到实时性,而且消耗大量系统资源。相比之下,inotify基于事件驱动,可以做到对事件处理的实时响应,也没有轮询造成的系统资源消耗,是非常自然的事件通知接口,也与自然世界事件机制相符合。

3、使用方式
     inotify:对同步数据目录信息的监控
     rsync:完成对数据信息的实时同步

4、部署inotify软件的前提
      需要2.6.13以后内核版本才能支持inotify软件
  1. [root@localhost ~]# ll /proc/sys/fs/inotify/
  2. total 0
  3. -rw-r--r-- 1 root root 0 Oct 17 10:12 max_queued_events
  4. -rw-r--r-- 1 root root 0 Oct 17 10:12 max_user_instances
  5. -rw-r--r-- 1 root root 0 Oct 17 10:12 max_user_watches
复制代码
5、实验资源准备
  1. 192.168.112.138     server
  2. 192.168.112.139     backup
复制代码
二、部署backup端
1、关闭防火墙

  1. systemctl stop firewalld
  2. systemctl disable firewalld
  3. #关闭selinux
  4. sed -i 's/enforcing/disabled/' /etc/selinux/config  #永久
  5. setenforce 0  #临时
复制代码
2、安装rsync服务
  1. yum intsall rsync -y
复制代码
3、修改配置文件
  1. vim /etc/rsyncd.conf
  2. uid = root
  3. gid = root
  4. use chroot = no                   #如果你上面uid不是root用户启动,你这里就要注意是否需要切换到root用户
  5. port = 873
  6. max connections = 4
  7. #pid file = /var/run/rsyncd.pid   #这个注释有人说去掉后启动会报错,但我去掉也没事,看你自己情况
  8. exclude = lost+found/
  9. lock file = /var/run/rsyncd.lock
  10. log file = /var/log/rsyncd.log    #输出日志
  11. log format = %t %a %m %f %b       #日志格式
  12. transfer logging = yes
  13. timeout = 900
  14. ignore nonreadable = yes
  15. dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2    #传输这几种格式时不压缩
  16. hosts allow = 192.168.112.138                                   #允许传输数据的ip,x.x.x.x/16生产建议精确到ip

  17. [master_web]                      #[ ]里面自定义一个名字
  18. path = /opt/                      #这个路径代表你本地需要同步的路径,表示本地/opt/下的数据可以进行传输
  19. comment = master_web              #和[ ]中保持一致
  20. ignore errors
  21. read only = no                    #是否允许client上传文件到server   设置成yes则client的数据无法推送到master上
  22. write only = no                   #是否允许client从server上拉取数据   设置成yes则client无法从server上拉去数据
  23. list = no
  24. auth users = rsync                #这个用户时连接时的用户,不是系统用户,不用创建
  25. secrets file = /etc/rsyncd.passwd #保存密码和用户名文件,需要自己生成,这个路径可以自定义
复制代码
4、创建密码文件
  1. vim  /etc/rsyncd.passwd
  2. rsync:123456                     #用户和路径是上面设置的,密码自定义
复制代码
5、设置权限
  1. chmod 600 /etc/rsyncd.passwd     #设置权限,不设置会报错
复制代码
6、启动服务
  1. systemctl restart rsyncd
  2. systemctl enable rsyncd
复制代码
7、查看服务
  1. [root@backup ~]# netstat -nutlp|grep rsync
  2. tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      12809/rsync         
  3. tcp6       0      0 :::873                  :::*                    LISTEN      12809/rsync
复制代码
三、部署server端
1、安装rsync服务

  1. yum intsall rsync -y
复制代码
2、创建一个文件存放server端的密码
  1. vim   /root/rsyncd.passwd
  2. 123456                         #只写上面设置好的密码,不写用户名
  3. chmod 600 /root/rsyncd.passwd
复制代码
3、现在我们把server机器定义的/opt/下面的数据同步到backup的/data目录夹,/data自己创建
注意该操作是在backup上操作
  1. rsync -avzp --delete  <a href="mailto:rsync@192.168.112.139" target="_blank">rsync@192.168.112.139</a>::master_web  /data  --password-file=/root/rsyncd.passwd
复制代码
–delete 表示在同步时,server端/opt/目录中不论是删除,添加,修改,都会同步到backup,如果不加该参数,则只会同步server端新添加和修改的数据,server端删除掉的数据,client端不会删除,依然存在,该选项按个人需求选择.

4、实现自动检测server文件发生变化,自动同步到backup端上去
1)安装inotify
  1. yum install  inotify-tools -y
复制代码
2)调整inotify内核参数
当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。可以直接修改/etc/sysctl.conf的配置文件,将管理队列、实例数、监控数进行设置。
  1. vim /etc/sysctl.conf
  2. #For more information, see sysctl.conf(5) and sysctl.d(5).   //添加
  3. fs.inotify.max_queued_events = 16384
  4. fs.inotify.max_user_instances = 1024
  5. fs.inotify.max_user_watches = 1048576

  6. sysctl -p    //启动
复制代码
3)编写inotify脚本
  1. #!/bin/bash
  2. host=192.168.112.139(server)
  3. src=/opt/                    #client上的需要同步的路径
  4. des=master_web               #master上配置文件里的模块名
  5. password=/root/rsyncd.passwd          #密码文件
  6. user=rsync
  7. inotifywait=/usr/bin/inotifywait

  8. $inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
  9. | while read files ;do
  10. rsync -avzP --delete --timeout=100 --password-file=${password} $src $user@$host:<img src="static/image/smiley/default/shy.gif" border="0" smilieid="8" alt=":$">des
  11. echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
  12. done
复制代码
4)运行脚本
  1. chmod +x  /root/inotify.sh
  2. nohup bash /root/inotify.sh &   #后台形式运行
复制代码
5)设置开机自启
  1. chmod +x /etc/rc.d/rc.local     #这步一定要做,因为该文件默认没有执行权限
  2. echo "nohup bash /root/inotify.sh" >> /etc/rc.d/rc.local
复制代码
备注:执行完脚本第一次不会马上同步数据,只有当server端文件发生改变时,才会触发同步数据操作

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|众客华禹 ( 蜀ICP备2021016660号 )

GMT+8, 2022-5-17 08:46 , Processed in 0.048836 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表