• unison+inotify实现文件双向自动同步


    nfs适合存小图片和小文件,有一个致命的缺点,就是其中一台web服务挂掉之后,会直接导致web页面无法访问,动态的那种数据,

    且数据量很大的数据不适合nfs

    Unison是一款跨平台(window,unix,linux)的文件同步对象,不仅支撑本地对本地同步,也支持经由过程SSH、RSH和Socket同

    支持双向同步

    下载并且编译安装三个软件包。(inotify-tools-3.14.tar.gz、ocaml-3.10.2.tar.gz、unison-2.32.52.tar.gz)

    mkdir  /tools    cd /tools

    wget http://caml.inria.fr/pub/distrib/ocaml-3.10/ocaml-3.10.2.tar.gz

    wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/unison-2.32.52/unison-2.32.52.tar.gz

    wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

     

    tar xf inotify-tools-3.14.tar.gz

    tar xf ocaml-3.10.2.tar.gz

    tar xf unison-2.32.52.tar.gz

    cd inotify-tools-3.14

    ./configure --prefix=/usr/local/inotify && make && make install

    echo "PATH=/usr/local/inotify/bin:$PATH" >/etc/profile.d/inotify.sh

    source /etc/profile.d/inotify.sh

    echo "/usr/local/inotify/lib" >/etc/ld.so.conf.d/inotify.conf   (创建库文件)

    ldconfig -v | grep inotify    (使系统从新装载一下所有库文件)

    ln -sv /usr/local/inotify/include/ /usr/include/inotify  (导出头文件)

    cd /tools/ocaml-3.10.2

    ./configure

    make world opt

    make install

    cd /tools/unison-2.32.52

    yum -y install ctags-etags

    make UISTYLE=text THREADS=true STATIC=true

    #UISTYLE=text THREADS=true STATIC=true 表示:使用命令方式,加入线程支持,以静态模式编译

    make install

    接下来会提示错误

    mv /root/bin//unison /tmp/unison-10576

    mv: 无法获取"/root/bin//unison" 的文件状态(stat): 没有那个文件或目录

    make: [doinstall] 错误 1 (忽略)

    cp unison /root/bin/

    cp: 无法创建普通文件"/root/bin/": 是一个目录

    make: *** [doinstall] 错误 1

    上述报错不用管他,接下来使用一条命令就可以:cp unison /usr/local/bin

    上述操作在其他要同步的服务器也操作一遍

    生成ssh秘钥对:ssh-keygen     cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

    将文件id_rsa    id_rsa.pub    authorized_keys   复制到其他主机上的对应目录 

    也可以使用ssh-copy-id -i命令,例如:ssh-copy-id -i ./.ssh/id_rsa.pub root@192.168.238.236

    mkdir -p /var/vm1

    mkdir -p /var/vm2

    vmware1上

    [root@vmware1 ~]# cat unison-A.sh

    #!/bin/bash
    ipB="192.168.1.11"
    srcA="/var/vm1"
    dstB="/var/vm2"
    /usr/local/inotify/bin/inotifywait -mrq -e create,delete,modify,move $srcA | while read line; do
    /usr/local/bin/unison -batch $srcA ssh://$ipB/$dstB
    echo -n "$line " >> /var/log/inotify.log
    echo `date | cut -d " " -f1-4` >> /var/log/inotify.log
    done
    [root@vmware1 ~]# chmod o+x unison-A.sh
    [root@vmware1 ~]# bash unison-A.sh &
     
    crontab -e
    * * * * * bash unison-A.sh & 

    vmware2上

    [root@vmware2 ~]# cat unison-B.sh 

    #!/bin/bash
    ipA="192.168.1.12"
    srcB="/var/vm2"
    dstA="/var/vm1"
    /usr/local/inotify/bin/inotifywait -mrq -e create,delete,modify,move $srcB | while read line; do
    /usr/local/bin/unison -batch $srcB ssh://$ipA/$dstA
    echo -n "$line " >> /var/log/inotify.log
    echo `date | cut -d " " -f1-4` >> /var/log/inotify.log
    done
    [root@vmware1 ~]# chmod o+x unison-B.sh
    [root@vmware2 ~]# bash unison-B.sh &
     
    crontab -e
    * * * * * bash unison-B.sh &
     
    如何解决在和远程服务器同步大量数据,上传一部分数据后超时

    实际操作中,最好的方法是,第一次先把要上传的文件打成包,用 nc 上传,然后展开到服务器中,之后手动执行一次 unison 同步即

     补充:使用自动同步之前最好执行一下手动同步

    补充:当文件同步完成后可能会看到如下信息

     要求认证RSA密钥的指纹信息,这个是没有必要的,每次手动输入yes很麻烦,vim /etc/ssh/ssh_config在最后一行添加如下信

    息StrictHostKeyChecking no

     群集中,同步在多机之间进行,而unison的同步功能仅支持双机。因此我们设计了一个星型的拓扑结构,来实现多机的同步。其设计

    想就是利用unison的双向同步功能,指定一台服务器为星型结构的主服务器(server1),剩余服务器与其进行双向同步。这样,任

    一台服务器上的文件变化都可以通过这个结构扩散,从而达到多机同步的目的;这一结构的缺点是一旦server1当机失效,同步就会

    败。因此,有必要的话,可以组成双主服务器的星型结构来弥补;

     

  • 相关阅读:
    SOA the new OOP?
    请教一个程序装入执行的问题!
    程序员,如何选择合适的程序语言
    题解 P2387 【[NOI2014]魔法森林】
    题解 P4197 【Peaks】
    货车运输
    线段树合并
    jvm系列五java内存模型(2)
    jvm系列一什么是jvm
    jvm系列二内存结构
  • 原文地址:https://www.cnblogs.com/linuxboke/p/5489363.html
Copyright © 2020-2023  润新知