zoukankan      html  css  js  c++  java
  • 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

    重启机器即可

  • 相关阅读:
    约瑟夫解决问题的循环链表
    [Erlang危机](5.1.0)VM检测概述
    找呀志_java网络编程(5)TCP和udp差额
    有序输出两棵二叉查找树中的元素
    1234567选择3个数字组合
    八皇后问题
    矩阵乘法运算
    求π的近似值
    证明不小于6的偶数都是两个素数之和
    最大公约数最小公倍数
  • 原文地址:https://www.cnblogs.com/regit/p/8073097.html
Copyright © 2011-2022 走看看