lsyncd基于lua語言開發(fā),整合了rsync和notify?實現(xiàn)文件的實時同步
系統(tǒng)環(huán)境cat?/etc/issue
CentOS?release?6.6?(Final)uname?-sr
Linux?2.6.32-504.el6.x86_64
服務器規(guī)劃
rsync服務器:???????????????????192.168.10.241
rsync?+?lsyncd服務器?:?????????192.168.10.231
一.配置rsync服務器
1.配置xinetd來管理rsync,并編輯配置文件yum?install?xinetd?-yvim?/etc/xinetd.d/rsync
------------------------------------------------------------------------------------------------------------------------------
service?rsync
{disable?=?nosocket_type?????=?streamwait????????????=?nouser????????????=?rootserver??????????=?/usr/bin/rsyncserver_args?????=?--daemonlog_on_failure??+=?USERID
}
------------------------------------------------------------------------------------------------------------------------------rpm?-qa?|?grep?rsync
rsync-3.0.6-6.el5_11
2.為rsync提供配置文件
全局選項?
strict?modes?=yes?是否檢查口令文件的權(quán)限?
port?=?873默認端口873?
log?file?=?/var/log/rsyncd.log
日志記錄文件?
pid?file?=?/var/run/rsyncd.pid運行進程的ID寫到哪里?
[home]
path?=?/opt/這里是認證的模塊名,在client端需要指定?
max?connections?=?0客戶端最大連接數(shù),默認0(沒限制)?
uid?=?root指定該模塊傳輸文件時守護進程應該具有的uid?
gid?=?root指定該模塊傳輸文件時守護進程應該具有的gid?
ignore?errors可以忽略一些無關(guān)的IO錯誤?
read?only?=?nono客戶端可上傳文件,yes只讀?
write?only?=?nono客戶端可下載文件,yes不能下載?
hosts?allow?=?*?充許任何主機連接?
hosts?deny?=?10.5.3.1禁止指定的主機連接?
auth?users?=?root認證的用戶名,如果沒有這行,則表明是匿名?
secrets?file?=?/etc/backserver.pas指定認證口令文件位置?
------------------------------------------------------------------------------------------------------------------------------
3.添加認證文件,并將權(quán)限修改為600#?echo?"root:123456"?>?/etc/backserver.pas#?chmod?600??/etc/backserver.pasll?/etc/backserver.pas
-rw-------?1?root?root?11?Jul?27?15:22?/etc/backserver.pas?4.啟動rsync服務端#?/etc/init.d/xinetd?start
Starting?xinetd:???????????????????????????????????????????[??OK??]
[root@localhost?~]#?netstat?-ntl?|?grep?873
tcp????????0??????0?0.0.0.0:873?????????????????0.0.0.0:*???????????????????LISTEN
二.客戶端配置lsyncd,基于lsyncd實現(xiàn)實時同步(延遲比較小)
1.1安裝lsyncdyum?search?lsyncd?(源服務器安裝)?如果找不到這個包,只能說明你沒有安裝centos的YUM擴展包,必須先安裝擴展包rpm?-ivh?
完成擴展包的安裝之后,就可以安裝lsyncd了yum?install?lsyncd?-y
1.2編譯安裝lsyncdyum?install?lua?lua-devel?-ywget?-c?tar?xf?release-2.1.5cd?lsyncd-2.1.5./configuremake?&&?make?install
2.提啟動腳本vim?/etc/init.d/lsyncd
------------------------------------------------------------------------------------------------------------------------------
#!/bin/bash
#
#?chkconfig:?-?85?15
#?description:?Lightweight?inotify?based?sync?daemon
.?/etc/init.d/functions
.?/etc/sysconfig/network
[?"$NETWORKING"?=?"no"?]?&&?exit?0
LSYNCD_OPTIONS="-pidfile?/var/run/lsyncd.pid?/etc/lsyncd.conf"
RETVAL=0
prog="lsyncd"
thelock=/var/lock/subsys/lsyncd
start()?{[?-f?/etc/lsyncd.conf?]?||?exit?6echo?-n?$"Starting?$prog:?"if?[?$UID?-ne?0?];?thenRETVAL=1failureelsedaemon?/usr/local/bin/lsyncd?$LSYNCD_OPTIONSRETVAL=$?[?$RETVAL?-eq?0?]?&&?touch?$thelockfi;echoreturn?$RETVAL
}
stop()?{echo?-n?$"Stopping?$prog:?"if?[?$UID?-ne?0?];?thenRETVAL=1failureelsekillproc?lsyncdRETVAL=$?[?$RETVAL?-eq?0?]?&&?rm?-f?$thelockfi;echoreturn?$RETVAL
}
reload(){echo?-n?$"Reloading?$prog:?"killproc?lsyncd?-HUPRETVAL=$?echoreturn?$RETVAL
}
restart(){stopstart
}
condrestart(){[?-e?$thelock?]?&&?restartreturn?0
}
case?"$1"?instart)start;;stop)stop;;restart)restart;;reload)reload;;condrestart)condrestart;;status)status?lsyncdRETVAL=$?;;*)echo?$"Usage:?$0?{start|stop|status|restart|condrestart|reload}"RETVAL=1
esac
exit?$RETVAL
------------------------------------------------------------------------------------------------------------------------------
3.編輯rsync客戶端,提供添加密碼文件,并將權(quán)限修改為600echo?"123456"?>?/etc/backserver.paschmod?600?/etc/backserver.pasll?/etc/backserver.pas
-rw-------?1?root?root?7?Jul?27?15:34?/etc/backserver.pas
4.編輯lsyncd配置文件vim?/etc/lsyncd.conf
------------------------------------------------------------------------------------------------------------------------------
settings?{logfile????=?"/tmp/lsyncd.log",statusFile?=?"/tmp/lsyncd.status",statusInterval?=?5,nodaemon?=?true,}本地同步
1.1?本地目錄同步:direct:cp/rm/mv。?適用:500+萬文件,變動不大
sync?{default.direct,source????=?"/opt/src",target????=?"/opt/dest",delay?=?1,maxProcesses?=?1,}
1.2?本地目錄同步rsync模式:rsync
sync{default.rsync,source?=?"/opt/",target?=?"/home/mogilefs/",delete?=?true,exclude={?"test"?},rsync?=?{compress?=?true,verbose?=?true,archive??=?true,}
}
遠程同步
2.1?遠程同步:?rsync模式?+?rsyncd?daemon
sync?{default.rsync,source????=?"/opt/back3/",target????=?"root@192.168.10.231::home",delete?=?true,exclude?=?{?".tmp"?},delay?=?1,rsync?=?{binary?=?"/usr/bin/rsync",archive?=?true,compress?=?true,verbose??=?true,password_file?=?"/etc/backserver.pas",_extra????=?{"--bwlimit=200"},}}2.2?遠程目錄同步:rsync模式?+?ssh?shell
sync{default.rsync,source?=?"/opt/back/",target?=?"root@192.168.10.241:/opt",delete?=?true,--?exclude={?"test"?},rsync?=?{binary?=?"/usr/bin/rsync",compress?=?true,verbose?=?true,archive?=?true,rsh?=?"/usr/bin/ssh?-p?22?-o?StrictHostKeyChecking=no"}
}3?遠程目錄同步:rsync模式?+?rsyncssh,效果與上面相同
sync?{default.rsyncssh,source????=?"/opt/back2/",host??????=?"192.168.10.241",targetdir?=?"/opt/",
--??excludeFrom?=?"/etc/rsyncd.d/rsync_exclude.lst",maxDelays?=?1,delay?=?1,rsync?=?{binary?=?"/usr/bin/rsync",archive?=?true,compress?=?true,verbose???=?true,_extra?=?{"--bwlimit=2000"},},ssh??=?{port??=??22}}
------------------------------------------------------------------------------------------------------------------------------
5.免密鑰登陸(基于ssh同步需要在遠端被同步的服務器上開啟ssh無密碼登錄)ssh-copy-id?-i??~/.ssh/id_rsa.pub?root@192.168.10.2416.啟動rlsyncd服務/etc/init.d/lsyncd?start
7.lsyncd的日志文件以及狀態(tài)文件tailf?/tmp/lsyncd.log?
Tue?Jul?28?12:12:15?2015?Normal:?recursive?startup?rsync:?/opt/back3/?->?root@192.168.10.241::home/
Tue?Jul?28?12:12:19?2015?Normal:?Startup?of?"/opt/back3/"?finished.
Tue?Jul?28?12:13:07?2015?Normal:?recursive?startup?rsync:?/opt/back3/?->?root@192.168.10.241::home/
Tue?Jul?28?12:13:12?2015?Error:?Temporary?or?permanent?failure?on?startup?of?"/opt/back3/".?Terminating?since?"insist"?is?not?set.
Tue?Jul?28?12:13:14?2015?Normal:?recursive?startup?rsync:?/opt/back3/?->?root@192.168.10.241::home/
Tue?Jul?28?12:13:18?2015?Error:?Temporary?or?permanent?failure?on?startup?of?"/opt/back3/".?Terminating?since?"insist"?is?not?set.
Tue?Jul?28?12:13:35?2015?Normal:?recursive?startup?rsync:?/opt/back3/?->?root@192.168.10.241::home/
Tue?Jul?28?12:13:38?2015?Normal:?Startup?of?"/opt/back3/"?finished.
Tue?Jul?28?12:15:50?2015?Normal:?recursive?startup?rsync:?/opt/back3/?->?root@192.168.10.241::home/
Tue?Jul?28?12:15:53?2015?Normal:?Startup?of?"/opt/back3/"?finished.
tailf?/tmp/lsyncd.status
Sync1?source=/opt/back3/
There?are?1?delays
active?Init?
Excluding:nothing.
Inotify?watching?1?directories1:?/opt/back3/
lsyncd.conf 主要配置選項說明:
settings配置段:
??? 全局設(shè)置,--開頭表示注釋,下面是幾個常用選項說明:
??? logfile 定義日志文件
??? stausFile 定義狀態(tài)文件
??? nodaemon=true 表示不啟用守護模式,默認
??? statusInterval 將lsyncd的狀態(tài)寫入上面的statusFile的間隔,默認10秒
??? inotifyMode 指定inotify監(jiān)控的事件,默認是CloseWrite,還可以是Modify或CloseWrite or Modify
??? maxProcesses 同步進程的最大個數(shù)。假如同時有20個文件需要同步,而maxProcesses = 8,則最大能看到有8個rysnc進程
??? maxDelays 累計到多少所監(jiān)控的事件激活一次同步,即使后面的delay延遲時間還未到
?? ?
sync配置段:
?? ?定義同步參數(shù),可以繼續(xù)使用maxDelays來重寫settings的全局變量。
?? ?一般第一個參數(shù)指定lsyncd以什么模式運行:rsync、rsyncssh、direct三種模式:
??? default.rsync :本地目錄間同步,使用rsync,也可以達到使用ssh形式的遠程rsync效果,或daemon方式連接遠程rsyncd進程;
??? default.direct :本地目錄間同步,使用cp、rm等命令完成差異文件備份;
??? default.rsyncssh :同步到遠程主機目錄,rsync的ssh模式,需要使用key來認證
??? source 同步的源目錄,使用絕對路徑。
??? target 定義目的地址.
??? 三種模式的示例會在后面給出。
??? init 這是一個優(yōu)化選項,當init = false,只同步進程啟動以后發(fā)生改動事件的文件,原有的目錄即使有差異也不會同步。默認是true
???? delay 累計事件,等待rsync同步延時時間,默認15秒(最大累計到1000個不可合并的事件)。也就是15s內(nèi)監(jiān)控目錄下發(fā)生的改動,會累積到一次rsync同步,避免過于頻繁的同步。(可合并的意思是,15s內(nèi)兩次修改了同一文件,最后只同步最新的文件)
??? excludeFrom 排除選項,后面指定排除的列表文件,如果是簡單的排除,可以使用exclude = {"FILENAME"}。
??? 這里的排除規(guī)則寫法與原生rsync有點不同,更為簡單:
?? ?監(jiān)控路徑里的任何部分匹配到一個文本,都會被排除,例如/var/web/test可以匹配規(guī)則web
?? ?如果規(guī)則以斜線/開頭,則從頭開始要匹配全部
?? ?如果規(guī)則以/結(jié)尾,則要匹配監(jiān)控路徑的末尾
?? ??匹配任何字符,但不包括/
?? ?*匹配0或多個字符,但不包括/
?? ?**匹配0或多個字符,可以是/
??? delete 為了保持target與souce完全同步,Lsyncd默認會delete = true來允許同步刪除。它除了false,還有startup、running值.
?? ?rsync:(提示一下,delete和exclude本來都是rsync的選項,上面是配置在sync中的,我想這樣做的原因是為了減少rsync的開銷)
??? bwlimit 限速,單位kb/s,與rsync相同(這么重要的選項在文檔里竟然沒有標出)
??? compress 壓縮傳輸默認為true。在帶寬與cpu負載之間權(quán)衡,本地目錄同步可以考慮把它設(shè)為false
??? perms 默認保留文件權(quán)限。
其它rsync的選項
其它還有rsyncssh模式獨有的配置項,如host、targetdir、rsync_path、password_file。
lsyncd.conf可以有多個sync,各自的source,各自的target,各自的模式,互不影響。
使用命令加載配置文件,啟動守護進程,自動同步目錄操作。
lsyncd -log Exec /usr/local/lsyncd-2.1.5/etc/lsyncd.conf
注意:
1.lsyncd?Version:?2.1.4版本以前?存在bug,不支持rsync的?password_file參數(shù),?lsyncd?Version:?2.1.5已經(jīng)修復,并且允許rsync客戶端具有寫權(quán)限。
2.rsyncOps={"-avz","--delete"}這樣的寫法在2.1.*版本已經(jīng)不支持。
轉(zhuǎn)載于:https://blog.51cto.com/openlinuxfly/1679279
總結(jié)
以上是生活随笔為你收集整理的rsync+lsyncd实现(本地以及远程)文件实时同步的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。