ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

unison+inotify实现文件双向同步

2019-10-31 15:55:29  阅读:243  来源: 互联网

标签:unison inotify 双向 ssh home img2 img1


Linux文件双向同步

1、方案选择

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

2、环境需求分析

  现在有两台图片服务器用keepalive做主备,暂叫做img1(主)、img2(备),img1的图片存储目录平时会频繁读写而且通过nginx提供图片访问服务,但如果img1在特殊情况下无法连接或访问了,需要img2服务器提供前端读写和后端访问的能力,且在img1恢复后能将这期间存储在img2上的图片同步到img1。
  Unison+inotify可以完美满足这个需求。
  Unison是windows和unix平台下都可以使用的双向文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致。 unison 拥有其它一些同步工具或文件系统 的相同特性,但也有自己的特点:
  1、跨平台使用;
  2、对内核和用户 权限 没有特别要求;
  3、Unison 是双向的,它能自动   处理两分拷贝中更新没有冲突的部分,有冲突的部分将会显示出来让用户选择更新策略;
  只要是能连通的两台主机 ,就可以运行 unison ,可以直接使用 socket 连接或安全的 ssh 连接方式,对带宽 的要求不高,使用类似 rsync 的压缩传输协议。
  Unison双向同步的一个缺点是,对于同名文件在两个同步文件夹中都被修改时,unison是不会去同步的,因为unison无法判断以那个为准。
  Inotify是一个Linux内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。您还可以跟踪活动的源头和目标等细节。
  因为当前两台图片服务器用作主备,不会出现同时修改的问题,而且图片一般很小,unison在小文件同步时特别快。所以Unison+Inotify可以完美满足当前需求。

3、详细部署

3.1部署环境

主机名主机IP地址系统版本系统内核版本
Img1 172.16.149.145 CentOS release 6.3 (Final) 2.6.32-358.el6.x86_64
Img2 172.16.149.146 CentOS release 6.3 (Final) 2.6.32-358.el6.x86_64

3.2软件部署

  1、保证两台服务器之间可以通过ssh无密码访问,操作如下(以root用户为例):
  Img1上执行(任意目录):

ssh-keygen -t rsa -P ''

  按回车键
  -P '' 就表示空密码,一次回车后,在root目录下生成.ssh目录,.ssh下有id_rsa和id_rsa.pub。 把Img1上面的id_rsa.pub远程拷贝到Img2上面

scp ~/.ssh/id_rsa.pub root@172.16.149.146:/root/id_rsa.pub

  输入密码后,拷贝id_rsa.pub到img2上;

  Img2上执行:

cd /root/
cat id_rsa.pub >> .ssh/authorized_keys
chmod 600 .ssh/authorized_keys

  把img1上复制的id_rsa.pub添加到.ssh/authorzied_keys文件里,赋予600权限。 这时img1就可以不输入密码ssh登录img2; 同样的步骤在img2上执行,使img2可以免密ssh登录img1。

  2、安装ocaml:
  使用xftp上传软件ocaml-3.12.1.tar.gz至home下(img1和img2进行相同操作)

cd /home
tar -zxvf ocaml-3.12.1.tar.gz
cd ocaml-3.12.1
./configure
make world opt
make install

  执行ocaml -version测试是否安装成功:

ocaml -version

  出现The Objective Caml toplevel, version 3.12.1 表示安装成功。

  3、安装unison:(img1和img2进行相同操作)
  安装之前要安装ctags、ctags-etags的rpm支持,将ctags-5.8-2.el6.x86_64.rpm、ctags-etags-5.8-2.el6.x86_64.rpm、unison-2.48.4.tar.gz用xftp上传到home目录下。

cd /home
rpm -ivh ctags-5.8-2.el6.x86_64.rpm
rpm -ivh ctags-etags-5.8-2.el6.x86_64.rpm
tar -zxvf unison-2.48.4.tar.gz
cd src
make UISTYLE=text
mkdir /root/bin
cp unison /root/bin/
make install

  执行unison -version查看unison是否安装成功。

unison -version

  出现unison version 2.48.4表示安装成功

  4、安装inotify (img1和img2进行相同操作)
  将inotify-tools-3.14.tar.gz用xftp上传至home目录

cd /home
tar zxf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr/local/inotify-3.14
make && make install

  5、编写脚本(img1和img2进行相同操作)

cd /home
vim inotify.sh

将下面的脚本内容复制到inotify.sh(按实际环境修改标红的配置项),img1上的ip2为img2的实际ip,img2上的ip2位img1的实际ip。src2为需要同步的源目录,dst2为需要同步的目标目录

#/bin/bash
ip2="172.16.149.146"
src2="/home/image/"
dst2="/home/image/"
inotify_home=/usr/local/inotify-3.14
${inotify_home}/bin/inotifywait -mrq -e create,delete,modify,move $src2 | while ead line; 
do
 /root/bin/unison -batch $src2 ssh://$ip2//$dst2 -servercmd /root/bin/unison
 echo -n "$line " >> /var/log/inotify.log
 echo `date | cut -d " " -f1-4` >> /var/log/inotify.log
done

  2、3、4、5步骤需要在img2上执行一次,只需要改动脚本inotify.sh第二行的ip为172.16.149.145。 6、执行脚本 因为服务器运行时需实时运行脚本,故将脚本加入后台运行。两台服务器都要执行。

chmod +x inotify.sh
nohup ./inotify.sh &

  回车
  后台服务可以通过ps -ef |grep inotify查询进程号杀死进程来取消执行脚本。 最后将上面的命令加入开机启动项。

vim /etc/rc.local

  添加 nohup /home/inotify.sh & 保存
  以上操作完毕就可以保证img1、img2服务器的/home/image目录实时同步了,在两台中任意一台创建、修改、删除、移动文件都会触发同步操作,如果一台服务器down掉,另一台图片服务器可以负责承载前端读写和终端访问,恢复后自启动脚本,再有增删等操作发生时也可以自动同步,通常不需手动维护。

标签:unison,inotify,双向,ssh,home,img2,img1
来源: https://www.cnblogs.com/szz1113/p/11771638.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有