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

    重启机器即可

  • 相关阅读:
    HDU 1075 What Are You Talking About(字典树)
    HDU 1075 What Are You Talking About (stl之map映射)
    HDU 1247 Hat’s Words(字典树活用)
    字典树HihoCoder
    HDU 1277全文检索(字典树)
    HDU 3294 Girls' research(manachar模板题)
    HDU 3294 Girls' research(manachar模板题)
    HDU 4763 Theme Section(KMP灵活应用)
    Ordering Tasks UVA
    Abbott's Revenge UVA
  • 原文地址:https://www.cnblogs.com/regit/p/8073097.html
Copyright © 2011-2022 走看看