午夜视频-在线成人-亚洲中文字幕一区-强开小受嫩苞第一次免费视频-黄色小说在线看-www精品-www.三级-蜜桃传媒一区二区-av手机在线-一级黄色片免费-国产中文字幕在线播放-国产精品免费一区二区三区都可以-他禁欲太久了h1v1双处-五月精品-亚洲人成在线播放-宅男在线视频-欧美激情第二页-91精品国产一区-亚洲第一天堂网-色5月婷婷-国内毛片毛片-亚洲精品久久久久久一区二区-一级激情片-人人干人-日韩岛国片-亚洲成a人片77777kkkk-天堂a视频-www.看片-女人喷液视频-亚洲在线观看av

成航先森 成航先森

成都航院計(jì)算機(jī)系一個(gè)學(xué)生的個(gè)人記錄

 

系統(tǒng)運(yùn)維

  • 沒有分類目錄

最新文章

系統(tǒng)運(yùn)維
當(dāng)前位置: 首頁 ? 系統(tǒng)運(yùn)維 ? CentOS搭建lsyncd實(shí)時(shí)同步——取代rsync+inotify

CentOS搭建lsyncd實(shí)時(shí)同步——取代rsync+inotify

編輯:狂族晨曦 來源:系統(tǒng)運(yùn)維經(jīng)驗(yàn)雜筆 日期:2018-02-08 閱讀: 8,203 次 3 條評論 » 百度已收錄

最后更新時(shí)間:2022-04-02

昨天先森發(fā)布了“CentOS下inotify+rsync實(shí)現(xiàn)文件實(shí)時(shí)同步”,inotify+rsync實(shí)時(shí)同步的方案是用shell在后臺常駐來實(shí)現(xiàn)實(shí)時(shí)同步,沒有守護(hù)進(jìn)程,感覺不是很靠譜,如果腳本突然掛了,實(shí)時(shí)同步豈不是GG了?所以先森在實(shí)現(xiàn)了inotify+rsync后還是再找其他的解決方案。

其實(shí)在找到lsyncd之前,先森先找到了sersync這個(gè)工具,但是好像這個(gè)工具很久沒有更新了,所以雖然也有較多好評,但是先森目前還是先研究lsyncd了。

當(dāng)然,無論是sersync還是lsyncd,其實(shí)都是對inotify這個(gè)內(nèi)核中的文件事件監(jiān)控系統(tǒng)進(jìn)行了封裝,類似inotify-tools,給我們提供的是封裝好了的inotify+rsync工具。sersync是用C寫的,lsyncd是使用lua語言封裝的。

搭建lsyncd實(shí)時(shí)同步

搭建lsyncd實(shí)時(shí)同步

lsyncd

lsyncd項(xiàng)目也托管在GitHub上面,具體地址是https://github.com/axkibe/lsyncd,一會兒若是要編譯安裝也需要去這個(gè)地方。

上文也說過,lsyncd是使用lua語言封裝的,所以初識lsyncd的配置文件時(shí),還是有點(diǎn)不習(xí)慣,但是用久應(yīng)該就還好了。

lsyncd不僅僅是實(shí)現(xiàn)兩臺服務(wù)器的同步的,它還能夠在一臺服務(wù)器內(nèi)對兩個(gè)文件夾進(jìn)行同步,這里可以是cp,也可以是rsync。兩臺或多臺服務(wù)器間可以是rsync,也可以是rsyncssh。本文主要講的是兩臺服務(wù)器間的rsync。

lsyncd可以配置inotify檢測到文件變動后多少秒才執(zhí)行同步,也就是時(shí)間延遲。也可以配置文件變動個(gè)數(shù)達(dá)到多少個(gè)后立即執(zhí)行同步,無論有沒有到達(dá)前面的時(shí)間延遲的要求,這就是累計(jì)觸發(fā)事件次數(shù)。這兩個(gè)配置可以減少rsync的同步,避免海量文件同步時(shí)rsync的頻繁發(fā)送文件對比列表。

