Unison+inotify实现两个主机目录之间的数据双向同步

软件包的下载地址:http://down.51cto.com/data/2219727

1 目的:实现两个主机上面的目录实时同步数据,Unison支撑双向同步操纵,你既可以从A同步到B,也可以从B同步到A,这些都不须要额外的设定。

2 实验环境:server1 :  192.168.127.129     server2 : 192.168.127.130

同步的目录都是/data/nest

3 安装部署:两个服务器安装 unison 和ocaml,inotify

##编译安装ocaml,unison依赖于ocaml

解压 tar zvxf ocaml-3.10.2.tar.gz

cd/root/ocaml-3.10.2
./configure
make world opt
make install

##编译安装inotify
[[email protected] ~]# cd inotify-tools-3.14
[[email protected] inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify&& make && make install
[[email protected] inotify-tools-3.14]# cd /usr/local/inotify/
##修改PATH环境变量
[[email protected] inotify]# echo "PATH=/usr/local/inotify/bin:$PATH">/etc/profile.d/inotify.sh
[[email protected] inotify]# source /etc/profile.d/inotify.sh
##添加库文件到系统识别的路径
[[email protected] inotify]# echo "/usr/local/inotify/lib">/etc/ld.so.conf.d/inotify.conf
[[email protected] inotify]# ldconfig -v | grep inotify
/usr/local/inotify/lib:
    libinotifytools.so.0 -> libinotifytools.so.0.4.1
##链接库文件到系统识别的路径
[[email protected] inotify]# ln -sv /usr/local/inotify/include/ /usr/include/inotify
`/usr/include/inotify‘ -> `/usr/local/inotify/include/‘

##编译安装unison  (保证两台主机之间版本要一致)

Tar zxvf  unison-2.32.52.tar.gz

cd/root/unison-2.32.52
##安装依赖性包
[[email protected] unison-2.32.52]#yum -y install ctags-etags
[[email protected] unison-2.32.52]# make UISTYLE=text
##make install会提示错误,

安装报错:

mv /root/bin//unison/tmp/unison-12798

mv: 无法 stat “/root/bin//unison”: 没有那个文件或目录

make: [doinstall] 错误 1 (忽略)

cp unison /root/bin/

cp: 无法创建一般文件“/root/bin/”: 是一个目录

make: *** [doinstall] 错误 1

解决办法:

创建/root/bin文件夹

[[email protected] unison-2.40.63]# mkdir /root/bin
再次执行make install,还是报如下错误:

[[email protected]]# make install

mv /root/bin//unison/tmp/unison-12868

mv: 无法 stat “/root/bin//unison”: 没有那个文件或目录

make: [doinstall] 错误 1 (忽略)

cp unison /root/bin/

cp unison/root/bin/unison-2.40

尝试再次执行make install,就解决了问题:

[[email protected]]# make install

mv /root/bin//unison/tmp/unison-12899

cp unison /root/bin/

cp unison/root/bin/unison-2.40

至此,全部安装完毕

4 配置双机 ssh 信任

##把服务器A生成的公钥传到服务器B上####
[[email protected] ~]# ssh-keygen -t rsa   #生成ssh的密钥对
[[email protected] ~]# scp ~/.ssh/id_rsa.pub  192.168.127.130:/root  #生成的密钥在家目录的ssh文件中,ssh文件为隐藏文件,通过scp复制到服务器B上
[[email protected] ~]# mv id_rsa.pub .ssh/authorized_keys  #在服务器B上把服务器A传来的公钥文件改名并存放到ssh目录下
[[email protected] ~]# chmod 600 .ssh/authorized_keys  #给公钥文件改权限为600
[[email protected] ~]# service sshd restart  #重启sshd服务

##把服务器B生成的公钥传到服务器A上####
[[email protected] ~]# ssh-keygen -t rsa   #生成ssh的密钥对
[[email protected] ~]# scp ~/.ssh/id_rsa.pub  172.16.22.1:/root  #生成的密钥在家目录的ssh文件中,ssh文件为隐藏文件,通过scp复制到服务器B上
[[email protected] ~]# mv id_rsa.pub .ssh/authorized_keys  #在服务器A上把服务器B传来的公钥文件改名并存放到ssh目录下
[[email protected] ~]# chmod 600 .ssh/authorized_keys  #给公钥文件改权限为600
[[email protected] ~]# service sshd restart  #重启sshd服务

5 编写unison同步的脚本进行测试

服务器130脚本:

Vi 130.sh
#/bin/bash
ipA="192.168.127.129"
srcB="/data/nest"
dstA="/data/a"
/usr/local/inotify/bin/inotifywait -mrq -ecreate,delete,modify,move $srcB | whi                                                                                                            le read line; do
/root/bin/unison -batch $srcB ssh://$ipA/$dstA
echo -n "$line " >>/var/log/inotify.log
echo `date | cut -d " " -f1-4` >>/var/log/inotify.log
done

服务器129的脚本

Vi 129.sh
#/bin/bash
ipB="192.168.127.130"
srcA="/data/a/"
dstB="/data/nest/"
/usr/local/inotify/bin/inotifywait -mrq -ecreate,delete,modify,move $srcA | while read line; do
/usr/local/bin/unison -batch $srcA ssh://$ipB/$dstB
echo -n "$line " >>/var/log/inotify.log
echo `date | cut -d " " -f1-4` >>/var/log/inotify.log
done

##服务器129测试 ,

Sh –x 129.sh先运行unison同步脚本,查看过程,然后进入同步目录/data/nest,去里面新建文件或者目录,不出意外的话,脚本会有长时间的输出信息,然后你登入130去查看/data/nest这个目录,刚刚129上面的文件都会同步过来

## 服务器130测试

同上

最后我们可以把脚本加入到开机自动项里面,并且后台运行编辑/etc/rc.local

加入 /bin/sh  /shell/139.sh  &

经测试,如果脚本加入到这个里面,开机自启动,虽然运行了这个脚本,但是文件并不能同步,所以还是要手动执行一次。

目前不知道什么原因,请各位指教!

时间: 2024-10-03 22:29:44

Unison+inotify实现两个主机目录之间的数据双向同步的相关文章

rsync + inotify 实现两台主机间文件的同步备份

前面一篇博文介绍了rsync的主要使用及工作于服务器模式下的安装.配置.inotify是Linux内核中监控文件系统的一种事件机制,它负责监视文件系统的变化.如文件的创建.修改.删除等,并以事件的方式通知给应用程序.inotify-tools是一个基于内核的inotify机制为用户提供实现对文件系统的事件进行监控功能的应用程序组件. inotify实现的对文件系统监视的事件: IN_ACCESS:文件被访问 IN_MODIFY:文件被修改 IN_ATTRIB,文件属性被修改 IN_CLOSE_W

unison实现数据双向同步

unison简介:双向同步镜像工具,支持跨平台同步.unios可以史本地磁盘的两个文件夹保持内容一致,也支持网络数据的同步 特点:跨平台 1.对内核和用户权限无特别要求 2.unison是双向的,能自动更新两份副本中没有冲突的部分 3.两种方法,一种是远程shell方式,由ssh完成 另一种是socket方式,由发送tcp包通信 4.支持增量同步 操作系统:RHEL6.2 A系统IP:192.168.5.205 B系统IP:192.168.5.206 A系统里目录/ixdba/webdata 实

CentOS7.2下unison+inotify的Web目录同步方案

CentOS7.2下unison+inotify的Web目录同步方案 学习 unison CentOS7.2下unison+inotify的Web目录同步方案 1. 背景 2. Unison简介 3. 环境准备 4. 安装Objective Caml compiler 5. 安装unison 6. 安装inotify 7. 配置双机ssh信任 8. unison的使用 9. 配置双机web目录同步 10. 总结 1. 背景 最近需要上线一个公司展厅项目,项目中主要是后台图片管理.因此它基本不会出

inotify+unison双向同步环境部署

在网上搜寻了很多方案,在liux下做文件同步,有如下几种方式: 1.nfs实现web数据共享 2.rsync +inotify实现web数据同步 3.rsync+sersync更快更节约资源实现web数据同步 4.unison+inotify实现web数据双向同步 在这里详细介绍第四种方案,前几种都有些各自的不足.只有第四种方案支持双向实时同步,且当其中一台服务器宕机,也不会影响web的访问.(ps:之前一直喜欢nfs,配置非常简单,但是其有个致命的缺点就是其中一台web服务挂掉之后,会直接导致

rsync结合inotify实现数据自动同步

rsync+inotify rsync介绍 rsync是一个远程数据同步工具,可通过lan/wan快速同步多台主机间的文件.它使用所谓的"rsync演算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快.所以通常可以作为备份工具来使用. 运行rsync server的机器也叫backup server,一个rsync server可同时备份多个client的数据:也可以多个rsync server备份一个client的数

rsync + inotify 实现数据时时同步,和跨系统实现数据同步。

一.rsync客户端与服务端结构图: 日常维护中,数据备份算是比较基本的一个了,rsync很好的解决了繁琐的数据时时同步,不需要手动指定变化的数据,而是由rsync自动检测,发现数据不一致时,就开始备份或者推送到其他rsync主机上.inotify是linux监控文件变化的监控工具,可以配合rsync更好的完成工作.很多公司操作系统可能都是不统一的,上面就又添加的一个windows的主机,已实现将在windows主机上将linux主机中的数据拉取到win主机上. 二.rsync简介. 1.)rs

rsync+inotify实现数据实时同步

inotify简介 inotify是一种强大的.细粒度的.异步的文件系统事件监控机制,Linux内核从2.6.13开始引入,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开.关闭.移动/重命名.删除.创建或者改变属性. 配置inotify需要rsync服务能直接传输数据(免密码传输). rsync配置请参考我的另一篇利用rsync进行数据同步. 服务端已配置完毕,inotify配置在客户端. 1.[[email protected] ~]# wget http://

iOS开发中视图控制器ViewControllers之间的数据传递

iOS开发中视图控制器ViewControllers之间的数据传递 这里我们用一个demo来说明ios是如何在视图控制器之间传递重要的参数的.本文先从手写UI来讨论,在下一篇文章中讨论在storyboard中传递数据. 首先新建一个空工程,并添加一个根视图控制器类,如下图所示: # 在函数didFinishLunchingWithOption中添加几行代码,完成后如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 - (BOOL)application:(UIApplication

<两台主机之间日志的同步>

首先要知道两台主机之间同步文件udp虽然安全性不高,但是它的同步速率远远高于tcp.这点是不可否认的. 我们以简单的为例: 服务端: 允许别的主机可以把日志同步到自己的主机上来. # vim /etc/rsyslog.conf $ModLoad imudp  //开启udp协议,添加udp模块. $UDPServerRun 514 /etc/init.d/rsyslog restart 重启使配置生效 # tail -f /var/log/messages  //动态监控日志 客户端 把日志往哪