生活随笔
收集整理的這篇文章主要介紹了
                                
rsync+lsyncd实现(本地以及远程)文件实时同步
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
 
                                
                            
                            
                            lsyncd基于lua語(yǔ)言開(kāi)發(fā),整合了rsync和notify?實(shí)現(xiàn)文件的實(shí)時(shí)同步
系統(tǒng)環(huán)境cat?/etc/issue
CentOS?release?6.6?(Final)uname?-sr
Linux?2.6.32-504.el6.x86_64
服務(wù)器規(guī)劃
rsync服務(wù)器:???????????????????192.168.10.241
rsync?+?lsyncd服務(wù)器?:?????????192.168.10.231
一.配置rsync服務(wù)器
1.配置xinetd來(lái)管理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提供配置文件
全局選項(xiàng)?
strict?modes?=yes?是否檢查口令文件的權(quán)限?
port?=?873默認(rèn)端口873?
log?file?=?/var/log/rsyncd.log
日志記錄文件?
pid?file?=?/var/run/rsyncd.pid運(yùn)行進(jìn)程的ID寫(xiě)到哪里?
[home]
path?=?/opt/這里是認(rèn)證的模塊名,在client端需要指定?
max?connections?=?0客戶端最大連接數(shù),默認(rèn)0(沒(méi)限制)?
uid?=?root指定該模塊傳輸文件時(shí)守護(hù)進(jìn)程應(yīng)該具有的uid?
gid?=?root指定該模塊傳輸文件時(shí)守護(hù)進(jìn)程應(yīng)該具有的gid?
ignore?errors可以忽略一些無(wú)關(guān)的IO錯(cuò)誤?
read?only?=?nono客戶端可上傳文件,yes只讀?
write?only?=?nono客戶端可下載文件,yes不能下載?
hosts?allow?=?*?充許任何主機(jī)連接?
hosts?deny?=?10.5.3.1禁止指定的主機(jī)連接?
auth?users?=?root認(rèn)證的用戶名,如果沒(méi)有這行,則表明是匿名?
secrets?file?=?/etc/backserver.pas指定認(rèn)證口令文件位置?
------------------------------------------------------------------------------------------------------------------------------
3.添加認(rèn)證文件,并將權(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.啟動(dòng)rsync服務(wù)端#?/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實(shí)現(xiàn)實(shí)時(shí)同步(延遲比較小)
1.1安裝lsyncdyum?search?lsyncd?(源服務(wù)器安裝)?如果找不到這個(gè)包,只能說(shuō)明你沒(méi)有安裝centos的YUM擴(kuò)展包,必須先安裝擴(kuò)展包rpm?-ivh?
完成擴(kuò)展包的安裝之后,就可以安裝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.提啟動(dòng)腳本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+萬(wàn)文件,變動(dòng)不大
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,}
}
遠(yuǎn)程同步
2.1?遠(yuǎn)程同步:?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?遠(yuǎn)程目錄同步: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?遠(yuǎn)程目錄同步: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同步需要在遠(yuǎn)端被同步的服務(wù)器上開(kāi)啟ssh無(wú)密碼登錄)ssh-copy-id?-i??~/.ssh/id_rsa.pub?root@192.168.10.2416.啟動(dòng)rlsyncd服務(wù)/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 主要配置選項(xiàng)說(shuō)明:
settings配置段:
??? 全局設(shè)置,--開(kāi)頭表示注釋,下面是幾個(gè)常用選項(xiàng)說(shuō)明:
??? logfile 定義日志文件
??? stausFile 定義狀態(tài)文件
??? nodaemon=true 表示不啟用守護(hù)模式,默認(rèn)
??? statusInterval 將lsyncd的狀態(tài)寫(xiě)入上面的statusFile的間隔,默認(rèn)10秒
??? inotifyMode 指定inotify監(jiān)控的事件,默認(rèn)是CloseWrite,還可以是Modify或CloseWrite or Modify
??? maxProcesses 同步進(jìn)程的最大個(gè)數(shù)。假如同時(shí)有20個(gè)文件需要同步,而maxProcesses = 8,則最大能看到有8個(gè)rysnc進(jìn)程
??? maxDelays 累計(jì)到多少所監(jiān)控的事件激活一次同步,即使后面的delay延遲時(shí)間還未到
?? ?
sync配置段:
?? ?定義同步參數(shù),可以繼續(xù)使用maxDelays來(lái)重寫(xiě)settings的全局變量。
?? ?一般第一個(gè)參數(shù)指定lsyncd以什么模式運(yùn)行:rsync、rsyncssh、direct三種模式:
??? default.rsync :本地目錄間同步,使用rsync,也可以達(dá)到使用ssh形式的遠(yuǎn)程rsync效果,或daemon方式連接遠(yuǎn)程rsyncd進(jìn)程;
??? default.direct :本地目錄間同步,使用cp、rm等命令完成差異文件備份;
??? default.rsyncssh :同步到遠(yuǎn)程主機(jī)目錄,rsync的ssh模式,需要使用key來(lái)認(rèn)證
??? source 同步的源目錄,使用絕對(duì)路徑。
??? target 定義目的地址.
??? 三種模式的示例會(huì)在后面給出。
??? init 這是一個(gè)優(yōu)化選項(xiàng),當(dāng)init = false,只同步進(jìn)程啟動(dòng)以后發(fā)生改動(dòng)事件的文件,原有的目錄即使有差異也不會(huì)同步。默認(rèn)是true
???? delay 累計(jì)事件,等待rsync同步延時(shí)時(shí)間,默認(rèn)15秒(最大累計(jì)到1000個(gè)不可合并的事件)。也就是15s內(nèi)監(jiān)控目錄下發(fā)生的改動(dòng),會(huì)累積到一次rsync同步,避免過(guò)于頻繁的同步。(可合并的意思是,15s內(nèi)兩次修改了同一文件,最后只同步最新的文件)
??? excludeFrom 排除選項(xiàng),后面指定排除的列表文件,如果是簡(jiǎn)單的排除,可以使用exclude = {"FILENAME"}。
??? 這里的排除規(guī)則寫(xiě)法與原生rsync有點(diǎn)不同,更為簡(jiǎn)單:
?? ?監(jiān)控路徑里的任何部分匹配到一個(gè)文本,都會(huì)被排除,例如/var/web/test可以匹配規(guī)則web
?? ?如果規(guī)則以斜線/開(kāi)頭,則從頭開(kāi)始要匹配全部
?? ?如果規(guī)則以/結(jié)尾,則要匹配監(jiān)控路徑的末尾
?? ??匹配任何字符,但不包括/
?? ?*匹配0或多個(gè)字符,但不包括/
?? ?**匹配0或多個(gè)字符,可以是/
??? delete 為了保持target與souce完全同步,Lsyncd默認(rèn)會(huì)delete = true來(lái)允許同步刪除。它除了false,還有startup、running值.
?? ?rsync:(提示一下,delete和exclude本來(lái)都是rsync的選項(xiàng),上面是配置在sync中的,我想這樣做的原因是為了減少rsync的開(kāi)銷)
??? bwlimit 限速,單位kb/s,與rsync相同(這么重要的選項(xiàng)在文檔里竟然沒(méi)有標(biāo)出)
??? compress 壓縮傳輸默認(rèn)為true。在帶寬與cpu負(fù)載之間權(quán)衡,本地目錄同步可以考慮把它設(shè)為false
??? perms 默認(rèn)保留文件權(quán)限。
其它rsync的選項(xiàng)
其它還有rsyncssh模式獨(dú)有的配置項(xiàng),如host、targetdir、rsync_path、password_file。
lsyncd.conf可以有多個(gè)sync,各自的source,各自的target,各自的模式,互不影響。
使用命令加載配置文件,啟動(dòng)守護(hù)進(jìn)程,自動(dòng)同步目錄操作。
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)修復(fù),并且允許rsync客戶端具有寫(xiě)權(quán)限。
2.rsyncOps={"-avz","--delete"}這樣的寫(xiě)法在2.1.*版本已經(jīng)不支持。 
 
轉(zhuǎn)載于:https://blog.51cto.com/openlinuxfly/1679279
                            總結(jié)
                            
                                以上是生活随笔為你收集整理的rsync+lsyncd实现(本地以及远程)文件实时同步的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
                            
                            
                                如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。