lsyncd安裝

lsyncd的安裝方式有兩種,yum安裝和編譯安裝。

yum安裝:

yum安裝也有兩種方式,一個(gè)是阿里云的鏡像源,一個(gè)是fedoraproject的鏡像源。

阿里云:

#CentOS 7
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#CentOS 6
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

#yum 安裝
yum install lsyncd -y

fedoraproject:

#只找到CentOS 6的
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install lsyncd -y

編譯安裝:

1、首先還是去上文提到的GitHub上下載項(xiàng)目,通過下面的下載就是最新的了:

wget https://github.com/axkibe/lsyncd/archive/master.zip

2、下載了軟件包,先別急著安裝,上文提到了幾次,lsyncd是用lua語言封裝的,所以還需要安裝lua環(huán)境。另外lsyncd不是使用的make,而是cmake,所以也需要安裝cmake。

yum install -y lua lua-devel asciidoc cmake

3、下載了軟件包,裝好了環(huán)境依賴,下面就是編譯安裝:

unzip lsyncd-master.zip
cd lsyncd-master
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lsyncd
make && make install

安裝好了的lsyncd在/usr/local/lsyncd下。配置文件、日志文件夾等需要我們自己定義與創(chuàng)建。

4、配置文件。先森的配置文件是用于兩臺服務(wù)器間實(shí)時(shí)同步的,使用的是rsync模式。

lsyncd的配置文件其實(shí)有點(diǎn)類似nginx,如nginx的server可以多定義互不沖突一樣,lsyncd也可以多個(gè)定義。

settings {
    logfile ="/usr/local/lsyncd/logs/lsyncd.log",
    statusFile ="/usr/local/lsyncd/logs/lsyncd.status",
    inotifyMode = "CloseWrite or Modify",
    maxProcesses = 15,
    }
sync {
    default.rsync,
    source    = "/web/data/ftp",
    target    = "user@172.17.8.16::datahome",
    delete="running",
    exclude = { ".*", ".tmp","*.swp","*.swx" },
    delay = 0,
    rsync     = {
        binary = "/usr/bin/rsync",
        archive = true,
        compress = true,
        verbose   = true,
        password_file = "/etc/rsyncd/rsync.passwd",
        }
    }

注釋版:

settings {
    --定義日志文件
    logfile ="/usr/local/lsyncd/logs/lsyncd.log",
    --定義狀態(tài)文件
    statusFile ="/usr/local/lsyncd/logs/lsyncd.status",
    --指定inotify監(jiān)控的事件,默認(rèn)是CloseWrite,還可以是Modify或CloseWrite or Modify
    --這個(gè)就是使用的inotify能監(jiān)控的事件
    inotifyMode = "CloseWrite or Modify",
    --同步進(jìn)程的最大個(gè)數(shù)。假如同時(shí)有20個(gè)文件需要同步,而maxProcesses = 8,則最大能看到有8個(gè)rysnc進(jìn)程
    maxProcesses = 15,
    --(這個(gè)配置先森沒有使用)累計(jì)到多少所監(jiān)控的事件激活一次同步,即使后面的delay延遲時(shí)間還未到。
    --maxDelays=10,
    }
