真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

CentOS7部署lsyncd+rsync實(shí)現(xiàn)服務(wù)器文件實(shí)時(shí)同步

Lsyncd是什么?

Github:axkibe/lsyncd
官方文檔:Lsyncd – Live Syncing (Mirror) Daemon

創(chuàng)新互聯(lián)是專業(yè)的遠(yuǎn)安網(wǎng)站建設(shè)公司,遠(yuǎn)安接單;提供網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行遠(yuǎn)安網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

  • Lysncd即Live Syncing Daemon,它是開源的數(shù)據(jù)實(shí)時(shí)同步工具(后臺(tái)進(jìn)程),基于inotify和rsync。
  • Lsyncd是一個(gè)輔助文件同步工具。它通過監(jiān)聽系統(tǒng)的文件變化事件,調(diào)用rsync進(jìn)行同步。注意“輔助”二字,輔助的意思是:同步文件本身并不是由lsyncd來實(shí)現(xiàn),它只負(fù)責(zé)監(jiān)測哪些文件改變了,進(jìn)而調(diào)用rsync來完成同步,真正同步文件的是rsync,如果你不知道什么是rsync,請查看使用sersync +rsync進(jìn)行實(shí)時(shí)文件同步中的rsync部分。

Lsyncd的三種同步模式

  • default.rsync
  • default.rsyncssh
  • default.direct

為了方便,我們直接把它們稱為rsync、rsyncssh、direct。

1. rsync同步模式

首先,你需要知道rsync的基本用法,以下的rsync命令就可以把文件從本地的“/data/wwwroot”目錄推送到遠(yuǎn)程的“remote@192.168.1.6::wwwroot/”目錄中,運(yùn)行在“rsync同步模式”的lsyncd正是通過組裝類似這樣的命令來同步文件的:

rsync -avz --partial --delete /data/wwwroot remote@192.168.1.6::wwwroot/ --password-file=/etc/rsyncd.password

有人可能會(huì)疑惑,既然rsync本身就可以同步,那要lsyncd干嘛?有兩個(gè)原因:

  • 實(shí)時(shí)同步。
  • 減少rsync掃描文件帶來的延時(shí)和性能損耗。
  • rsync無法知道“什么時(shí)候同步”,因?yàn)閞sync只有執(zhí)行同步命令的時(shí)候,才會(huì)去掃描文件判斷哪些文件被修改了,只能建立一個(gè)定時(shí)任務(wù),每隔一定的時(shí)間(比如5分鐘,10分鐘等等)去執(zhí)行一次同步,這樣雖然能同步,但卻“不實(shí)時(shí)”。
  • lsyncd就可以監(jiān)聽文件的修改,換句話說,某個(gè)文件修改了,lsyncd會(huì)得到通知(原理是使用linux系統(tǒng)的inotify/fsevents功能),得到通知之后,再去調(diào)用rsync把修改的文件進(jìn)行同步(即組裝一句rsync同步語句并執(zhí)行),達(dá)到“實(shí)時(shí)同步”的效果。
  • lsyncd調(diào)用rsync同步命令的時(shí)候,會(huì)用rsync的--include-from=FILE之類的選項(xiàng)來指定要同步哪些文件,這樣可以達(dá)到“減少rsync掃描文件帶來的延時(shí)和性能損耗”。
  • 為什么這么說呢?因?yàn)槿绻宺sync自己去查詢哪些文件改變了,需要消耗較多的時(shí)間和服務(wù)器資源,試想一下,在100萬個(gè)文件中,有一個(gè)文件添加了一個(gè)英文的句號(hào).,如果沒有l(wèi)syncd告訴rsync改變的是這個(gè)文件,那rsync就要去掃描100萬個(gè)文件來找出這個(gè)僅僅多了一個(gè).的文件,雖然rsync的查找效率很高,但這個(gè)查找是非常沒有必要的,這就是為什么lsyncd能“減少rsync掃描文件帶來的延時(shí)和性能損耗”。

