【lsyncd 工具介紹】
如果想自動同步兩個目錄下的所有文件秕铛,讓兩個或多個目錄保持數(shù)據(jù)完全一致,大多數(shù)情況下就需要使用 inotify-tools 加上 rsync 配合來完成闪唆,inotify-tools 根據(jù) Linux 內(nèi)核對文件的監(jiān)聽所得到的反饋結(jié)果進行觸發(fā)某些操作, rsync 負責進行數(shù)據(jù)傳輸。
或者使用 sersync 等工具來完成, sersync 其實就是 inoify + rsync 二者的合體儡首。
上面的過程想要完成,就需要自己寫腳本來實現(xiàn)業(yè)務需要庐椒,甭管是什么語言椒舵,或者是編輯配置文件蚂踊,改一堆的參數(shù)约谈。
那么有沒有簡單易行的方法來完成這些操作呢?必須有啊犁钟,要不就不會寫這一篇文章了棱诱。所以今天就給大家介紹一個非常方便的工具,它叫 lsyncd
涝动。
上面提到的“兩個目錄”有幾種情況:
- 兩個目錄處于同一臺服務器上
- 兩個目錄在同一分區(qū)迈勋;
- 兩個目錄在同一機器的不同分區(qū);
- 兩個目錄分處于兩臺不同的服務器
- A 和 B 都沒有安裝和啟動 rsync 服務醋粟;
- A/B 其中一臺機器上啟動了 rsync 服務靡菇;
- 其他情形
把這幾種情況都列出來是想說,對于今天所介紹的 lsyncd 這個工具來說米愿,無論什么情況厦凤,都能輕松應對,我們要做的就是好好用它育苟,而不用再想著這種情況應該怎么搞较鼓,那種情況又該怎么弄。
下面就來說這個過程,實在太簡便了:
安裝 epel博烂,因為我們要的 lsyncd 就藏在里面香椎。
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
安裝 lsyncd
yum install lsyncd -y
修改配置文件
[root@xxxxxxxx ~]# cat /etc/lsyncd.conf_bak sync{ default.rsync, source = "/application", target = "/application1", delete = true, exclude={ "lost+found" }, rsync = { compress = true, verbose = true, archive = true, } }
設置 lsyncd 服務自啟動并順手 start 一下
systemctl enable lsyncd && systemctl start lsyncd
完成了。
我說了禽篱,今天上面介紹的最簡單的數(shù)據(jù)同步的實現(xiàn)方法畜伐,其實每一個動作都有很多種方法實現(xiàn),比如:
Q1. 安裝過程最簡單是用 yum 進行安裝躺率,如果沒有 yum 呢烤礁?或者你的服務器無法連接互聯(lián)網(wǎng)呢?
A1. 那就還可以先從別的途徑下載源碼編譯安裝肥照,或者下載相應的 .rpm 包進行安裝脚仔。
git clone https://github.com/axkibe/lsyncd.git
cd lsncd
cmake -DCMAKE_INSTALL_PREFIX=/app/lsyncd
make
make install
Q2. 這個工具都有什么樣的功能,可以完成哪些工作呢舆绎?
A2. 看A1鏈接中的官方文檔或者自行 google鲤脏,下面是一個很簡單的配置文件的例子說明:
#cat /etc/lsyncd.conf
settings {
logfile ="/var/log/lsyncd/lsyncd.log",
statusFile ="/var/run/lsyncd.status",
pidfile = "/var/run/lsyncd.pid",
delay = 0,
}
sync {
default.rsyncssh,
source = "/source/path",
host = "172.16.1.2",
targetdir = "/target/path",
--excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst",
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
},
ssh = {
port = 22
}
}
其實里面還有很多很多參數(shù)可以進行設置,就看自己需要了吕朵,我想絕大多數(shù)的需求都是能夠滿足的猎醇,比如下面這些參數(shù)都是可以根據(jù)自己的需求進行設置的,就不一一說了努溃,今天主要是告訴大家有這么個工具可以用硫嘶。
default.rsync
default.rsyncssh
default.direct
init
inotifyMode
maxProcesses
statusInterval
maxDelays
......
最后提醒一點,inotify-tools 也好梧税, lsyncd 也好沦疾,其實都是根據(jù) linux 的 kernel 特性對增、刪第队、改等事件進行監(jiān)控的哮塞,所以,kernel 的一個參數(shù)就很重要了凳谦,就是下面這個:
#cat /proc/sys/fs/inotify/max_user_watches
8192
8192 就是系統(tǒng)的默認值忆畅,代表能同一個用戶所能監(jiān)控的目錄(不是文件)的數(shù)量,在目錄較深或者子目錄非常多的時候尸执,這個值明顯就不夠用了家凯,不夠用的結(jié)果就是會監(jiān)控的過程中會丟事件,導致新增或者修改的文件都捕捉不到如失,所以我們可以適當改大一些绊诲。
可以直接修改,但重啟機器后會失效:
#sysctl -w fs.inotify.max_user_watches="99999999“
也可以修改內(nèi)核參數(shù)岖常,使之永久生效:
#echo "fs.inotify.max_user_watches=99999999" >> /etc/sysctl.conf
#sysctl -p
99999999 這個數(shù)字不必非得是65535驯镊,但也別無限大,因為你不給它喘息的機會,讓它玩命地監(jiān)控板惑,它消耗的系統(tǒng)資源也就會相應增加橄镜,同步的延時也會增大,在實時性要求比較高的時候就不太符合要求了冯乘。
我叫索雷鋒洽胶,不謝!