sync {
    --使用rsync通過daemon方式連接遠(yuǎn)程rsyncd進(jìn)程;
    default.rsync,
    --同步的源目錄,使用絕對路徑。
    source    = "/web/data/ftp",
    --定義目的地址,對應(yīng)不同的模式有不同的寫法。這里是遠(yuǎn)程rsync,使用“用戶名@ip::模塊名”寫法。
    target    = "user@172.17.8.16::datahome",
    --是否同步刪除,除了running選項(xiàng),還有true、false和startup,這個(gè)配置先森不是很明白,大概是true是完全同步刪除,false是不允許刪除,startup和running要難理解一些\
    --先森的理解是,startup是僅在啟動時(shí)將源目錄和目的目錄來一次完全同步,lsyncd運(yùn)行時(shí)的源目錄的刪除文件在目的目錄中不做刪除操作\
    --running是啟動時(shí)不對源、目的目錄進(jìn)行完全同步,lsyncd運(yùn)行時(shí)源目錄刪除的文件,目的目錄也會被刪除。
    delete="running",
    --排除的文件,這里排除了一些隱藏文件,和文件打開是時(shí)的臨時(shí)文件
    exclude = { ".*", ".tmp","*.swp","*.swx" },
    -- 累計(jì)事件,等待rsync同步延時(shí)時(shí)間,默認(rèn)15秒。先森配置的是0,也就是實(shí)時(shí)同步。
    delay = 0,
    rsync     = {
        --本地rsync命令路徑
        binary = "/usr/bin/rsync",
        archive = true,
        compress = true,
        verbose   = true,
        --遠(yuǎn)程rsyncd的密碼
        password_file = "/etc/rsyncd/rsync.passwd",
        }
    }

5、啟動lsyncd

/usr/local/lsyncd/bin/lsyncd -log Exec /usr/local/lsyncd/lsyncd.conf

也可以自己創(chuàng)建一個(gè)啟動腳本,腳本內(nèi)容如下,是先森從yum安裝的lsyncd拷貝的,一樣的可以使用。

只是用之前,需要對lsyncd守護(hù)命令與配置文件先做個(gè)軟連接,免得需要修改啟動腳本:

ln -s /usr/local/lsyncd/bin/lsyncd /usr/bin/lsyncd
ln -s /usr/local/lsyncd/lsyncd.conf /etc/lsyncd.conf

啟動腳本:

#!/bin/bash
#
# chkconfig: - 85 15
# description: Lightweight inotify based sync daemon
#
# processname:  lsyncd
# config:       /etc/lsyncd.conf
# config:       /etc/sysconfig/lsyncd
# pidfile:      /var/run/lsyncd.pid

# Source function library
. /etc/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

LSYNCD_OPTIONS="-pidfile /var/run/lsyncd.pid /etc/lsyncd.conf"

if [ -e /etc/sysconfig/lsyncd ]; then
  . /etc/sysconfig/lsyncd
fi

RETVAL=0

prog="lsyncd"
thelock=/var/lock/subsys/lsyncd

start() {
	[ -f /etc/lsyncd.conf ] || exit 6
        echo -n $"Starting $prog: "
        if [ $UID -ne 0 ]; then
                RETVAL=1
                failure
        else
                daemon ${LSYNCD_USER:+--user ${LSYNCD_USER}} /usr/bin/lsyncd $LSYNCD_OPTIONS
                RETVAL=$?
                [ $RETVAL -eq 0 ] && touch $thelock
        fi;
        echo
        return $RETVAL
}

stop() {
        echo -n $"Stopping $prog: "
        if [ $UID -ne 0 ]; then
                RETVAL=1
                failure
        else
                killproc lsyncd
                RETVAL=$?
                [ $RETVAL -eq 0 ] && rm -f $thelock
        fi;
        echo
        return $RETVAL
}

reload(){
        echo -n $"Reloading $prog: "
        killproc lsyncd -HUP
        RETVAL=$?
        echo
        return $RETVAL
}

restart(){
        stop
        start
}

condrestart(){
    [ -e $thelock ] && restart
    return 0
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  reload)
        reload
        ;;
  condrestart)
        condrestart
        ;;
  status)
        status lsyncd
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
        RETVAL=1
esac

exit $RETVAL

優(yōu)化

因?yàn)閘syncd其實(shí)也是用到了inotify,所以和inotify+rsync方案一樣,我們還是需要對服務(wù)器的inotify內(nèi)核配置進(jìn)行優(yōu)化。

inotify檢查磁盤變動是有隊(duì)列等值的配置的,inotify默認(rèn)內(nèi)核參數(shù)值太小,會導(dǎo)致實(shí)際檢測的時(shí)候報(bào)錯(cuò)。

查看系統(tǒng)默認(rèn)參數(shù)值