2. rsyncssh同步模式
明白了rsync同步模式,就不難明白rsyncssh模式,因?yàn)閞sync本身就是有ssh模式的,lsyncd同樣是負(fù)責(zé)監(jiān)聽哪些文件變化了,然后組裝rsync同步命令進(jìn)行同步。
rsync的ssh模式,主要的好處是用于文件移動(dòng)的時(shí)候。

  1. 假設(shè)我現(xiàn)在有兩臺(tái)機(jī)A和B,A中的test目錄文件變化會(huì)自動(dòng)同步到B中的test目錄,現(xiàn)在A、B的test目錄文件如下:
    ├── dir1
    │   ├── aa.txt
    │   ├── bb.txt
    │   └── cc.txt
    └── dir2
    └── dd.txt
  2. 假設(shè)現(xiàn)在把A機(jī)的bb.txt和cc.txt從dir1移動(dòng)到dir2,即變成如下所示的狀態(tài):
    ├── dir1
    │   └── aa.txt
    └── dir2
    ├── bb.txt
    ├── cc.txt
    └── dd.txt
  • 假設(shè)使用普通的rsync模式,那么rsync會(huì)先刪除B機(jī)中的dir1中的bb.txt和cc.txt,并把A機(jī)中的bb.txt和cc.txt文件上傳到B機(jī)中的dir2目錄,達(dá)到同步的效果。
  • 但如果你rsync運(yùn)行在ssh模式,那么它會(huì)直接在B機(jī)中把dir1中的bb.txt和cc.txt用mv命令直接移動(dòng)到dir2目錄,A機(jī)沒有向B機(jī)傳任何數(shù)據(jù),效率顯而易見(特別是移動(dòng)的數(shù)據(jù)特別多的時(shí)候更明顯)。
  • 這樣看,rsyncssh模式應(yīng)該是最好的,但它卻有一個(gè)缺點(diǎn),就是同步進(jìn)程只能是單進(jìn)程(maxProcesses=1),而rsync模式是可以多進(jìn)程同步的(速度快)。

3. direct同步模式
這個(gè)模式用于本地的兩個(gè)目錄之間同步,不用于遠(yuǎn)程服務(wù)器同步。lsyncd同樣是監(jiān)聽文件變化事件,然后把變化的文件從源目錄同步到目標(biāo)目錄,同步的命令,就是linux系統(tǒng)本身的命令,比如cp、rm、mv,增加了文件用cp拷過去,刪除了文件,那邊也用rm刪除,移動(dòng)了文件,那邊也用mv移動(dòng)。

簡述如何同步

假設(shè)有A和B兩臺(tái)機(jī),A同步到B,則:

  • A:安裝lsyncd+rsync,并運(yùn)行l(wèi)syncd服務(wù);
  • B:只需要安裝rsync,并運(yùn)行rsyncd服務(wù);

A中的lsyncd監(jiān)聽到文件變化后,調(diào)用A中的rsync向B推送文件,B因?yàn)檫\(yùn)行有一個(gè)rsyncd服務(wù),所以可以接收這個(gè)推送,從而完成文件的同步。

另外還可以有C、D、E、F、……,它們都與B相同,只要運(yùn)行rsyncd服務(wù)即可,A上可配置一次性推送向多臺(tái)機(jī)器。

安裝lsyncd

CentOS用yum、其他的用各自的包管理軟件,比如Ubuntu用apt-get,Mac用brew install:

yum -y install rsync lsyncd

Lsyncd安裝好之后,默認(rèn)的配置文件在/etc/lsyncd.conf,另外還有些配置的例子在/usr/share/doc/lsyncd-2.2.2/examples下:

/usr/share/doc/lsyncd-2.2.2/examples/
├── lalarm.lua
├── lbash.lua
├── lecho.lua
├── lftp.lua
├── lgforce.lua
├── limagemagic.lua
├── lpostcmd.lua
├── lrsync.lua
├── lrsyncssh.lua
└── lsayirc.lua

0 directories, 10 files

/etc/lsyncd.conf也可以寫成/etc/lsyncd.lua,它本身就是用lua(一種腳本語言)寫配置的。

