几种文件夹同步工具介绍
1 前言
我们日常工作中,经常会遇到下面的一些情况:静态应用中,为减少web访问对发布系统的压力,而使用的多级缓存构架中,位于缓存构架中后端的多台www服务器需保持数据一致,且需要与发布系统保持接近实时的数据一致,确保所有用户访问到的数据是一致的且是最新的;动态应用中,为保证应用的可靠性而使用多台服务器冗余,每台服务器上应用的数据同样需要保持一致。
上述两种构架中,存在明显的弊端,例如同步系统中,我们使用rsync来对数据进行同步,数据是以压缩包的形式在不同主机之间进行传递,那么每次传输前后都需要对数据进行压缩喝解压缩,增加了系统的负载,特别是遇到几百兆的大包时,不仅占用了带宽,而且还使得后续的压缩包被堵住,影响了网站内容的实时性;另外,动态应用的更新是我们日常工作中占用时间多,重复枯燥,毫无技术性可言的一件事,对一些只有两台或三台服务器的应用来说,更新一次花费时间精力不多,也就算了,但是对于一些重要的、访问量大、服务器多的应用,例如bbs,广告等,通常进行一次更新,至少需要半个小时,而且服务器多也较容易出现差错。
基于以上的各种原因,并征求其它同事以及参考网上一些介绍,我在文件同步这方面进行了一点点探索,下面是我所发现的一些可以减轻我们系统压力和我们维护工作量的工具,它们是:unison、inotify、csync2和tsync。
这篇文档会简单介绍各种工具的特点、工作原理、安装使用、配置策略等,而不会聚焦于它们的工作如何具体的实现,详细的文档请参考互连网。同样,我也不会介绍它们的所有用法,而只是介绍能用于我们工作上的用法。
2 unison
2.1 unison简介
Unison是windows和unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致。unison拥有其它一些同步工具或文件系统的相同特性,但也有自己的特点:
l 跨平台使用;
l 对内核和用户权限没有特别要求;
l unison是双向的,它能自动处理两分拷贝中更新没有冲突的部分,有冲突的部分将会显示出来让用户选择更新策略;
l 只要是能连通的两台主机,就可以运行unison,可以直接使用socket连接或安全的ssh连接方式,对带宽的要求不高,使用类似rsync的压缩传输协议。
2.2 安装unison
Unison有文字界面和图形界面,这里只介绍如何在文字界面下使用。
下载:
Windows版本的就一个.exe文件,unison-2.13.16-win-text.exe,下载之后改名为unison.exe放在C:\WINDOWS目录下就可以在命令行执行。
Linux下需要从源码包编译安装,需要一个叫做Objective Caml compiler的工具,版本至少3.0.7,可以从这里下载:
Ocaml安装脚本如下:
# tar -zxf ocaml-3.09.3.tar.gz
# cd ocaml-3.09.3
# ./configure
# make world opt
# make install
Unison对版本要求很高,进行同步的两台主机需要相同版本的unison,所以这里使用和windows一致的版本2.13.16,unison-2.13.16.tar.gz
安装脚本如下:
# tar –zxf unison-2.13.16.tar.gz
# cd unison-2.13.16
# make UISTYLE=text
# make install
之后将生成可执行文件unison,将其cp到系统PATH即可。
# cp ./unison /usr/local/bin
2.3 使用unison
Unison可以在一台主机上使用,同步两个文件夹,也可以在网络上是用。
2.3.1 本地使用(简单介绍)
使用方法:
# unison dir1 dir2
如果检测到两个文件夹有所不同,unison会提示,让你选择相应的操作。例如:
filename [f]
表示右边的文件夹有新的文件,是否同步到左边的文件夹,f表示force,输入?会有更详细的介绍。
new file d/h []
表示出现两个文件夹的不一致,同样,输入?有详细的介绍。
2.3.2 远程使用
l Ssh方式:
使用方法:
# unison dir1 ssh://username@remotehostname(ip)//absolute/path/to/dir2
表示将本机的目录dir1和远端主机的/absolute/path/to/dir2进行同步。一般的,需要两台机能ssh连接。
l Socket方式:
Unison的manual说这是种极不安全的方式,但如果只是进行例如台式机和笔记本之间的数据同步,也可以使用这种比较简单的方式。
使用方法:
在一端主机,需要起一个daemon:
# unison -socket port
另一端主机:
# unison dir1 socket://remotehost(ip):port//absolute/path/to/dir2
Unison的使用中可以使用相对路径,即相对于运行unison命令的当前路径,但我认为使用绝对路径不容易出错,这里也推荐使用绝对路径来表示需要同步的文件夹。
2.3.3 同过配置文件来使用unison
尽管可以完全通过命令行的方式来指定unison运行所需要的参数,但我还是推荐使用配置文件来进行配置使用unison,原因很简单,看配置文件比看命令行容易理解,而且可管理性更强。
默认的配置文件夹位于~currentuser/.unison,即当前用户的home目录下,windows则位于C:\Documents and Settings\currentuser\.unison,默认的配置文件名是default.prf.
运行这样的命令:
# unison config
Unison将读取~currentuser/.unison/config.prf文件里的配置。
下面是一个简单的配置文件例子(用于bbs应用中两个文件夹同步):
root = /var/www/bbsnew
root = ssh://support@192.168.239.172//var/www/bbsnew
force = /var/www/bbsnew
ignore = Path WEB-INF/tmp
ignore = Path WEB-INF/work*
auto = true
log = true
logfile = /home/support/.unison/itbbs_239.172.log
两个root表示需要同步的文件夹。
force表示以本地的/var/www/bbsnew文件夹为标准,将该目录同步到远端。
ignore = Path表示忽略root下面的WEB-INF/tmp目录,即同步时不同步它。
Auto表示自动应用默认的更新规则。应为这里是以本地文件夹为准,不会出现更新冲突现象,可以使用默认更新规则。
log = true表示在终端输出运行信息。
logfile则指定了同时将输出写入log文件。
3 csync2
3.1 csync2简介
阅读(990) | 评论(0) | 转发(0) |