在運維的工做中常常會遇到有集中式存儲的散文件須要進行備份或者(本文不討論分佈式文件存儲OSS、ceph等)。css
一. 文件數量少、更新不頻繁
解決方案:rsync+crontab或者inotify+rsync
優勢:rsync有windows版本cwRsync.rarlinux
[data]
path = /usr/local/src //開放目錄
ignore errors
read only = yes
auth users = vic.xiang //開放用戶
secrets file = /etc/sery.pass //帳號密碼配置文件vim
2) vim /etc/sery.pass加入帳號及密碼
vic.xiang:123456
給sery.pass賦權限
chmod 600 /etc/sery.passwindows
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.passssh
2) 執行命令:rsync -avr -P vic.xiang@192.168.217.128::data /usr/local/src/ --password-file=/etc/sery_client.pass
發現同步成功
配合crontab就能夠完成定時同步,文件量小的狀況下,同步效率仍是很快的。tcp
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}ide
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 = "sync_user@192.168.31.130::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
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,各自的模式,互不影響。