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

原文地址:https://www.cnblogs.com/A121/p/9941673.html