Lsyncd配置文件詳解

配置文件是使用lua語言寫的,所以注釋要用lua語言的注釋符號(hào),即兩個(gè)橫杠--。

配置文件主要有三部分:

  • settings:lsyncd本身的一些設(shè)置,比如日志文件路徑,同步進(jìn)程數(shù),是否后臺(tái)運(yùn)行等等。
  • sync:同步相關(guān)的設(shè)置,比如從哪同步到哪,要忽略哪些文件,多久同步一次等等
  • rsync:這部分是在sync里面的,它主要配置rsync本身的一些選項(xiàng)。

以下是兩個(gè)官方的配置文檔:

  • 配置Settings:The Configuration File
  • 配置sync和rsync:Config Layer 4: Default Config

/etc/lsyncd.conf中的默認(rèn)內(nèi)容沒什么價(jià)值,可以全部刪除,下邊我們來講解配置文件要怎么寫。

default.rsync模式配置文件:
-- 由于該配置文件實(shí)際上是lua語言的語法,所以寫注釋要用--,--是lua語言的注釋符號(hào)
-- Lsyncd本身的配置

settings {
    -- 指定日志文件位置
    logfile = "/var/log/lsyncd/lsyncd.log",

    -- 指定狀態(tài)文件位置
    statusFile = "/var/log/lsyncd/lsyncd.status",

     -- 是否以后臺(tái)的方式運(yùn)行,注意它是nodaemon,所以是雙重否定,如果填false,意思就是“不要不后臺(tái)運(yùn)行”(即后臺(tái)運(yùn)行),非后臺(tái)運(yùn)行一般用于調(diào)試,把rsync的verbose也設(shè)置為true,這樣會(huì)把同步的細(xì)節(jié)輸出到控制臺(tái),方便調(diào)試
    nodaemon = false,

    -- 系統(tǒng)inotify指定監(jiān)聽的變化,什么事件才同步。CloseWrite表示文件關(guān)閉的時(shí)候同步(創(chuàng)建文件,修改文件后保存都會(huì)觸發(fā)CloseWrite事件),可以是"Modify"、"CloseWrite" (默認(rèn)) 或"CloseWrite or Modify"。
    inotifyMode = "CloseWrite",

    -- 最大同步進(jìn)程數(shù)(default.rsyncssh模式,則必須設(shè)置為1,這就是rsyncssh模式的缺點(diǎn)了,如果是default.rsync模式則可以設(shè)置大于1,這樣會(huì)有多個(gè)同步進(jìn)程,速度更快)
    maxProcesses = 8,
    -- maxProcesses = 1,

    -- 配合下面的delay選項(xiàng)使用,delay單位是秒,當(dāng)delay時(shí)間到了,不管maxDelays設(shè)置多少,都會(huì)同步,同樣,當(dāng)maxDelays達(dá)到了設(shè)定值,不管是否到delay時(shí)間,都會(huì)同步,即兩個(gè)選項(xiàng)有一個(gè)滿足即會(huì)觸發(fā)同步,為了實(shí)時(shí)同>步,我們一般設(shè)置為1,表示即使只有一個(gè)文件改變也同步
    maxDelays = 1,
}

