• unison+inotify的Web目录同步方案


    1、在Linux下做WEB目录文件同步

    一般有如下几种方式:

    1)       nfs实现web数据共享

    2)       rsync +inotify实现web数据同步

    3)       rsync+sersync更快更节约资源实现web数据同步

    4)       unison+inotify实现web数据双向同步

    他们各有优缺点,这里我根据实际情况,选择方案4。

    2、Unison简介

    Unison是windows和unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致。Unison拥有其它一些同步工具或文件系统的相同特性,但也有自己的特点:跨平台使用;对内核和用户权限没有特别要求;Unison是双向的,它能自动处理两分拷贝中更新没有冲突的部分,有冲突的部分将会显示出来让用户选择更新策略;只要是能连通的两台主机,就可以运行Unison,可以直接使用socket连接或安全的ssh连接方式,对带宽的要求不高,使用类似rsync的压缩传输协议。

    3、 环境准备如下:

     

    4、安装ocaml

    下载:

    wget http://caml.inria.fr/pub/distrib/ocaml-4.00/ocaml-4.00.1.tar.gz

    解压、安装:

    # tar -zxvf ocaml-4.00.1.tar.gz
    # cd ocaml-4.00.1
    # ./configure
    # make world opt
    # make install

    注意:请下载此版本的ocaml,高版本安装时可能会出错。

    5、安装unison

    缺少此安装包时下面make步骤会报错:

    # yum -y install ctags-etags 
    # wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.48.4.tar.gz
    # mkdir unison-2.48.4 && cd unison-2.48.4
    # tar -zxvf /root/unison-2.48.4.tar.gz
    # cd src
    # make UISTYLE=text THREADS=true
    # cp unison /usr/local/bin/
    # unison -version   # 有版本信息出现,则安装成功

    6、安装inotify

    下载链接:http://mirrors.aliyun.com/repo/epel-6.repo
    •  以上安装操作两台机器都需要操作!

    •  到此需要的软件就安装完成了!

    7、配置双机ssh信任

    在web1上生成密钥,不输入私钥密码:

    步骤如下:

    [root@web1 ]# ssh-keygen
    ----- 信息省略,回车三下 --------
    [root@ web1 ]# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
    [root@ web1 ]# chmod 700 ~/.ssh
    [root@ web1 ]# chmod 600 ~/.ssh/authorized_keys
    [root@ web1 ]# rsync -avz /root/.ssh/authorized_keys
    [root@ web1 ]# rsync -avz /root/.ssh/authorized_keys root@192.168.239.62:/root/.ssh/authorized_keys

    web2同理!

    8、配置双机web目录同步

    8.1、Web1上操作:

    [root@web1 ]# mkdir -p /root/.unison/
    [root@web1 ]# vim /root/.unison/default.prf
    ---------------- 配置信息如下 ------------------
    
    #Unison preferences file
    
    root = /opt/html/
    root = ssh://root@192.168.239.62/ /opt/html/
    #force =
    #ignore =
    batch = true
    maxthreads = 300
    #repeat = 1
    #retry = 3
    owner = true
    group = true
    perms = -1
    fastcheck = false
    rsync = false
    sshargs = -C
    xferbycopying = true
    log = true
    logfile = /root/.unison/unison.log
    ----------------------------------------

    8.2、Web2上操作:

    [root@web2 ]# mkdir -p /root/.unison/
    [root@web2 ]# vim /root/.unison/default.prf
    ---------------- 配置信息如下 ------------------
    
    #Unison preferences file
    
    root = /opt/html/
    root = ssh://root@192.168.239.61/ /opt/html/
    #force =
    #ignore =
    batch = true
    maxthreads = 300
    #repeat = 1
    #retry = 3
    owner = true
    group = true
    perms = -1
    fastcheck = false
    rsync = false
    sshargs = -C
    xferbycopying = true
    log = true
    logfile = /root/.unison/unison.log
    ----------------------------------------

    9、在两台机器都添加如下脚本,并使用nohup方式运行。

    [root@web1 ~]# mkdir /script
    [root@web1 ~]# vim /script/inotify.sh
    ------------- 脚本信息如下 -------------
    
    #/bin/bash
    
    src="/opt/html/"
    /usr/bin/inotifywait -mrq -e create,delete,modify,move $src | while read line; do
        /usr/local/bin/unison
        echo -n "$(date +%F-%T) $line" >> /var/log/inotify.log
    done
    --------------------------------------------------------------------------
    [root@web1 ~]# chmod +x /script/inotify.sh                               

    10、两台机器都需要建立日志目录

    如果/var/log/inotify目录没有则需要手工创建,用来存放inotify的日志。

    [root@web1 ]# mkdir /var/log/inotify
     [root@web2 ~]# mkdir /var/log/inotify                                    

    11、将两台机器脚本使用nohup后台运行

    如果错误信息输出到日志文件:

    [root@web1 ~]# nohup /script/inotify.sh >/dev/null 2>log &                      

    如果错误信息也不想要的话:

    [root@web1 ~]# nohup /script/inotify.sh >/dev/null 2>&1 &     

    12、最后测试

    • 重启电脑,测试二台服务器中/opt/http/的内容是否能同步
    • 不重启电脑,手动执行脚本也可以测试
    • 在其中一台/opt/http/目录中添加,或修改,或删除文件的时候,可以看到脚本状态,同时另一台服务器也应该会跟随操作。
  • 相关阅读:
    从Objective-C到Swift,你必须会的(四)DLog
    从Objective-C到Swift,你必须会的(三)init的顺序
    从Objective-C到Swift,你必须会的(二)组合options
    从Objective-C到Swift,你必须会的(一)#pragma mark
    swift的可选值(optional)
    一个通用的DataGridView导出Excel扩展方法(支持列数据格式化)
    C#定时执行一个操作
    用Dictionary替换switch case
    Web Service 通过BinaryFormatter序列化和反序列化泛型List
    开源.NET FTP组件edtFTPnet 用法
  • 原文地址:https://www.cnblogs.com/l-hh/p/9837760.html
Copyright © 2020-2023  润新知