sysctl -a | grep max_queued_events
sysctl -a | grep max_user_watches
sysctl -a | grep max_user_instances

臨時(shí)修改

sysctl -w fs.inotify.max_queued_events="99999999"
sysctl -w fs.inotify.max_user_watches="99999999"
sysctl -w fs.inotify.max_user_instances="65535"

固定修改:vim /etc/sysctl.conf #添加以下代碼

fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65535

其他

官方配置文件wiki:

https://axkibe.github.io/lsyncd/manual/config/file/

標(biāo)簽:
除特別注明外,本站所有文章均為成航先森 www.lzhcjx.cn 原創(chuàng),本文共6204個(gè)字
轉(zhuǎn)載請注明出處來自http://www.lzhcjx.cn/lsyncd.html
已有 3 位"計(jì)工"發(fā)布了激烈的評論,還有N多人圍觀笑而不語評論
的頭像
歡迎發(fā)表評論
取消評論

表情
疑問調(diào)皮傷心摳鼻黑線微笑可愛奸笑震驚嚇到了撇嘴大兵忍不住笑笑狂罵狂怒噢?鼓掌酷⊙﹏⊙b汗鄙視大哭嘿嘿

Hi,您需要填寫昵稱和郵箱!

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網(wǎng)址
  1. 的頭像

    希望能學(xué)有所成。

    2018-02-08 23:22 回復(fù)
  2. 的頭像
    蘇幕遮:

    我有兩個(gè)服務(wù)器A和B,上面都啟動了lsync和rsync,現(xiàn)在發(fā)現(xiàn)一個(gè)問題。

    我1點(diǎn)啟動同步任務(wù),進(jìn)程OK文件都是正常同步的,但是在2點(diǎn)的時(shí)候同步進(jìn)程死掉,這期間文件發(fā)生了變化(文件夾里多了好多的新文件)。然后我3點(diǎn)的時(shí)候重啟了同步任務(wù),此時(shí)在A或者B上文件變化都會同步,但是2~3點(diǎn)進(jìn)程死掉之間的文件變化,卻遲遲不見同步,請問怎么辦?

    2018-04-23 18:51 回復(fù)
  3. 的頭像

    前不久我也剛搞完這個(gè)

    2018-06-09 21:28 回復(fù)
官方微信
發(fā)表評論 返回頂部
 


主站蜘蛛池模板:
成人在线视频观看
|
亚洲午夜久久久久久久久久久
|
爱爱视频网
|
亚洲中文字幕一区
|
狠狠干狠狠爱
|
麻豆91视频
|
欧美日韩视频
|
日韩综合在线
|
日本中文字幕在线观看
|
中文字幕电影
|
亚洲高清av
|
日本全黄裸体片
|
99人妻碰碰碰久久久久禁片
|
亚洲色图图片
|
日本黄色小视频
|
欧美黄色一级视频
|
女性向av|
欧美亚韩一区二区三区
|
日产久久视频
|
成人午夜在线
|
毛片视频网站
|
欧美mv日韩mv国产网站
|
嫩草视频在线观看
|
日韩av无码一区二区三区不卡
|
女人高潮叫床骚话污话
|
真实交videos乱叫娇小
|
性欧美xxxx|
韩国禁欲系高级感电影
|
国模一区二区
|
欧美性受xxxx黑人xyx性爽
|
欧美性生活视频
|
国产麻豆视频
|
久久久久久久久久久久久久久久久久久
|
中文字幕一区二区三区四区
|
色交视频
|
精品欧美一区二区三区
|
91蜜桃婷婷狠狠久久综合9色
|
久久精品网
|
欧美精产国品一二三产品特点
|
日本黄色小说
|
中文字幕久久久
|
欧美黄色小说
|
久久精品99
|
亚洲精品福利
|
乖乖女的野男人们np
|
91免费看片
|
伊人网在线观看
|
91看片看淫黄大片
|
秋霞午夜|
视频在线|
久久人人爽人人爽人人片
|
91免费观看网站
|
强伦人妻一区二区三区
|