<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[lsyncd实时同步搭建指南——取代rsync+inotify]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Tue, 15 Aug 2017 06:12:30 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：做同步有Rsyncd，有配置版本的sersync，使用过，这儿介绍了一个新的东西：lsyncd，值得尝试。<br/>参考：http://www.datura.me/2017/09/22/lsyncd%E5%AE%9E%E7%8E%B0%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E5%90%8C%E6%AD%A5%E7%AE%80%E8%A6%81%E8%AF%B4%E6%98%8E/<br/>Sync里面是定义同步参数，指定默认以直接模式direct运行。Lsyncd支持rsync、rsyncssh、direct三种模式。<br/>default.rsync,<br/>sync&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;default.rsync, --default.rsyncssh,or default.direct,<br/>&nbsp;&nbsp;&nbsp;&nbsp;source =&quot;/usr/local/src/aa&quot;,<br/><textarea name="code" class="php" rows="15" cols="100">
rpm -qpl lsyncd-2.1.5-0.el6.x86_64.rpm
/etc/logrotate.d/lsyncd
/etc/lsyncd.conf
/etc/rc.d/init.d/lsyncd
/etc/sysconfig/lsyncd
/usr/bin/lsyncd
/var/log/lsyncd
/var/run/lsyncd
</textarea><br/>实践如下：<br/>mkdir -p /usr/local/lsyncd-2.1.5/etc/<br/>mkdir -p /usr/local/lsyncd-2.1.5/var/<br/>touch /usr/local/lsyncd-2.1.5/var/lsyncd.log&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>chmod -R 777 /usr/local/lsyncd-2.1.5/var/lsyncd.log<br/>chmod -R 777 /usr/local/lsyncd-2.1.5/var<br/>tail -f /usr/local/lsyncd-2.1.5/var/lsyncd.log<br/>Thu Oct 26 16:36:04 2017 Normal: recursive startup rsync: /backup/yum.qr.cntv.net/ -&gt; /data/www/<br/>Thu Oct 26 16:36:04 2017 Exec: /usr/local/rsync/bin/rsync [--delete] [--ignore-errors] [-gpzsoltD] [--bwlimit=2000] [-r] [/backup/yum.qr.cntv.net/] [/data/www/]<br/><br/><br/>2.1 安装lsyncd<br/>安装lsyncd极为简单，已经收录在ubuntu的官方镜像源里，直接通过apt-get install lsyncd就可以。<br/>在Redhat系（我的环境是CentOS 6.2 x86_64 ），可以手动去下载 lsyncd-2.1.5-6.fc21.x86_64.rpm，但首先你得安装两个依赖yum install lua lua-devel。也可以通过在线安装，需要epel-release扩展包：<br/><br/># rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm<br/># yum install lsyncd<br/>源码编译安装<br/>从源码编译安装可以使用最新版的lsyncd程序，但必须要相应的依赖库文件和编译工具：yum install lua lua-devel asciidoc cmake。<br/><br/>从 googlecode lsyncd 上下载的lsyncd-2.1.5.tar.gz，直接./configure、make &amp;&amp; make install就可以了。<br/><br/>从github上下载lsyncd-master.zip 的2.1.5版本使用的是 cmake 编译工具，无法./configure：<br/><br/># uzip lsyncd-master.zip<br/># cd lsyncd-master<br/># cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lsyncd-2.1.5<br/># make &amp;&amp; make install<br/>我这个版本编译时有个小bug，如果按照INSTALL在build目录中make，会提示：<br/><br/>[100%] Generating doc/lsyncd.1<br/>Updating the manpage<br/>a2x: failed: source file not found: doc/lsyncd.1.txt<br/>make[2]: *** [doc/lsyncd.1] Error 1<br/>make[1]: *** [CMakeFiles/manpage.dir/all] Error 2<br/>make: *** [all] Error 2<br/>解决办法是要么直接在解压目录下cmake，不要mkdir build，要么在CMakeList.txt中搜索doc字符串，在前面加上$&#123;PROJECT_SOURCE_DIR&#125;。<br/><br/>2.2 lsyncd.conf<br/>下面都是在编译安装的情况下操作。<br/><br/>2.2.1 lsyncd同步配置<br/># cd /usr/local/lsyncd-2.1.5<br/># mkdir etc var<br/># vi etc/lsyncd.conf<br/>settings &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;logfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&quot;/usr/local/lsyncd-2.1.5/var/lsyncd.log&quot;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;statusFile&nbsp;&nbsp; =&quot;/usr/local/lsyncd-2.1.5/var/lsyncd.status&quot;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;inotifyMode&nbsp;&nbsp;= &quot;CloseWrite&quot;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;maxProcesses = 7,<br/>&nbsp;&nbsp;&nbsp;&nbsp;-- nodaemon =true,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>sync &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;default.rsync,<br/>&nbsp;&nbsp;&nbsp;&nbsp;source&nbsp;&nbsp;&nbsp;&nbsp;= &quot;/tmp/src&quot;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;target&nbsp;&nbsp;&nbsp;&nbsp;= &quot;/tmp/dest&quot;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;-- excludeFrom = &quot;/etc/rsyncd.d/rsync_exclude.lst&quot;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;rsync&nbsp;&nbsp;&nbsp;&nbsp; = &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;binary&nbsp;&nbsp;&nbsp;&nbsp;= &quot;/usr/bin/rsync&quot;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;archive&nbsp;&nbsp; = true,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;compress&nbsp;&nbsp;= true,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;verbose&nbsp;&nbsp; = true<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>到这启动 lsycnd 就可以完成实时同步了，默认的许多参数可以满足绝大部分需求，非常简单。<br/><br/>2.2.2 lsyncd.conf配置选项说明<br/>settings<br/>里面是全局设置，--开头表示注释，下面是几个常用选项说明：<br/><br/>logfile 定义日志文件<br/>stausFile 定义状态文件<br/>nodaemon=true 表示不启用守护模式，默认<br/>statusInterval 将lsyncd的状态写入上面的statusFile的间隔，默认10秒<br/>inotifyMode 指定inotify监控的事件，默认是CloseWrite，还可以是Modify或CloseWrite or Modify<br/>maxProcesses 同步进程的最大个数。假如同时有20个文件需要同步，而maxProcesses = 8，则最大能看到有8个rysnc进程<br/>maxDelays 累计到多少所监控的事件激活一次同步，即使后面的delay延迟时间还未到<br/>sync<br/>里面是定义同步参数，可以继续使用maxDelays来重写settings的全局变量。一般第一个参数指定lsyncd以什么模式运行：rsync、rsyncssh、direct三种模式：<br/><br/>default.rsync ：本地目录间同步，使用rsync，也可以达到使用ssh形式的远程rsync效果，或daemon方式连接远程rsyncd进程；<br/>default.direct ：本地目录间同步，使用cp、rm等命令完成差异文件备份；<br/>default.rsyncssh ：同步到远程主机目录，rsync的ssh模式，需要使用key来认证<br/>source 同步的源目录，使用绝对路径。<br/>target 定义目的地址.对应不同的模式有几种写法：<br/>/tmp/dest ：本地目录同步，可用于direct和rsync模式<br/>172.29.88.223:/tmp/dest ：同步到远程服务器目录，可用于rsync和rsyncssh模式，拼接的命令类似于/usr/bin/rsync -ltsd --delete --include-from=- --exclude=* SOURCE TARGET，剩下的就是rsync的内容了，比如指定username，免密码同步<br/>172.29.88.223::module ：同步到远程服务器目录，用于rsync模式<br/>三种模式的示例会在后面给出。<br/>init 这是一个优化选项，当init = false，只同步进程启动以后发生改动事件的文件，原有的目录即使有差异也不会同步。默认是true<br/>delay 累计事件，等待rsync同步延时时间，默认15秒（最大累计到1000个不可合并的事件）。也就是15s内监控目录下发生的改动，会累积到一次rsync同步，避免过于频繁的同步。（可合并的意思是，15s内两次修改了同一文件，最后只同步最新的文件）<br/>excludeFrom 排除选项，后面指定排除的列表文件，如excludeFrom = &quot;/etc/lsyncd.exclude&quot;，如果是简单的排除，可以使用exclude = LIST。<br/>这里的排除规则写法与原生rsync有点不同，更为简单：<br/>监控路径里的任何部分匹配到一个文本，都会被排除，例如/bin/foo/bar可以匹配规则foo<br/>如果规则以斜线/开头，则从头开始要匹配全部<br/>如果规则以/结尾，则要匹配监控路径的末尾<br/>?匹配任何字符，但不包括/<br/>*匹配0或多个字符，但不包括/<br/>**匹配0或多个字符，可以是/<br/>delete 为了保持target与souce完全同步，Lsyncd默认会delete = true来允许同步删除。它除了false，还有startup、running值，请参考 Lsyncd 2.1.x ‖ Layer 4 Config ‖ Default Behavior。<br/>rsync<br/>（提示一下，delete和exclude本来都是rsync的选项，上面是配置在sync中的，我想这样做的原因是为了减少rsync的开销）<br/><br/>bwlimit 限速，单位kb/s，与rsync相同（这么重要的选项在文档里竟然没有标出）<br/>compress 压缩传输默认为true。在带宽与cpu负载之间权衡，本地目录同步可以考虑把它设为false<br/>perms 默认保留文件权限。<br/>其它rsync的选项<br/>其它还有rsyncssh模式独有的配置项，如host、targetdir、rsync_path、password_file，见后文示例。rsyncOps=&#123;&quot;-avz&quot;,&quot;--delete&quot;&#125;这样的写法在2.1.*版本已经不支持。<br/><br/>lsyncd.conf可以有多个sync，各自的source，各自的target，各自的模式，互不影响。<br/><br/>2.3 启动lsyncd<br/>使用命令加载配置文件，启动守护进程，自动同步目录操作。<br/><br/>lsyncd -log Exec /usr/local/lsyncd-2.1.5/etc/lsyncd.conf<br/><br/>摘自：https://segmentfault.com/a/1190000002737213
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] lsyncd实时同步搭建指南——取代rsync+inotify]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>