---- 同步配置default.rsync模式(比如配置從哪同步到哪,忽略哪些文件,多久同步一次等),可以有多個(gè)sync模塊,每個(gè)模塊用于設(shè)置一臺(tái)目標(biāo)機(jī)器
sync {
    -- 有default.rsync/default.direct/default.rsyncssh三種模式,我們默認(rèn)都用default.rsync即可。
    default.rsync,

    -- 同步源目錄(本機(jī)某個(gè)目錄)
    source = "/data/wwwroot",

    -- 同步目標(biāo)地址,不同同步模式有不同寫法,由于絕大多數(shù)情況都采用rsync同步,所以這里寫的是rsync的同步地址
    target = "remote@192.168.1.6::wwwroot",

    -- 默認(rèn)true,允許刪除目錄服務(wù)器中的某些文件(即刪除“那些在源服務(wù)器中不存在的文件”),可選值有: true/false/startup/running,startup就是只在啟動(dòng)lsyncd服務(wù)的時(shí)候判斷目標(biāo)服務(wù)器中有哪些文件在源服務(wù)器中沒有,然后把這些文件刪除,但啟動(dòng)之后如果目標(biāo)服務(wù)器又新增了文件,這些文件即使在源服務(wù)器不存在,也不會(huì)被刪除;而running與startup正好相反,是在啟動(dòng)的時(shí)候不會(huì)刪除,啟動(dòng)之后會(huì)刪除,true=running+startup,false相當(dāng)于running和startup都不做。
    -- delete = true,

    -- 哪些文件不同步(可用正則))
    exclude = {
        '.**',
        '.git/**',
        '*.bak',
        '*.tmp',
       'runtime/**',
       'cache/**'
    },

    -- 與上邊的maxDelays配合,maxDelays是累計(jì)事件數(shù)(單位:個(gè)),delay是時(shí)間(單位:秒),這兩個(gè)只要有一個(gè)符合條件就會(huì)同步一次,但為了確保實(shí)時(shí)同步,maxDelays我們一般設(shè)置為1,也就是只要有一個(gè)文件變化事件,就會(huì)同步一次,而delay是比較大的,默認(rèn)是15。當(dāng)然,假如我們把maxDelays設(shè)置為100,那可能15秒到了也沒有達(dá)到100個(gè)文件變化,但由于到達(dá)時(shí)間了,它也會(huì)同步。
    delay = 15,

    -- 當(dāng)init = false時(shí)只同步進(jìn)程啟動(dòng)以后發(fā)生改動(dòng)事件的文件,原有的目錄即使有差異也不會(huì)同步,如果為true,則啟動(dòng)后如果源目錄與目標(biāo)目錄的文件有差異都會(huì)同步,默認(rèn)為true。
    -- init = false,

    -- rsync的配置(這是default.rsync模式,如果是default.rsyncssh模式,該模塊的配置會(huì)有所不同)
    rsync = {
        -- rsync可執(zhí)行文件的絕對路徑
        binary = "/usr/bin/rsync",

        -- 密碼文件路徑(default.rsyncssh模式不需要該項(xiàng))
        password_file = "/etc/rsyncd.password",

        -- 打包后再同步(注意,打包不等于壓縮,打包即可以壓縮也可以不壓縮)
        archive = true,

        -- 壓縮后再同步
        compress = false,

        -- 輸出同步信息(由于是后臺(tái)執(zhí)行,所以沒必要輸出,如果非后臺(tái)執(zhí)行可以設(shè)置為true,非后臺(tái)執(zhí)行主要用于調(diào)試)
        verbose  = false,

        -- 由于rsync有非常多的選項(xiàng)(請自己rsync --help查看),部分非主要選項(xiàng)可以用_extra的方式指定,雙引號(hào)引住,逗號(hào)分隔(bwlimit中的bw是bandwith,即帶寬,整個(gè)意思是帶寬限制,omit-link-times忽略符號(hào)鏈接的修改時(shí)間)
        _extra = {"--bwlimit=200", "--omit-link-times"}
    }
}

解釋幾個(gè)選項(xiàng):

  • target = “remote@192.168.1.6::wwwroot”,192.168.1.6是rsync服務(wù)器端的ip,remote是服務(wù)器端配置的用戶名,wwwroot是服務(wù)器端的模塊名。
  • password_file = “/etc/rsyncd.password”, rsyncd.password中的內(nèi)容就是一個(gè)字符串(比如:123456,你也不用寫password=123456),是服務(wù)器端的密碼(rsync服務(wù)器端可以配置賬號(hào)和密碼),需使用命令chmod賦予文件400權(quán)限。

exclude再可以用excludeFrom來代替,這樣就可以在外部文件單獨(dú)寫要排除同步的文件:

excludeFrom = "/etc/lsyncd_exclude.lst",

