lsyncd文件同步

在運維的工作中經常會遇到有集中式存儲的散文件需要進行備份或者(本文不討論分佈式文件存儲OSS、ceph等)。

一. 文件數量少、更新不頻繁
解決方案:rsync+crontab或者inotify+rsync
優點:rsync有windows版本cwRsync.rar

  1. linux 安裝
    ①服務端安裝yum install -y rsync
    1) vim /etc/rsyncd.conf加入以下內容
    [global]
    uid = root
    gid = root
    use chroot = no
    max connections = 10
    list = yes
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsyncd.lock
    log file = /var/log/rsyncd.log
    hosts allow = 192.168.217.130 //白名單

[data]
path = /usr/local/src //開放目錄
ignore errors
read only = yes
auth users = vic.xiang //開放用戶
secrets file = /etc/sery.pass //賬號密碼配置文件

2) vim /etc/sery.pass加入賬號及密碼
vic.xiang:123456
給sery.pass賦權限
chmod 600 /etc/sery.pass

3) 啓動服務端rsync
rsync --daemon --config=/etc/rsyncd.conf

4) 防火牆設置,開放端口873
vim /etc/sysconfig/iptables加入下面行
-A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT

② 客戶端(需要同步的機器)配置
1) vim /etc/sery_client.pass配置本地密碼
123456
給sery_client.pass付權限
chmod 600 /etc/sery_client.pass

2) 執行命令:rsync -avr -P [email protected]::data /usr/local/src/ --password-file=/etc/sery_client.pass
發現同步成功
配合crontab就可以完成定時同步,文件量小的情況下,同步效率還是很快的。

2. windows安裝,安裝包:cwRsync.rar (詳細步驟需要好多截圖,此處略,可以自行google或者百度)
①安裝:記住安裝時創建的用戶和密碼
②配置文件rsyncd.conf:
use chroot = false
strict modes = false
hosts allow = *
log file = rsyncd.log
uid = 0
gid = 0
[rsyncdata] #指定模塊的頭信息  
path = /cygdrive/f/rsyncdata #需要同步數據的目錄,這個目錄指F盤下的rsyncdata目錄  
read only = true #是否爲只讀  
list = no 
hosts allow = 10.17.1.200,10.17.1.88,10.17.1.60 #允許訪問的主機,多個用逗號分隔  
auth users = rsync #指定認證的用戶名  
secrets file = /cygdrive/f/rsyncd.secrets #指定認證用戶的密碼文件存放路徑,這個路徑指F盤下的rsyncd.secrets,一會需要新建這個文件 

③其他配置:
給需要同步的目錄添加安裝rsync時候創建的用戶的所有訪問權限
④啓動:在服務中找到RsyncServer啓動,關閉防火牆。

二. 大量、海量文件,更新頻繁:
當文件數量超過100W的時候,rsync就會很慢,如果更新頻繁就不太適合使用rsync進行同步或者備份了。lsyncd可以解決rsync的不足。
1. 安裝lsyncd服務端
yum install lua lua-devel asciidoc cmake rsync

tar zxvf lsyncd-2.1.5.tar.gz
cd lsyncd-2.1.5/
./configure --prefix=/usr/local/lsyncd
make
make install
cd /usr/local/lsyncd
mkdir {etc,logs}

vim /etc/lsyncd.conf
settings {
logfile = "/usr/local/lsyncd/logs/lsyncd.log",
statusFile = "/usr/local/lsyncd/logs/lsyncd.status",
maxDelays = 100,
delay = 5,
exitcodes = {[0] = "ok", [1] = "again", [2] = "die"},
maxProcesses = 5,
statusInterval = 5

}
sync {
default.rsync,
source = "/tmp/src_src",
target = "[email protected]::sync_data",
exclude = { ".tmp", ".bak" },
delete = true,
rsync = {
compress = false,
archive = true,
verbose = false,
timeout = 3600,
password_file = "/usr/local/lsyncd/etc/rsync.pass"
}
}

echo "123456sync" > /usr/local/lsyncd/etc/rsync.pass
chown 400 /usr/local/lsyncd/etc/rsync.pass
/usr/local/lsyncd/bin/lsyncd /usr/local/lsyncd/etc/lsyncd.conf

  1. 安裝客戶端
    yum install -y rsync
    rsync --daemon --config=/etc/rsyncd.conf

