最近研究目录同步.最初考虑的是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/