外部排除同步文件/etc/lsyncd_exclude.lst的寫法:

.svn
Runtime/*
Uploads/*

若某個(gè)事件的路徑中的某些片段匹配這些文本,那么排除。比如/bin/foo/bar匹配規(guī)則foo。
– 如果規(guī)則以/開始,那么只匹配路徑的開始
如果規(guī)則以/結(jié)束,那么只匹配路徑的結(jié)束
– ? 匹配任何不是/的字符
– *匹配0或多次非/字符
– **匹配任何字符0或多次。

rsync服務(wù)器端配置

文章開頭已經(jīng)說過A、B兩臺(tái)機(jī)各自要安裝什么,現(xiàn)在A機(jī)的操作前面已經(jīng)講過了,B機(jī)的操作,由于之前寫過文章,這里就不再重復(fù),請直接看:rsync的使用。

開放端口
rsync的默認(rèn)端口是873,如果你是CentOS7的firewalld防火墻,可以用以下方法允許873端口:

firewall-cmd --zone=public --add-port=873/tcp --permanent
firewall-cmd --reload

如果你是本地做實(shí)驗(yàn)覺得防火墻麻煩,也可關(guān)閉防火墻:
systemctl stop firewalld

啟動(dòng)lsync服務(wù)
如何啟動(dòng)的官方文檔:Invoking。
lsync配置文件寫好后,就可以啟動(dòng)它了,由于我們有配置文件,所以啟動(dòng)方式是:
lsyncd -log Exec /etc/lsyncd.conf

-log Exec表示記錄所有進(jìn)程的日志(因?yàn)槿绻鹠axProcesses大于1就會(huì)有多個(gè)同步進(jìn)程)
啟動(dòng)后,它只輸出了:
21:46:54 Normal: --- Startup, daemonizing ---

查看是否啟動(dòng)成功:
ps aux | grep lsyncd

如何進(jìn)程正常運(yùn)行,可以看到:
root 5238 7.7 0.6 13348 3340 ? Ss 21:46 0:15 lsyncd /etc/lsyncd.conf

查看log文件,你會(huì)看到已經(jīng)同步了很多文件:
tail -100f /var/log/lsyncd/lsyncd.log

但其實(shí)在CentOS7系統(tǒng)中,我們一般不直接啟動(dòng),而是用systemctl命令來啟動(dòng):
systemctl start lsyncd

查看啟動(dòng)狀態(tài):
systemctl status lsyncd

停止:
systemctl stop lsyncd

重啟:
systemctl restart lsyncd

設(shè)置開機(jī)自啟動(dòng):
systemctl enable lsyncd


default.rsyncssh模式配置文件:

相比rsync,主要修改的有以下幾點(diǎn):

  1. settings中的maxProcesses必須為1,否則無法啟動(dòng),并報(bào)以下錯(cuò)誤:
    Error: error preparing /etc/lsyncd.conf: /etc/lsyncd.conf:69: default.rsyncssh must have maxProcesses set to 1.
  2. rsync中的password_file去掉(或注釋掉),因?yàn)閟sh已經(jīng)不需要用rsync的password來驗(yàn)證了。
  3. sync添加一個(gè)host,格式就是ssh登錄的格式(即:username@這樣的格式)
  4. 把target改成targetdir,值的格式就是目標(biāo)服務(wù)器的絕對地址,比如:/data/wwwroot/(最后一個(gè)斜杠可要可不要,最好要,因?yàn)檫@樣一看就知道是目錄)。
  5. host指定的ssh登錄用戶需要具有targetdir指定的目錄的權(quán)限,如果啟動(dòng)不了請嘗試用root,并且設(shè)置該用戶免密登錄:Linux-使用ssh免密碼登錄,不配置免密碼登錄將會(huì)無法啟動(dòng)。
  6. 免密碼登錄需要注意:假設(shè)你A機(jī)使用root啟動(dòng)lsyncd(其實(shí)基本上都得用root),而你host=zhangsan@12.34.56.78(B機(jī)),那么你必須保證A機(jī)能在root用戶下ssh 到B機(jī)。
  7. host指定ssh用戶,必須與目標(biāo)文件夾需要的用戶相同,比如很多時(shí)候,wwwroot網(wǎng)站目錄我們都使用www:www這樣的用戶和組,所以你就必須用這個(gè)用戶來同步,否則同步后創(chuàng)建出來的文件并不是這個(gè)權(quán)限,權(quán)限不對則網(wǎng)站可能會(huì)出問題。
-- 由于該配置文件實(shí)際上是lua語言的語法,所以寫注釋要用--,--是lua語言的注釋符號(hào)
-- Lsyncd本身的配置
settings {
    -- 指定日志文件位置
    logfile = "/var/log/lsyncd/lsyncd.log",

    -- 指定狀態(tài)文件位置
    statusFile = "/var/log/lsyncd/lsyncd.status",

    -- inotify事件模式,什么事件才同步,CloseWrite表示文件關(guān)閉的時(shí)候同步(創(chuàng)建文件,修改文件后再關(guān)閉(如vim的:wq)都會(huì)觸發(fā)CloseWrite事件)
    inotifyMode = "CloseWrite",

    -- 最大同步進(jìn)程數(shù)(default.rsyncssh模式必須設(shè)置為1,否則無法啟動(dòng),default.rsync模式可以設(shè)置大于1)
    maxProcesses = 1,

    -- 配合下面的delay選項(xiàng)使用,delay單位是秒,當(dāng)delay時(shí)間到了,不管maxDelays設(shè)置多少,都會(huì)同步,同樣,當(dāng)maxDelays達(dá)到了設(shè)定值,不管是否到delay時(shí)間,都會(huì)同步,即兩個(gè)選項(xiàng)有一個(gè)滿足即會(huì)觸發(fā)同步,為了實(shí)時(shí)同>步,我們一般設(shè)置為1,表示即使只有一個(gè)文件改變也同步
    maxDelays = 1,

    -- 是否以后臺(tái)的方式運(yùn)行,注意它是nodaemon,所以是雙重否定,如果填false,意思就是“不要不后臺(tái)運(yùn)行”(即后臺(tái)運(yùn)行),非后臺(tái)運(yùn)行一般用于調(diào)試,把rsync的verbose也設(shè)置為true,這樣會(huì)把同步的細(xì)節(jié)輸出到控制臺(tái),方便調(diào)試
    nodaemon = false,
}

-- 同步配置default.rsync模式(比如配置從哪同步到哪,要忽略哪些文件,多久同步一次等),可以有多個(gè)sync模塊,每個(gè)模塊用于設(shè)置一臺(tái)目標(biāo)機(jī)器
sync {
    -- 有default.rsync/default.direct/default.rsyncssh三種模式,我們默認(rèn)都用default.rsyncssh方式,因?yàn)檫@種方式其實(shí)是最好的。
    default.rsyncssh,

    -- 同步源目錄(本機(jī)某個(gè)目錄)
    source = "/data/wwwroot/",

    -- 同步目標(biāo)地址,rsyncssh模式寫法
    host="192.168.1.6",
    targetdir="/data/wwwroot/",

    -- 默認(rèn)true,允許刪除目錄服務(wù)器中的某些文件(即刪除“那些在源服務(wù)器中不存在的文件”),可選值有: true/false/startup/running,startup就是只在啟動(dòng)lsyncd服務(wù)的時(shí)候判斷目標(biāo)服務(wù)器中有哪些文件在源服務(wù)器中沒有,然后把這些文件刪除,但啟動(dòng)之后如果目標(biāo)服務(wù)器又新增了文件,這些文件即使在源服務(wù)器不存在,也不會(huì)被刪除;而running與startup正好相反,是在啟動(dòng)的時(shí)候不會(huì)刪除,啟動(dòng)之后會(huì)刪除,true=running+startup,false相當(dāng)于running和startup都不做。
    -- delete = true,

    -- 哪些文件不同步(可用正則))
    exclude = {
        '.**',
        '.git/**',
        '*.bak',
        '*.tmp',
       'runtime/**',
       'cache/**'
    },
    -- 忽略文件路徑規(guī)則也可用外部配置文件
    -- excludeFrom = "/etc/lsyncd_exclude.lst",

    -- 與上邊的maxDelays配合,maxDelays是累計(jì)事件數(shù)(單位:個(gè)),delay是時(shí)間(單位:秒),這兩個(gè)只要有一個(gè)符合條件就會(huì)同步一次,但為了確保實(shí)時(shí)同步,maxDelays我們一般設(shè)置為1,也就是只要有一個(gè)文件變化事件,就會(huì)同步一次,而delay是比較大的,默認(rèn)是15。當(dāng)然,假如我們把maxDelays設(shè)置為100,那可能15秒到了也沒有達(dá)到100個(gè)文件變化,但由于到達(dá)時(shí)間了,它也會(huì)同步。
    delay = 15,

    -- 當(dāng)init = false時(shí)只同步進(jìn)程啟動(dòng)以后發(fā)生改動(dòng)事件的文件,原有的目錄即使有差異也不會(huì)同步,如果為true,則啟動(dòng)后如果源目錄與目標(biāo)目錄的文件有差異,就會(huì)同步,我們當(dāng)然要設(shè)置為true,默認(rèn)為true,所以這個(gè)設(shè)置可以不寫,寫在這里是為了解釋它。
    -- init = false,

    -- rsyncssh的配置(這是default.rsyncssh模式,如果是default.rsyncssh模式,該模塊的配置會(huì)有所不同)
    rsync = {
        -- rsync可執(zhí)行文件的絕對路徑
        binary = "/usr/bin/rsync",

        -- 密碼文件路徑(rsync模式不用該配置,rsyncssh模式才需要該項(xiàng))
        -- password_file = "/etc/rsyncd.password",

        -- 打包后再同步(注意,打包不等于壓縮,打包即可以壓縮也可以不壓縮)
        archive = true,

        -- 壓縮后再同步
        compress = true,

        -- 同步符號(hào)鏈接文件
        copy_links = true,

        -- 同步符號(hào)鏈接目錄
        copy_dirlinks = true,

        -- 輸出同步信息(由于是后臺(tái)執(zhí)行,所以沒必要輸出,如果非后臺(tái)執(zhí)行可以設(shè)置為true,非后臺(tái)執(zhí)行主要用于調(diào)試)
        verbose  = false,

        -- 由于rsync有非常多的選項(xiàng)(請自己rsync --help查看),部分非主要選項(xiàng)可以用_extra的方式指定,雙引號(hào)引住,逗號(hào)分隔(bwlimit中的bw是bandwith,即帶寬,整個(gè)意思是帶寬限制,omit-link-times忽略符號(hào)鏈接的修改時(shí)間)
        _extra = {"--bwlimit=200", "--omit-link-times"},

        -- 指定ssh相關(guān)參數(shù)選項(xiàng)
        rsh = "/usr/bin/ssh -l xiebruce -i /root/.ssh/id_rsa -o StrictHostKeyChecking=no"
    }
}

其中這一句就是用來通過ssh登錄到服務(wù)器的:
rsh = "/usr/bin/ssh -l xiebruce -i /root/.ssh/id_rsa -o StrictHostKeyChecking=no"

  • 你平時(shí)使用ssh登錄服務(wù)器,也許用的是ssh zhangsan@192.168.1.6,最多再加個(gè)-p指定一下端口,但其實(shí)ssh還有很多選項(xiàng),比如ssh -l test root@192.168.1.6就表示,我雖然是用root去登錄,但用-l(login的縮寫)指定了登錄的用戶,所以最終會(huì)以test用戶進(jìn)行登錄,而-i(identify的縮寫)則表示指定私鑰(身份認(rèn)證文件),通常是為了免密碼登錄服務(wù)器,原因很簡單,這個(gè)同步不可能每次讓你輸入密碼,所以需要免密碼登錄。
  • 而-o(option的縮寫)表示選項(xiàng),ssh有很多選項(xiàng),可以用man ssh查到,而每個(gè)選項(xiàng)是什么意思需要用man ssh_config來查看,“StrictHostKeyChecking”表示嚴(yán)格檢查主機(jī)的key fingerprint(指紋密鑰),當(dāng)你首次登錄一臺(tái)服務(wù)器的時(shí)候,它總會(huì)有這個(gè)提示:
    The authenticity of host '192.168.1.6 (192.168.1.6)' can't be established.
    ECDSA key fingerprint is SHA256:xcDUp3zNlJvhY4fwfwDH1pgOyc5p8Vsr2OjopanEQBw.
    Are you sure you want to continue connecting (yes/no)?

如果你輸入no那就不會(huì)登錄,如果你輸入yes,就會(huì)登錄,并且把這個(gè)“key fingerprint”(指紋密鑰)添加到你終端的ssh配置目錄下的known_hosts文件中,這個(gè)文件的位置,對于Mac/Linux電腦,是在~/.ssh/known_hosts,Windows的話則是在C:\Users\用戶名\目錄下。
同理,現(xiàn)在是rsync登錄你的ssh,所以rsync也會(huì)存儲(chǔ)這樣的指紋密鑰,如果“StrictHostKeyChecking”設(shè)置為yes,就意味著每次都要嚴(yán)格檢查密鑰(就相當(dāng)于你用終端登錄時(shí),每次都要你輸入一遍yes),這樣顯然是沒必要的,所以我們要把它設(shè)置為“StrictHostKeyChecking=no”。


default.direct模式:該模式我沒有測試

sync {
    default.direct,
    source  = "/home/user/src/",
    target  = "/home/user/trg/"
}

同時(shí)同步到多臺(tái)機(jī)

格式如下,每臺(tái)目標(biāo)服務(wù)器一個(gè)sync模塊即可,每個(gè)sync模塊都像上邊說的那樣寫就行,其實(shí)就只是ip不同,其他都一樣:

settings {
    logfile = "/var/log/lsyncd/lsyncd.log",
    inotifyMode = "CloseWrite or Modify",
    -- statusFile = "/var/log/lsyncd/lsyncd.status",
}

--  B服務(wù)器配置
sync {
    default.rsync,
    source = "/etc/nginx/",
    target = "rsync://rsync@192.168.1.6:1873/nginx/",
    exclude = { ".*", "*.tmp", "*.swp", "*.bak", "*.log", "*.swx", "*~", "sets/config.json", "listen_local_*" },
    delay = 2,
    init = false,
    rsync = {
        password_file = "/etc/rsyncd.passwd",
        archive = true,
        compress = true,
        verbose = true,
        checksum = true,
        ignore_times = true
    }
}

--  C服務(wù)器配置
sync {
    default.rsync,
    source = "/data/web/",
    target = "rsync://rsync@192.168.1.11:1873/web/",
    exclude = { ".*", "*.tmp", "*.swp", "*.bak", "*.log", "*.out", "*/logs/*", "*.swx", "*~" },
    delay = 120,
    init = false,
    rsync = {
        password_file = "/etc/rsyncd.passwd",
        archive = true,
        compress = true,
        verbose = true,
        checksum = true,
        ignore_times = true
    }
}

--  D服務(wù)器配置
sync {
    default.rsync,
    source = "/data/script/",
    target = "rsync://rsync@192.168.1.100:1873/script/",
    exclude = { ".*", "*.tmp", "*.swp", "*.bak", "*.log", "*.out", "*/logs/*", "*.swx", "*~" },
    delay = 2,
    init = false,
    rsync = {
        password_file = "/etc/rsyncd.passwd",
        archive = true,
        compress = true,
        verbose = true,
        checksum = true,
        ignore_times = true
    }
}

文章名稱:CentOS7部署lsyncd+rsync實(shí)現(xiàn)服務(wù)器文件實(shí)時(shí)同步
鏈接地址:http://weahome.cn/article/jjeooe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部