最近研究目录同步.最初考虑的是rsync,用的时候发现只能单向同步而且要实现双向还得用inotify.后来发现unison能解决双向同步的问题而且相比rsync简单的多.

系统平台: CentOS 6.4 x64

配置过程:
1.安装 yum install unison.x86_64  (软件包在rpmforge源里)
  同步的两端都要安装且版本必须相同.
2.配置双机ssh信任
  由于unison在远程同步文件夹要登陆远程服务器,因此要配置两机互相信任
  本地机: 172.16.253.202
  远程机: 172.16.253.201

  1. 在两台机器上创建 RSA密钥
  以下操作要在本地机和远程机上都执行一遍
  (1)以 root 用户登录
  (2)在 root 用户的主目录内创建.ssh 目录并设置正确的权限
    chmod 700 ~/.ssh
  (3)使用 ssh-keygen 命令生成第 2 版本的 SSH 协议的 RSA 密钥
    ssh-keygen -t rsa
    使用默认的私钥(key)和公钥(public key)位置.
    私钥密码(passphrase)为空.
  2. 添加密钥到授权密钥文件(authorized key file)中
    cd ~/.ssh
    ssh 10.178.1.132 cat /root/.ssh/id_rsa.pub >> authorized_keys
    ssh 10.178.1.110 cat /root/.ssh/id_rsa.pub >> authorized_keys
    密钥文件复制到远程端:
    scp authorized_keys 10.178.1.110:/root/.ssh/

  3.测试
  ssh 10.178.1.132 date
  ssh 10.178.1.110 date
  如果不需要输入密码就出现系统日期,说明 SSH 配置成功。

3.使用配置文件同步.

  配置文件位置: ~/.unison/default.prf

  设置: 

# Unison preferences file
root = /opt/unison
root = ssh://root@172.16.253.201//opt/unison/
batch = true

  batch = true,表示全自动模式,接受缺省动作,并执行

  执行unison命令即可执行同步.

 

默认是运行一次unison进行一次同步, 只能写在cron里作为定时同步. 利用inotify可以实现触发式同步,每次对目录中文件修改都会触发一次同步操作,解决了即时性的问题.

1.安装inotify软件包.
  yum install inotify-tools -y  (需先安装epel源)

2.编写同步脚本

#!/bin/bash

# add this to /etc/rc.local 

/usr/bin/inotifywait -mrq -e modify,delete,create,attrib /opt/unison | while read file
do
    unison
done

3.系统启动时执行脚本文件,添加到/etc/rc.local.执行命令后加 &保证后台运行.

 echo '/DroneStorage/Scriptes/inotify.sh &' >> /etc/rc.local

 

参考: http://blog.163.com/yaning_softwo/blog/static/37837721201131103546979/

    

  

    

 

 


  

  

posted on 2013-11-20 11:43  V42  阅读(715)  评论(0编辑  收藏  举报