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