设为首页 收藏本站
查看: 1022|回复: 0

[经验分享] Unison+inotify实现两个主机目录之间的数据双向同步

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-5-26 09:09:41 | 显示全部楼层 |阅读模式
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
[iyunv@jie1 ~]# cd inotify-tools-3.14
[iyunv@jie1 inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify&& make && make install
[iyunv@jie1 inotify-tools-3.14]# cd /usr/local/inotify/
##修改PATH环境变量
[iyunv@jie1 inotify]# echo "PATH=/usr/local/inotify/bin:$PATH">/etc/profile.d/inotify.sh
[iyunv@jie1 inotify]# source /etc/profile.d/inotify.sh
##添加库文件到系统识别的路径
[iyunv@jie1 inotify]# echo "/usr/local/inotify/lib">/etc/ld.so.conf.d/inotify.conf
[iyunv@jie1 inotify]# ldconfig -v | grep inotify
/usr/local/inotify/lib:
    libinotifytools.so.0 -> libinotifytools.so.0.4.1
##链接库文件到系统识别的路径
[iyunv@jie1 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
##安装依赖性包
[iyunv@jie1 unison-2.32.52]#yum -y install ctags-etags
[iyunv@jie1 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文件夹

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

[root@wwwunison-2.40.63]# 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,就解决了问题:

[root@wwwunison-2.40.63]# make install

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

cp unison /root/bin/

cp unison/root/bin/unison-2.40

至此,全部安装完毕
4 配置双机 ssh 信任##把服务器A生成的公钥传到服务器B上####
[iyunv@jie1 ~]# ssh-keygen -t rsa   #
生成ssh的密钥对
[iyunv@jie1 ~]# scp ~/.ssh/id_rsa.pub  192.168.127.130:/root  #生成的密钥在家目录的ssh文件中,ssh文件为隐藏文件,通过scp复制到服务器B上
[iyunv@jie3 ~]# mv id_rsa.pub .ssh/authorized_keys  #在服务器B上把服务器A传来的公钥文件改名并存放到ssh目录下
[iyunv@jie3 ~]# chmod 600 .ssh/authorized_keys  #给公钥文件改权限为600
[iyunv@jie1 ~]# service sshd restart  #重启sshd服务

##
把服务器B生成的公钥传到服务器A上####
[iyunv@jie3 ~]# ssh-keygen -t rsa   #
生成ssh的密钥对
[iyunv@jie3 ~]# scp ~/.ssh/id_rsa.pub  172.16.22.1:/root  #生成的密钥在家目录的ssh文件中,ssh文件为隐藏文件,通过scp复制到服务器B上
[iyunv@jie1 ~]# mv id_rsa.pub .ssh/authorized_keys  #在服务器A上把服务器B传来的公钥文件改名并存放到ssh目录下
[iyunv@jie1 ~]# chmod 600 .ssh/authorized_keys  #给公钥文件改权限为600
[iyunv@jie3 ~]# service sshd restart  #重启sshd服务
5 编写unison同步的脚本进行测试服务器130脚本:
1
2
3
4
5
6
7
8
9
10
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的脚本
1
2
3
4
5
6
7
8
9
10
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  &
经测试,如果脚本加入到这个里面,开机自启动,虽然运行了这个脚本,但是文件并不能同步,所以还是要手动执行一次。
目前不知道什么原因,请各位指教!


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-221937-1-1.html 上篇帖子: RStudio安装caret报错修复过程 下篇帖子: Linux无人值守自动安装详细配置流程 linux 编辑器 主机
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表