centos7中使用Rsync和inotify同步文件
一. 环境说明
由于web服务器所提供的网站数据需要保持一致,但当服务器越来越多时,这些主机之间同步网站数据会很麻烦。
解决方案是在后端建立一个数据发布服务器,该服务器作为rsync客户端,通过inotify机制实时监控网站数据,当数据发生变化后调用rsync命令上传数据到多个web服务器(也是rsync服务器)
我使用3台机器做的实验
pc1的ip为192.168.0.230,作为web服务器1,也是rsync服务端,需要修改/etc/rsyncd.conf配置文件
pc2的ip为192.168.0.231,作为web服务器2,也是rsync服务端,需要修改/etc/rsyncd.conf配置文件
pc3的ip为192.168.0.240,作为数据发布服务器,是rsync的客户端,不需要配置/etc/rsyncd.conf,但是需要安装inotify
二. 在web服务器上部署rsync服务器
在多台web服务器上部署rsync服务,这些rsync服务需要提供客户端上传功能,以实现客户端主机将数据推送到rsync服务器,这样我们只需要在192.168.0.240主机上修改数据,就可以实时推送数据到两台web服务器
pc1的配置如下
yum -y install rsync #centos7中默认已安装
mkdir -p /var/www/001 #建立数据同步存放目录
chmod 770 /var/www/001 #修改权限,必须要有读,写,执行权限,否而会失败。
chown nobody.nobody /var/www/001 #修改所属
然后修改配置文件,vim /etc/rsyncd.conf 如下
transfer logging = yes
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
uid = nobody
gid = nobody
use chroot = no
ignore errors
read only = no
[web1] #设置web1模块
comment = web content
path = /var/www/001 #模块web1的路径
auth users = tom
secrets file = /etc/rsyncd.secrets
host allow = 192.168.0.240
hosts deny=*
list = false
然后设置密码文件,防火墙
echo "tom:123" > /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets
rsync --daemon #一定记得要开启rsync
echo "rsync --daemon" >> /etc/rc.local
firewall-cmd --permanent --add-port=873/tcp #rsync默认端口是873,设置防火墙永久允许
firewall-cmd --reload
pc2的配置和pc1一样,为了容易区分,可在pc2上建立同步数据存放目录/var/www/002
三。配置数据发布服务器(192.168.0.240)
1. 安装相应软件
yum -y install rsync
rsync --daemon #开启rsync
yum -y install automake libtool #安装编译安装软件所需工具
wget http://downloads.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz #下载inotify-tool软件包
解压后进入inotify-tools-3.13目录,执行如下安装
./configure #默认安装路径是/usr/local,如果想改变路径可在后面加参数 --prefix 路径名
make && make install
2. 设置密码文件
echo "123" > /root/rsync.pass #名字可任意写,123为rsync服务端配置的用户名为tom的密码
chmod 600 /root/rsync.pass
3. 编写监控脚本
vim notify_rsync.sh
#!/bin/bash
export PATH=/bin:/usr/bin:/usr/local/bin
SRC=/web_data/ #设置修改数据的目录
DEST1=web1 #pc1的模块名
DEST2=web2 #pc2的模块名
Client1=192.168.0.230
Client2=192.168.0.231
User=tom
Passfile=/root/rsync.pass
[ ! -e $Passfile ] && exit 2
#wait for change
inotifywait -mrq --timefmt '%y-%m-%d %H:%M' --format '%T %w%f %e' \
--event modify,create,move,delete,attrib $SRC | while read line
do
echo "$line" > /var/log/inotify_web 2>&1
#同步数据到pc1,下面命令其实就是rsync -avz /web_data/ tom@192.168.0.230::web1,然后把输出结果记录在sync_web1中
rsync -avz --delete --progress --password-file=$Passfile $SRC ${User}@$Client1::$DEST1 >> /var/log/sync_web1 2>&1
#同步数据到pc2
rsync -avz --delete --progress --password-file=$Passfile $SRC ${User}@$Client2::$DEST2 >> /var/log/sync_web2 2>&1
done &
然后执行此脚本 sh notify_rsync.sh,之后在/web_data/目录下的操作就可同步到web1和web2的相应同步目录中了
注意,我还禁用了selinux,方法如下
1. 查看SELinux状态:
/usr/sbin/sestatus -v #如果SELinux status参数为enabled即为开启状态
getenforce #也可以用这个命令检查
2. 关闭SELinux:
临时关闭(不用重启机器):
setenforce 0 #设置SELinux 成为permissive模式
setenforce 1 #设置SELinux 成为enforcing模式
3. 修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器即可
centos7中使用Rsync和inotify同步文件的更多相关文章
- 使用rsync备份与同步文件
在数字化时代的今天,随着个人拥有的数据量急剧增加,对其中的重要数据进行备份以保证其安全性.正确性变得越来越重要.同时,由于在公司.实验室.家里.外出等不同环境下往往使用不同的电脑设备(如台式机.笔记本 ...
- 通过在shell脚本中用scp或rsync实现远程同步文件
通过在shell脚本中用expect实现远程scp文件 shell expect的简单用法 http://myunix.blog.51cto.com/191254/1095074 http://ji ...
- Centos7 rsync+inotify两台服务器同步文件(单向)
注:本篇介绍的是单向同步,即A文件同步到B,但B的文件不同步到A,双向同步的在下一篇文章中. rsync与inotify不再赘述,直接进入实战. 0.背景 两台服务器IP地址分别为: 源服务器:192 ...
- rsync+inotify实时数据同步
没有实际的用过,先mark一下,后面实践. https://www.osyunwei.com/archives/7447.html 一.为什么要用Rsync+sersync架构? 1.sersync是 ...
- rsync实现文件备份同步(比如服务器镜像)
[rsync实现网站的备份,文件的同步,不同系统的文件的同步,如果是windows的话,需要windows版本cwrsync] 一.什么是rsync rsync,remote synchronize顾 ...
- 用rsync命令删除大文件夹
删除大文件夹 rsync 命令做同步文件用的命令 我们可以借助其快速的运行 来对大文件夹删除:原来就是 新建一个空文件夹 然后把这个空文件夹同步到一个大文件夹下面: 这样会删除大文件夹下面的内容 是高 ...
- CentOS7之Rsync+Inotify架构实现实时同步文件和文件夹
简介:rsync是用来同步文件和文件夹的,inotify是用来实现监听变动而自动同步的 OS:Centos7.3 服务器端:172.16.13.157 客 户 端 :172.16.13.156 目 ...
- Inotify+Rsync实现Linux服务器文件同步
做这个功能的时候遇到了好多坑,在此感谢一下这篇博客 http://kerry.blog.51cto.com/172631/734087/ ,大家参照这篇博客就能实现该功能. 另外如果想详细了解一下的 ...
- CentOS7.5搭建Rsync,实现文件同步
Rsync(remote sync)是UNIX及类UNIX平台下一款神奇的数据镜像备份软件,它不像FTP或其他文件传输服务那样需要进行全备份,Rsync可以根据数据的变化进行差异备份,从而减少数据流量 ...
随机推荐
- Unity 之 Shader 面的剔除 Cull
面的剔除 Cull 在渲染的时候,默认情况下是只有朝向摄像机的面才会被渲染,可以告诉Unity,我想渲染哪一个朝向的面,使用Cull命令在计算体积阴影的时候会用到对Cull的操作来计算和物体相交的投影 ...
- 《Android Studio实用指南》7.1 AndroidStudio代码检查工具概述
本文节选自<Android Studio实用指南> 作者: 毕小朋 目前本书已上传到百度阅读, 在百度中搜索[Anroid Studio实用指南]便可以找到本书. Android Stud ...
- idea升级maven工程jar包版本和解决jar包冲突
原来用过eclipse的都知道,想要升级maven工程的jar包版本或者解决jar包冲突,直接在pom文件下的dependency hierarchy视图下右击冲突的jar包,将其exclude掉,然 ...
- C++细节理解
1.为什么static类外初始化不需要static关键字 答:因为类外static变量或函数表示限定在此源文件中才能使用,而类中的static变量或函数表示由本类及其所有对象共享,如果在类外初始化或定 ...
- OpenGL坐标变换专题
OpenGL坐标变换专题(转) OpenGL通过相机模拟.可以实现计算机图形学中最基本的三维变换,即几何变换.投影变换.裁剪变换.视口变换等,同时,OpenGL还实现了矩阵堆栈等.理解掌握了有关坐 ...
- pcl文档库
http://docs.pointclouds.org/trunk/structpcl_1_1_polygon_mesh.html
- zigbee组播通信原理
组播: 在zigbee网络里面,把网络节点标记为组的方式来进行通信:发送模块如果发送的组号和网络里标记模块的组号相对应,那么这些模块就可以拿到这些无线数据包. 特点: 1.分组中组的编号有两个字节. ...
- Redis初学笔记
1.官网概述 Redis is an open source (BSD licensed), in-memory data structure store, used as database, cac ...
- jQuary总结1:jQuary的优点和地位
1 什么是jQuery? jQuery是一个快速,小巧,功能丰富的JavaScript库. javascript库: 就是存放javascript代码的仓库 jQuery作为一个迭代多年的优秀框架,是 ...
- 编写高质量代码改善C#程序的157个建议——建议103:区分组合和继承的应用场合
建议103:区分组合和继承的应用场合 继承所带来的多态性虽然是面向对象的一个重要特性,但这种特性不能在所有的场合中滥用.继承应该被当做设计架构的有用补充,而不是全部. 组合不能用于多态,但组合使用的频 ...