uid=root
gid=root
max connections=10
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
hosts allow = 10.66.10.197

[sync_data]
comment=backup data
path=/home/m2mfile/ftp
read only=no
ignore errors
auth users=sync_user
secrets file=/etc/rsyncd.passwd

3.lsyncd.conf配置文件解釋
settings

裏面是全局設置,--開頭表示註釋,下面是幾個常用選項說明:

logfile 定義日誌文件
stausFile 定義狀態文件
nodaemon=true 表示不啓用守護模式,默認
statusInterval 將lsyncd的狀態寫入上面的statusFile的間隔,默認10秒
inotifyMode 指定inotify監控的事件,默認是CloseWrite,還可以是Modify或CloseWrite or Modify
maxProcesses 同步進程的最大個數。假如同時有20個文件需要同步,而maxProcesses = 8,則最大能看到有8個rysnc進程
maxDelays 累計到多少所監控的事件激活一次同步,即使後面的delay延遲時間還未到
sync

裏面是定義同步參數,可以繼續使用maxDelays來重寫settings的全局變量。一般第一個參數指定lsyncd以什麼模式運行:rsync、rsyncssh、direct三種模式:

default.rsync :本地目錄間同步,使用rsync,也可以達到使用ssh形式的遠程rsync效果,或daemon方式連接遠程rsyncd進程;
default.direct :本地目錄間同步,使用cp、rm等命令完成差異文件備份;
default.rsyncssh :同步到遠程主機目錄,rsync的ssh模式,需要使用key來認證

source 同步的源目錄,使用絕對路徑。

target 定義目的地址.對應不同的模式有幾種寫法:
/tmp/dest :本地目錄同步,可用於direct和rsync模式
172.29.88.223:/tmp/dest :同步到遠程服務器目錄,可用於rsync和rsyncssh模式,拼接的命令類似於/usr/bin/rsync -ltsd --delete --include-from=- --exclude=* SOURCE TARGET,剩下的就是rsync的內容了,比如指定username,免密碼同步
172.29.88.223::module :同步到遠程服務器目錄,用於rsync模式
三種模式的示例會在後面給出。

init 這是一個優化選項,當init = false,只同步進程啓動以後發生改動事件的文件,原有的目錄即使有差異也不會同步。默認是true

delay 累計事件,等待rsync同步延時時間,默認15秒(最大累計到1000個不可合併的事件)。也就是15s內監控目錄下發生的改動,會累積到一次rsync同步,避免過於頻繁的同步。(可合併的意思是,15s內兩次修改了同一文件,最後只同步最新的文件)

excludeFrom 排除選項,後面指定排除的列表文件,如excludeFrom = "/etc/lsyncd.exclude",如果是簡單的排除,可以使用exclude = LIST。
這裏的排除規則寫法與原生rsync有點不同,更爲簡單:
監控路徑裏的任何部分匹配到一個文本,都會被排除,例如/bin/foo/bar可以匹配規則foo
如果規則以斜線/開頭,則從頭開始要匹配全部
如果規則以/結尾,則要匹配監控路徑的末尾
?匹配任何字符,但不包括/
*匹配0或多個字符,但不包括/
**匹配0或多個字符,可以是/
delete 爲了保持target與souce完全同步,Lsyncd默認會delete = true來允許同步刪除。它除了false,還有startup、running值,請參考 Lsyncd 2.1.x ‖ Layer 4 Config ‖ Default Behavior。
rsync

(提示一下,delete和exclude本來都是rsync的選項,上面是配置在sync中的,我想這樣做的原因是爲了減少rsync的開銷)

bwlimit 限速,單位kb/s,與rsync相同(這麼重要的選項在文檔裏竟然沒有標出)
compress 壓縮傳輸默認爲true。在帶寬與cpu負載之間權衡,本地目錄同步可以考慮把它設爲false
perms 默認保留文件權限。
其它rsync的選項
其它還有rsyncssh模式獨有的配置項,如host、targetdir、rsync_path、password_file,見後文示例。rsyncOps={"-avz","--delete"}這樣的寫法在2.1.*版本已經不支持。

lsyncd.conf可以有多個sync,各自的source,各自的target,各自的模式,互不影響。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章