`
liu86th
  • 浏览: 117914 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[centos] rsync+inotify实时同步

 
阅读更多

1. 声明:rsync inotify 需要逆向思考,当只做rsync不实时同步时,我们一般是从rsync服务端向rsync客户端同步数据。当需要添加inotify实现实时同步数据时,我们就需要从rsync客户端向各rsync服务端同步数据,这样rsync客户端就变成了master,而rsync服务端就变成了slave。

原理:当web3的本地目录,也就是需要同步的目录发生变化时,比如有文件改名、更新、删除、权限变化,此时就使用inotify命令查找这些变化,进行相应的轮询工作

服务器地址分配:

Web1:192.168.1.103 (rsync 服务节点)

Web2:192.168.1.104 (rsync 服务节点)

Web3:192.168.1.105  (rsync 内容发布节点、inotify)

同步的目录是 /mnt ,自动同步顺序为 web2,web3——web1。我们将web1 配置成 rsync 的服务器即可。

 

2.配置 rsync 服务器端(web1)

[1] 安装rsync软件

# yum install rsync

 [2] 手动创建rsync配置文件

# vim /etc/rsyncd.conf
uid = root                              #全局配置开始,运行rsync的用户
gid = root                              #运行rsync的用户组
usechroot = no                     		#是否让进程离开工作目录
max connections = 20            		#最大并发数
timeout = 600                       	#连接超时时间
pid file = /var/run/rsyncd.pid          #指定rsync的pid存放路径
lock file = /var/run/rsync.lock         #指定rsync的锁文件存放路径
log file = /var/log/rsyncd.log          #指定rsync的日志存放路径
[web_log]                            	#模块配置开始
path = /data/web_log/             		#需要备份的文件路径
ignore errors                         	#忽略一些无关的I/O错误
read only = false                    	#false为关闭,true表示开启。表示只读,不允许上传文件
writeonly = false                    	#不允许下载
list = false                            #客户请求可以使用模块列表时是否被列出
hosts allow = 192.168.1.0/24            #可以访问此模块的主机,*表示任何主机,此处是网段,某个主机直接写ip
hosts deny = 0.0.0.0/32                 #禁止访问此模块的主机地址
auth users = backuser                   #自定义连接该模块的用户名,多个用户用逗号分隔
secrets file = /etc/rsync.password 		#指定一个包含“用户名:密码”格式的文件

 [3] 创建备份目录

# mkdir -p /data/web_log/

 [4] 建立 rsync 用户名和密码文件

# echo"backuser:123" >> /etc/rsync.password

 [5] 为 /etc/rsync.password授权为 600(这个文件的权限必须是 600)

# chmod  600 /etc/rsync.password

 [6] 启动rsync并添加开启自动启动

# /usr/bin/rsync --daemon  &
# echo "/usr/bin/rsync --daemon" >> /etc/rc.local

 

二、配置 rsync 服务器端(web2),和web1配置一样

# yum install rsync
# vim /etc/rsyncd.conf
uid = root
gid = root
usechroot = no
max connections = 20
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock  
log file = /var/log/rsyncd.log
[web_log]
path = /data/web_log/             #定义你需要备份的路径,可以跟web1上不一样
ignore errors
read only = false
writeonly = false
list = false
hosts allow = *
hosts deny = 0.0.0.0/32
auth users = backuser
secrets file = /etc/rsync.password

# mkdir -p /data/web_log/
# echo "backuser:123" >> /etc/rsync.password
# chmod  600 /etc/rsync.password
# /usr/bin/rsync --daemon  &
# echo "/usr/bin/rsync --daemon" >> /etc/rc.local

#到此,服务器端配置完成

 三、客户端配置(web3):

[1] 设置 rsync 客户端的密码文件,客户端只需要设置 rsync 同步的密码即可,不用设置用户名
# yum install rsync
# echo "123" > /etc/rsync.password
[2] 将密码文件的权限设置成 600(这个文件的权限必须是600)
# chmod 600 /etc/rsync.password

 

四、配置 Inotify(在 web3上配置)

[1] 安装 inotify 软件包

wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
# yum install gcc        #如果没安装gcc的请安装,已安装请跳过此步。
# tar zxf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.14
# ./configure && make && make install

 [2] 在web3上测试一下是否可以同步文件

rsync -vzrtopg --progress /mnt/ backuser@192.168.1.103::web_log  --password-file=/etc/rsync.password    #上传文件
rsync -vzrtopg --progress  backuser@192.168.1.103::web_log /opt/ --password-file=/etc/rsync.password     #下载文件 

 [3] 写一个脚本来实现,当/mnt/中文件有变化时,让各rsync服务节点同步数据:

# vim /root/inotify.sh
#!/bin/bash
src=/mnt/                  #此文件是rsync客户端本地文件,需要上传到各个rsync服务节点
des1=web_log          # web1上需要同步的目录
des2=web_log          # web2上需要同步的目录
host1=192.168.1.103      #rsync服务节点1
host2=192.168.1.104      #rsync服务节点2
user1=backuser                 #连接rsync使用的用户名web1上
user2=backuser                 #连接rsync使用的用户名web2上
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -emodify,delete,create,attrib $src | while read file
do
/usr/bin/rsync -vzrtopg --delete --progress $src $user1@$host1::$des1 --password-file=/etc/rsync.password
/usr/bin/rsync -vzrtopg --delete --progress $src $user2@$host2::$des2 --password-file=/etc/rsync.password
echo "${files} was rsynced" >> /var/log/rsync.log 2>&1
done

 [4] 或写成如下脚本

# vim /root/inotify.sh
#!/bin/bash
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib /mnt/ | while read file
do
/usr/bin/rsync -vzrtopg --delete --progress /mnt/ backuser@192.168.1.103::web_log --password-file=/etc/rsync.password
/usr/bin/rsync -vzrtopg --delete --progress /mnt/ backuser@192.168.1.104::web_log --password-file=/etc/rsync.password
echo "${files} was rsynced" >> /var/log/rsync.log 2>&1
done

 [5] 给予执行权限

# chmod +x /root/inotify.sh
# /root/inotify.sh &        #在后台执行

 [6] 最后,将此脚本加入系统自启动文件

# echo "/root/inotify.sh" >> /etc/rc.local

 [7] 向/mnt/下添加内容,去103上查看是否同步

# ls /data/web_log/
1 11  2  3  4  5  6  7  9

 [8] 编写监听inotify进程脚本,防止inotify由于某种原因中断无法实时同步(如果不需要监听,此步可以跳过)

# vim /root/inotifyjianting.sh
#!/bin/bash
ps -lef |pgrep inotify &> /dev/null    #如果有inotify进程在运行,那么echo $? 返回值是0,条件为真。否则返回值为非0  
if [ -z $? ] ;then                #关键在$?这个变量 ,它是代表上一条命令执行后的退出状态,如果是0的话表示成功,非0表示未开启
echo "inotify runing 正在运行...."
else
/root/inotify.sh &
echo "inotify runing 已运行....."
fi
# chmod +x /root/inotifyjianting.sh

 [10] 添加定时任务计划

# crontab -e
* * * * *     /root/inotifyjianting.sh & > /dev/null

 

分享到:
评论

相关推荐

    rsync+inotify实时同步

    【rsync+inotify 实时同步】 rsync+inotify 是一种高效的实时文件同步解决方案,尤其适用于需要确保数据安全性和可靠性的大型应用系统。rsync 是一个强大的文件同步工具,而 inotify 是 Linux 内核提供的一种文件...

    CentOS下用rsync+inotify实现实时同步

    CentOS下用rsync+inotify实现实时同步 CentOS 7下用rsync+inotify实现实时同步可以实现文件之间的同步备份。下面是相关知识点的详细解释: 1. rsync简介 rsync是一种快速、可靠、安全的文件同步工具。它可以在...

    Centos6.3下rsync+inotify安装配置

    在 CentOS 6.3 环境中,配置文件系统实时同步更新,我们可以采用 rsync 结合 inotify 工具来实现。rsync 是一款强大的数据同步工具,它能够高效地进行本地或远程数据同步。而 inotify 是 Linux 内核提供的一种文件...

    rsync+inotify数据实时同步.pdf

    Linux环境下使用rsync和inotify进行数据实时同步是一种常见的解决方案,尤其适用于需要保持多台服务器数据一致性的场景。rsync是一种快速、多功能的文件传输工具,而inotify是一种内核特性,可用于监控文件系统的...

    一键实现rsync+inotify的小脚本

    自创(不喜勿喷):通过rsync+inotify两个服务自动化实现实时同步的脚本 方便linux使用者使用的脚本,望大佬完善信息,但不要搞破坏,谢谢使用 #### 软件架构 软件架构说明 ssh免密 rsync+inotify两个服务结合 ###...

    过rsync inotify-tools ssh实现触发式远程实时同步

    ### rsync + inotify-tools + SSH 实现触发式远程实时同步 #### 一、概述 在数据同步领域,实现高效且自动化的文件同步是至关重要的。对于需要在两台或多台服务器之间保持文件同步的场景,传统的定时同步方法可能...

    服务器目录实时同步部署手册_rsync.docx

    本文将详细介绍如何利用rsync和inotify工具在两台Linux服务器之间实现文件的实时同步,特别是针对CentOS系统的配置过程。 **rsync简介** rsync是一款强大的文件同步工具,它支持本地或远程的文件和目录同步,具有...

    通过rsync+inotify实现数据的实时备份配置

    【rsync+inotify 实现数据实时备份配置】 在IT领域,数据安全是至关重要的,尤其是在大规模的应用系统中。rsync作为一种高效的数据同步工具,它能够实现数据的镜像和备份,但面对需要实时同步的需求时,rsync的效率...

    Centos7搭建Rsync+inotify远程同步(详解)-附件资源

    Centos7搭建Rsync+inotify远程同步(详解)-附件资源

    inotify-tools+rsync同步使用方法介绍

    `inotify-tools` 和 `rsync` 是两个强大的开源工具,用于实时监控文件系统变动并同步数据。本篇文章将详细介绍如何结合这两个工具在Linux环境中实现高效的数据同步。 `inotify-tools` 是一组C语言编写的命令行工具...

    Step by Step CentOS 7系统下Rsync+Sersync实时数据同步配置

    ### CentOS 7系统下Rsync+Sersync实时数据同步配置知识点 #### CentOS7操作系统概述 CentOS 7(Community ENTerprise Operating System)是基于Red Hat Enterprise Linux构建的免费企业级操作系统。它是由社区驱动...

    Linux下文件实时自动同步备份

    文章目录前言文章重点一、rsync+inotify 简介1、rsync简介2、inotify简介二、整体架构三、同步节点部署(rsync)1...inotify(1)下载安装(2)创建rsync同步的shell脚本五、实时同步备份验证六、遇到的问题及解决方法...

    Linux 通过Rsync+Inotify实现本、异地远程数据实时同步功能

    本文将详细介绍如何利用Rsync+Inotify在Linux系统(以CentOS 6.5为例)中设置远程数据实时同步的步骤。 首先,我们需要在生产服务器上进行环境搭建: 1. 安装必要的软件包。使用`yum install gcc rsync -y`命令安装...

    hualinux2.11 环境搭建:Centos8配置rsync及与inotify和sersync的配合.pdf

    ### inotify+rsync实时同步 inotify是一个监控文件系统事件(如文件创建、删除、修改等)的工具,它可以与rsync结合实现数据的实时同步。 inotify监控的文件事件类型包括: - IN_ACCESS:文件被访问; - IN_MODIFY...

    ysync+inotify安装及部署手册(适合Centos6.x)

    【ysync+inotify安装及部署手册】 ...总之,ysync+inotify的组合为CentOS 6.x提供了高效的数据同步方案,尤其适用于需要实时同步的场景。合理配置和优化,可以极大地提高数据同步的效率和可靠性。

    [Linux] 通过Rsync+Inotify实现本、异地远程数据实时同步

    **centos 6.5** 生产服务器目录: /home/zytest/files 备份服务器目录: /home/zytest/files 用户 / 密码: zytest / zytest 0x1 生产服务器环境搭建 0x1.1 安装gcc编译器和rsync yum install gcc rsync -y 0x1.2 ...

    Linux 系统下安装 rsync+inotify 组件实现多个服务器之间文件实时同步

    客户端的备份文件要和服务器端的备份文件保持实时同步。 例如: 服务端 IP:192.168.2.10 客户端 IP:192.168.2.11,192.168.2.12,…,192.168.2.18 二、服务端开启rsync服务 1.CentOS7操作系统安装完成后,会有自带的...

Global site tag (gtag.js) - Google Analytics