Lsyncd是由谷歌公司开发的一款轻量级目录同步工具。采用(inotify或fsevents)监控目录树的变化。rsync+ssh是一个先进的功能配置,这种配置利用SSH来执行文件和目录直接移动到目标上,而不是通过网络再次传送这个到目标。lua语言格定义配置文件。2007年开发出第一个版本lsyncd 1.0。目前最新版本是lsyncd 2.1.5
下载地址:https://lsyncd.googlecode.com/files/lsyncd-2.1.5.tar.gz
手册文档:https://github.com/axkibe/lsyncd/wiki/Manual-to-Lsyncd-2.1.x
安装lsyncd工具时需要先安装lua工具,因为配置文件需要采用lua语法。
yum -y Install lua* lua-devel tar zxvf lsyncd-2.1.5.tar.gz&&cd lsyncd-2.1.5 ./configure �Cprefix=/usr/local/lsyncd-2.1.5 make&&make install ln -s /usr/local/lsyncd-2.1.5/bin/lsyncd /usr/bin/lsyncd
默认没有配置文件,需要自己手动编写,使用lua的语法格式编写。 在安装目录下创建etc目录用于存放主配置文件,创建var目录用于存放日志文件和状态文件。
mkdir /usr/local/lsyncd-2.1.5/etc&& mkdir /usr/local/lsyncd-2.1.5/var cd /usr/local/lsyncd-2.1.5/etc
创建主配置文件lsyncd.conf.lua,内容如下:
direct模式配置:
settings{ logfile ="/usr/local/lsyncd-2.1.5/var/lsyncd.log", statusFile ="/usr/local/lsyncd-2.1.5/var/lsyncd.status", --nodaemon =true, } sync{ default.direct,--default.rsync, or default.rsyncssh, source ="/usr/local/src/aa", target ="/usr/local/src/bb" }
Settings里面是全局设置,logfile定义日志文件,stausFile定义状态文件,--nodaemon=true前面双横线表示注释(‘--’),nodaemon=true表示不启用守护模式。默认是启用。如不启动守护模式,可以将注释取消。
Sync里面是定义同步参数,指定默认以直接模式direct运行。Lsyncd支持rsync、rsyncssh、direct三种模式。Source定义同步源,target定义目的。Direct模式用于同步本地的目录。
使用命令加载配置文件,启动守护进程,自动同步目录操作。
lsyncd /usr/local/lsyncd-2.1.5/etc/lsyncd.conf.lua
同步远程服务器目录:
远程目录有两种模式,rsync模式和rsyncssh模式。
Rsync模式配置:
settings{ logfile ="/usr/local/lsyncd-2.1.5/var/lsyncd.log", statusFile ="/usr/local/lsyncd-2.1.5/var/lsyncd.status", --nodaemon =true, } sync{ default.rsync, --default.rsyncssh,or default.direct, source ="/usr/local/src/aa", target ="192.168.65.139:/usr/local/src/bb/", rsync ={ binary ="/usr/bin/rsync", archive =true, compress =true, }, }
使用rsync模式可以继承使用rsync的参数。Binary定义rsync命令路径,这里简单使用了归档和压缩参数,可以根据需要指定其它更多的rsync参数。它的格式看起来像这样: /usr/bin/rsync -ltsd --delete --include-from=- --exclude=* SOURCE TARGET
Rsyncssh模式配置:
settings{ logfile ="/usr/local/lsyncd-2.1.5/var/lsyncd.log", statusFile ="/usr/local/lsyncd-2.1.5/var/lsyncd.status", statusInterval =20, --nodaemon =true, delay = 0, } sync{ default.rsyncssh,--default.rsync,or default.direct, source ="/usr/local/src/aa", host ="10.110.222.167", --excludeFrom ="/usr/local/src/aa/test", exclude ="test", targetdir ="/usr/local/src/test", rsync ={ --binary ="/usr/bin/rsync"(default), archive =true, compress =true, }, ssh ={ --binary ="/usr/bin/ssh"(default), port =9918, } }
此配置不同于标准的rsync,它使用ssh命令来移动本地文件或目录的目标。此配置产生的Rsync的过程像default.rsync,另外生成/usr/bin/ssh HOST mv ORIGIN DESTINATION命令。 有两个参数需要解释下,delay表示延迟多少秒开始同步。excludeFrom表示排除文件,exclude表示排除目录,注意这里的排除指的是源。
添加服务器登录key:
因为要使用ssh连接输入密码是需要交互操作,所以设置为key直接登录不需要密码的方式。那么客户端只需要加入服务器端(同步源)上的公钥即可。在服务器端生成ssh密钥对的方法此处省略。
ssh+http代理连接:
linux下的ssh client并不直接支持http代理(http-tunnel代理),需要其他代理软件的辅助。corkscrew就是一个很好的工具。
下载安装corkscrew:
wget http://www.agroman.net/corkscrew/corkscrew-2.0.tar.gz tar zxvf corkscrew-2.0.tar.gz ./configure --prefix=/usr/local/corkscrew make make install
简单配置修改~/.ssh/config:
#cat ~/.ssh/config ProxyCommand /usr/local/corkscrew/bin/corkscrew proxy.test.com 18001 %h %p ~/.ssh/auth echo “test:%2013#Ops” > ~/.ssh/auth chmod 600 ~/.ssh/auth
其中/usr/local/corkscrew/bin/corkscrew是程序所在位置;proxy.test.com是代理的地址;18001是端口号。如果是要求身份认证的代理,则把用户名/密码写在一个文件中,这里是:test:%2013#Ops,把这个文件放在~/.ssh/auth,设置权限为600。
现在直接使用ssh命令就自动添加了proxy代理功能。要取消代理连接方式,移除~/.ssh/config文件即可。
同步文件大小:4G
服务器传输:北京―江苏常州
采用rsyncssh模式推送,压力点在服务器端
总体来说,测试效果还是很不错的。也有不足的地方,比如无法双向同步,比如对实时更新的文件同步效果不是很理想。当然根据自己的需求取舍。DONE!
文章出处:http://www.weekyuan.com