zoukankan      html  css  js  c++  java
  • SUSE系统UNISON+inotify数据的双向实时同步

    UNISON安装部署手册

    操作系统:SUSE12

    安装包:inotify-tools-3.13.tar.gz  ocaml-4.02.0.tar.gz   unison-2.48.4.tar.gz

    主机:FH-UMP-PORTAL1  192.168.1.181 

      FH-UMP-PORTAL2  192.168.1.182

    登录用户/密码:root/123456

    配置文件:/root/.unison/default.prf

    Unison双向同步基本原理是:假如有A B两个文件夹,A文件夹把自己的改动同步到B,B文件夹也把自己的改动同步到A,最后A B两文件夹的内容相同,是AB文件夹的合集。
    Unison双向同步的一个缺点是,对于一个文件在两个同步文件夹中都被修改时,unison是不会去同步的,因为unison无法判断以那个为准。

    一、安装前的准备

    1. 查看空间大小

    # df -h

    2. 创建目录

    #mkdir /opt/unison

    3. 上传安装包到指定目录

    二、解压及安装

    4. 解压、编译、安装

    (1) 对于ocaml-4.02.0.tar.gz(Linux下通过源码包编译安装Unison时,需要用到Objective Caml compiler)

    解压:#tar zxfv ocaml-4.02.0.tar.gz

    进入解压目录:#cd ocaml-4.02.0

    配置:#./configure

    编译:#make world opt

    安装:#make install

    (2) 安装unison-2.48.4.tar.gz

    解压:#tar zxvf unison-2.48.4.tar.gz

             

    进入解压目录:#cd src/

    编译:#make UISTYLE=text

    安装:#make install

    5. 有安装信息说明安装成功

           

    三、配置双机ssh 信任 (免密登录)

    6. 在FH-UMP-PORTAL1上创建key并配置PORTAL2的信任

    (1) 获取密钥对

    # ssh-keygen -t rsa

     

    (2)将公钥添加到authorized_keys文件中,并修改权限

     

    (3)使用rsync 远程同步将密钥传到PORTAL2

     

    7. 同样的,在FH-UMP-PORTAL2上创建key并配置PORTAL1的信任

    #ssh-keygen -t rsa

    #cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

    #chmod 700 ~/.ssh/

    #chmod 600 ~/.ssh/authorized_keys

    #rsync -avz /root/.ssh/authorized_keys root@192.168.1.181:/root/.ssh/authorized_keys

    注:配置结束后,在两台机器上分别ssh对方IP,能无密码登录则表示配置成功。

    如:

        

    四、Unison的配置与使用

    8. Unison的使用方法

         

    (1) 本地使用
    使用方法:
    #unison  111 222  #同步本地的111和222文件夹

    (2) unison远程使用
    使用方法:
    # unison <本地目录> ssh://remotehostname(IP)/<远程目录的绝对路径>
    例如:
    # unison /home/AAA ssh://username@remotehostname(ip)//DB/path/BBB
    表示将本机的目录/home/AAA和远端主机的/DB/path/BBB进行同步。一般的,需要两台机能ssh连接。
    注意: 在主机和目录间又多加了一个 "/"

    9. Unison的相关配置

    修改unison配置文档(以共享/opt目录为例):

    #cd /root/.unison

    #vim default.prf

     # Unison preferences file

    root = /opt

    root = ssh://192.168.1.182//opt

    #force =

    #ignore =

    batch = true

    #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

    PORTAL2:

    #vim /root/.unison/default.prf

    # Unison preferences file

    root = /opt

    root = ssh://192.168.1.181//opt

    #force =

    #ignore =

    batch = true

    #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

    相关注解如下:
    1.两个root表示需要同步的文件夹。

    2.force表示以本地的文件夹为标准,将该目录同步到远端,开启后则变成单项同步

    3.ignore = Path表示忽略某个目录,即同步时不同步它。

    4. batch=true 表示全自动模式,接受并执行默认动作

    5.log = true表示在终端输出运行信息。

    6.logfile则指定了同时将输出写入log文件。

    7.owner = true //保持同步过来的文件属主 

    8.group = true //保持同步过来的文件组信息 

    9.perms = -1 //保持同步过来的文件读写权限 

    10.repeat = 1 //间隔1秒后,开始新的一次同步检查 

    11.retry = 3 //失败重试 

    12.sshargs = -C //使用ssh的压缩传输方式 

    fastcheck true 表示同步时仅通过文件的创建时间来比较,如果选项为false,Unison则将比较两地文件的内容。 

    auto //接受缺省的动作,然后等待用户确认是否执行。 

    ignore xxx //增加 xxx 到忽略列表中  :经测试此参数不能用。

    ignorecase [true|false|default] //是否忽略文件名大小写 

    follow xxx //是否支持对符号连接指向内容的同步 

    xferbycopying = true

    immutable xxx //不变目录,扫描时可以忽略 

    silent //安静模式 

    times=true //同步修改时间 

    path xxx 参数 //只同步 -path 参数指定的子目录以及文件,而非整个目录,-path 可以多次出现。

    confirmbigdel=false//默认值为true,表示当需要同步的两个目录一个为空时,unison将停止,这里设置为false,即便为空unison也不会停止运转

    10. 测试(手动推)

    (对于unison),在PORTAl1中有变化,则执行unison后PORTAL2就会发生对应的变化,例如:PORTAL1:

    #mkdir /opt/dir1

    #ll

       

    而此时的PORTAL2是没有dir1文件的

    执行命令同步:

    PORTAL1:

    #unison

    PORTAL2:

    #ll

     

        

    则会出现dir1文件,说明同步成功。

    注:unison只会同步变动的一方,所以在生产环境中不能轻易改动PORTAL2中的内容。

    PORTAl2只在PORTAL1出故障的时候启用,所以必须保证同步是正确的,且及时。

    五、定时或定期执行同步

    如果想要定期执行,则通过crontab计划任务来实现,例如通过以下方式设置每5分钟执行一次。

    #crontab -e

    * * * * * /usr/local/bin/unison
    使计划任务生效 需要重启 crond服务
    [root@vm1 ~]# service crond restart


    六、安装inotify实时监控

    11. 查看系统是否支持inotify

        

    说明支持。

    12. 安装inotify

    #cd /opt

    #tar zxvf inotify-tools-3.13.tar.gz

    #cd inotify-tools-3.13/

    #./configure

    #make && make install

    13. 编写inotify实时监控脚本

    #cd /tmp

    #cd ..

    #vim inotify.sh

    #!/bin/bash

    UNISON=`ps -ef |grep -v grep|grep -c inotifywait`

    if [ ${UNISON} -lt 1 ]

    then

            user2="unison"

            ip2="FH-UMP-PORTAL2"

            src2="/opt"

            dst2="/opt"

            /usr/local/bin/inotifywait -mrq -e create,delete,modify,move $src1 | while read line

            do

                    #/root/bin/unison -batch $src2 ssh://$user2@$ip2//$dst2

                    /root/bin/unison

                    echo -n "$line " >> /opt/inotify/inotify$(date +%u).log

                    echo ` date +%F %T " " -f1-4` >> /opt/inotify/inotify$(date +%u).log

            done

    fi

    #chmod +x inotify.sh

  • 相关阅读:
    浅析Dagger2的使用
    Android消息机制源码分析
    EventBus3.0源码解析
    Android自定义控件(二)
    Android 自定义控件(一)
    Android IPC机制之ContentProvider
    Android IPC机制之Messenger
    Android IPC机制之AIDL
    Android网络请求框架
    Android常用设计模式(二)
  • 原文地址:https://www.cnblogs.com/A121/p/9941673.html
Copyright © 2011-2022 走看看