書名: 跟老男孩學Linux運維:高性能Web集群實踐(上)作者名: 老男孩本章字數(shù): 2700字更新時間: 2019-12-20 11:59:35
3.3 Rsync功能應用拓展
3.3.1 多模塊復制應用
前文講述的拉取數(shù)據(jù)訪問的都是服務器端的/backup目錄,那么,能不能同時從其他指定目錄下拉取呢?答案是肯定的。
修改rsyncd.conf配置實現(xiàn)多模塊配置
1)最簡單的實現(xiàn),可以在配置文件結(jié)尾加如下內(nèi)容(特殊底紋部分):
[root@backup ~]# cat /etc/rsyncd.conf #rsync_config____________start #created by oldboy #site: http://www.oldboyedu.com uid = rsync gid = rsync use chroot = no fake super = yes max connections = 200 timeout = 600 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log ignore errors read only = false list = false hosts allow = 172.16.1.0/24 hosts deny = 0.0.0.0/32 auth users = rsync_backup secrets file = /etc/rsync.password [backup] comment = welcome to oldboyedu backup. path = /backup/ [data] #<==新模塊。 path = /data/ #<==新備份目錄。 #除了增加以上兩行命令外,讀者也可以設定更多的獨立配置參數(shù),如獨立虛擬用戶、獨立密碼文件等。
2)建立目錄并授權(quán)。
[root@backup ~]# mkdir -p /data [root@backup ~]# chown -R rsync.rsync /data [root@backup ~]# ls -ld /data drwxr-xr-x 2 rsync rsync 6 4月 16 10:04 /data
3)重啟Rsync服務(只要修改配置,就考慮重載服務)。
[root@backup ~]# systemctl restart rsyncd
4)從客戶端訪問測試。
[root@nfs01 /data]# touch oldboy.txt [root@nfs01 /data]# rsync -avz /data rsync_backup@172.16.1.41::data sending incremental file list data/ data/oldboy.txt sent 123 bytes received 47 bytes 340.00 bytes/sec total size is 0 speedup is 0.00
5)然后在服務端查看。
[root@backup ~]# ls /data data
3.3.2 排除指定目錄和文件數(shù)據(jù)復制
1.實踐準備工作(Rsync服務器端操作)
[root@backup ~]# cd /backup [root@backup backup]# mkdir {a..d} [root@backup backup]# touch a/1 b/2 c/3 d/4 [root@backup backup]# tree /backup/ /backup/ |-- a | '--1 |-- b | '--2 |-- c | '--3 '-- d '--4
我們建立了a、b、c、d 4個目錄,目錄下的文件分別為1、2、3、4,其中/backup目錄為Rsync服務器端指定的備份同步目錄。
2.實踐復制數(shù)據(jù)并排除指定目錄和文件
本節(jié)以在Rsync客戶端(nfs01:172.16.1.31)上執(zhí)行拉取文件的操作,即從服務器端同步文件到客戶端為例進行講解,推送的方式是一樣的。
方法一:通過Rsync客戶端命令加命令行參數(shù)實現(xiàn)
同步數(shù)據(jù)過程中,假定要排除a、c目錄(包括內(nèi)部文件)及b目錄下的2文件,其他同步,實踐操作過程如下:
[root@nfs01~]# ls -l /mnt total 0 [root@nfs01~]# rsync --exclude=a --exclude=b/2--exclude=c -avzrtopgP \ rsync_backup@172.16.1.41::backup/ /mnt --password-file=/etc/rsync.password receiving file list ... 4 files to consider ./ b/ d/ d/4 0100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/4) sent 174 bytes received 197 bytes 247.33 bytes/sec total size is 0 speedup is 0.00 [root@nfs01~]# tree /mnt /mnt |-- b '-- d '--4 2 directories, 1 file
通過rsync同步的過程及使用tree命令可以清晰地看出僅b目錄本身和d目錄及內(nèi)部的文件同步過來了。這正是預想的結(jié)果,因此在rsync命令的參數(shù)的大家庭中,又可以融入兩個命令參數(shù)。
--exclude=PATTERN #<==表示分別排除匹配上的文件信息。 --exclude-from=FILE #<==表示將要匹配的文件或目錄信息匯總寫入到一個文件中。
排除文件的編寫形式如下,以上文中利用--exclude參數(shù)排除文件和目錄的方式為例,如果改為--exclude-from的排除方法,排除文件的命令如下:
[root@nfs01~]# vim exclude-file.txt a b/2 c [root@nfs01~]# rsync --exclude-from=./exclude-file.txt -avzP \ rsync_backup@10.0.0.19::oldboy/ /mnt/ --password-file=/etc/rsync.password receiving incremental file list ./ b/ d/ d/4 0100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/4) sent 117 bytes received 196 bytes 626.00 bytes/sec [root@nfs01~]# tree /mnt /mnt |-- b '-- d '--4 2 directories, 1 file
方法二:通過在服務器端配置rsyncd.conf參數(shù)實現(xiàn)
注意:在Rsync服務器端[IP為10.0.0.41]上執(zhí)行操作。
vi /etc/rsyncd.conf修改為如下配置:
exclude=a c b/2 說明:僅增加了一行 內(nèi)容為:exclude=a c b/2, exclude為排除目錄或文件的參數(shù),表示排除a、 c目錄及b目錄的2文件。文件和目錄之間用空格隔開,所有目錄及文件為相對于模塊的目錄。
執(zhí)行重啟命令后測試,結(jié)果依然是僅b目錄本身和d目錄及內(nèi)部的文件同步過來了。
客戶端rsync命令排除總結(jié)
1)利用客戶端rsync命令排除單個文件的命令如下:
rsync -avz --exclude=a /data1/ rsync_backup@172.16.1.41::oldboy --password- file=/etc/rsync.password
2)利用客戶端rsync命令排除多個文件的命令如下:
rsync -avz --exclude={a, b} /data1/ rsync_backup@172.16.1.41::oldboy --password-file=/etc/rsync.password rsync -avz --exclude=a --exclude=b /data1/ rsync_backup@172.16.1.41::oldboy --password-file=/etc/rsync.password rsync -avz --exclude={a..g} /data1/ rsync_backup@172.16.1.41::oldboy --password-file=/etc/rsync.password
從文件中排除文件的命令如下:
rsync -avz --exclude-from=paichu.log /data1/ rsync_backup@172.16.1.41::oldboy --password-file=/etc/rsync.password
3)在服務器端指定排除參數(shù)的寫法是:在/etc/rsyncd.conf里加exclude=a b test/oldboy.txt參數(shù)及要排除的文件,不推薦在服務器端進行配置,不靈活。
3.3.3 主機之間數(shù)據(jù)無差異復制說明
要實現(xiàn)這種同步方式就要使用Rsync的--delete參數(shù)了。所謂的無差異復制,就是不管是拉取還是推送,都要保持兩邊的數(shù)據(jù)完全一致,如圖3-5所示。

圖3-5 Rsync無差異復制示意圖
1)本地推送式刪除示例如下。
mkdir null rsync -avzP --delete null/ /mnt/ #<==null為空,因此/mnt內(nèi)的數(shù)據(jù)都會被刪。
2)拉取數(shù)據(jù)無差異同步方式的命令如下。
rsync -avz --delete rsync_backup@172.16.1.41::backup /test/ --password-file=/ etc/rsync.password #<==BACKUP服務器端沒有的數(shù)據(jù),/test里有的都會刪除,和BACKUP模塊里的保持一致。
拉取方式表示遠程服務器端變化的文件,如刪除了文件,那么,本地客戶端的數(shù)據(jù)要保持和服務器端一致,即服務器端刪除了什么內(nèi)容,本地客戶端就會刪除什么內(nèi)容,始終和服務器端保持數(shù)據(jù)一致。
這個命令非常危險,使用不當會造成本地目錄及文件,甚至是/根目錄數(shù)據(jù)丟失。因此要特別注意小心使用。
3)推送數(shù)據(jù)無差異同步方式的命令如下。
rsync -avz --delete /test/ rsync_backup@172.16.1.41::backup --password-file=/ etc/rsync.password
推送方式表示本地客戶端變化的文件,如刪除了文件,那么,遠程服務器端的數(shù)據(jù)要保持和客戶端數(shù)據(jù)一致,即本地客戶端刪除什么內(nèi)容,服務器端就會刪除什么內(nèi)容,始終和客戶端保持數(shù)據(jù)一致。該命令同樣非常危險,使用不當會造成遠程服務器端目錄及文件丟失。因此要特別注意小心使用。
針對無差異同步--delete拉取和推送知識總結(jié)及生產(chǎn)場景應用。
1)Rsync推送企業(yè)工作場景:數(shù)據(jù)備份、上傳。
本地有什么,遠端就有什么,本地沒有的遠端有也要刪除,這會造成服務器端的目錄數(shù)據(jù)丟失,備份和上傳場景下一般不需要--delete功能,除非是像NFS實時復制數(shù)據(jù)到備份服務器上必須要保持兩邊一致的情形。
2)Rsync拉取企業(yè)工作場景:代碼發(fā)布、下載。
遠端有什么,本地(客戶端)就有什么,遠端沒有的本地有也要刪除。這會造成本地目錄數(shù)據(jù)丟失。適用于無差異復制的兩臺服務器之間,要求數(shù)據(jù)必須一致,且實時性又不是很高的情況,如兩臺負載均衡下面Web服務器之間的同步,或者高可用雙機配置之間的同步、NFS共享數(shù)據(jù)的實時復制等。Rsync無差異同步非常危險,而且有很多的替代方案,因此,生產(chǎn)場景沒有特殊的需求,應避免使用。寫了這么多內(nèi)容的目的是警告讀者,這個參數(shù)很危險,請慎用,切記。
3.3.4 Rsync斷點續(xù)傳和限速功能(了解)
1)Rsync在傳輸時支持大文件斷點續(xù)傳,相關參數(shù)如表3-12所示。
表3-12 Rsync大文件斷點續(xù)傳相關參數(shù)

默認情況下,利用rsync命令進行大文件數(shù)據(jù)傳輸時,不加上斷點傳輸參數(shù),在傳輸中斷后,會發(fā)現(xiàn)部分傳輸?shù)臄?shù)據(jù)信息會被刪除。加上斷點傳輸參數(shù),在傳輸中斷后,會發(fā)現(xiàn)部分傳輸?shù)臄?shù)據(jù)信息依舊存在。
rsync -avz --partial /tmp/data.txt 172.16.1.41:/backup
加上斷點傳輸指定目錄參數(shù),在傳輸中斷后,會發(fā)現(xiàn)部分傳輸?shù)臄?shù)據(jù)信息會保存在指定目錄中。
rsync -avz --partial-dir=/tmp/ /tmp/data.txt 172.16.1.41:/backup
測試結(jié)果省略。
2)rsync命令還可以實現(xiàn)限速傳輸,相關參數(shù)如表3-13所示。
表3-13 rsync命令限速傳輸相關參數(shù)

某上市公司,白天高峰期某DBA人員從數(shù)據(jù)庫服務器通過rsync將上百GB數(shù)據(jù)復制到備份服務器,導致數(shù)據(jù)庫服務器帶寬占滿,造成用戶無法訪問網(wǎng)站。其實可以利用rsync限速功能,將復制速度限制在剩余帶寬的1/3或者1/2,可能就不會出現(xiàn)上述故障了,當然,高峰期最好不要做大數(shù)據(jù)復制行為,這里利用限速功能模擬測試。
[root@oldboy backup]# dd if=/dev/zero of=test1 bs=1M count=128 記錄了128+0 的讀入 記錄了128+0 的寫出 134217728字節(jié)(134 MB)已復制,4.83399 秒,27.8 MB/秒 # 不限速的傳輸速率信息 [root@oldboy backup]# rsync -avzP /backup/ rsync://rsync_backup@172.16.1.41/ backup \ --password-file=/etc/rsync.password sending incremental file list ./ test1 134217728100% 83.97MB/s 0:00:01 (xfer#1, to-check=0/11) sent 130687 bytes received 30 bytes 10457.36 bytes/sec total size is 134217728 speedup is 1026.78 # 限速的傳輸速率信息 [root@oldboy backup]# rsync -avzP --bwlimit=100 /backup/ rsync://rsync_ backup@172.16.1.41/backup --password-file=/etc/rsync.password sending incremental file list ./ test1 134217728100% 67.74MB/s 0:00:01 (xfer#1, to-check=0/11) sent 130687 bytes received 30 bytes 15378.47 bytes/sec total size is 134217728 speedup is 1026.78 說明:貌似沒有起到什么效果,為什么呢,因為設置的限制速率已經(jīng)遠遠大于默認的傳輸速率,應該設置得 更小一些。 [root@oldboy backup]# rsync -avzP --bwlimit=1 /backup/ rsync://rsync_ backup@172.16.1.41/backup \--password-file=/etc/rsync.password sending incremental file list ./ test1 134217728100% 1.02MB/s 0:02:05 (xfer#1, to-check=0/11) sent 130687 bytes received 30 bytes 1001.66 bytes/sec total size is 134217728 speedup is 1026.78 說明:將設置的限速速率調(diào)小一些,傳輸限制的效果隨即顯示出來
- Linux系統(tǒng)架構(gòu)與運維實戰(zhàn)
- WordPress Mobile Web Development:Beginner's Guide
- Kali Linux滲透測試全流程詳解
- 嵌入式Linux應用開發(fā)菜鳥進階
- Joomla! 3 Template Essentials
- 蘋果OS X Mavericks 10.9應用大全
- 計算機系統(tǒng):基于x86+Linux平臺
- Delphi Programming Projects
- Linux軟件管理平臺設計與實現(xiàn)
- 鴻蒙操作系統(tǒng)設計原理與架構(gòu)
- bash shell腳本編程經(jīng)典實例(第2版)
- Linux集群之美
- Azure Resource Manager Templates Quick Start Guide
- Learning IBM Watson Analytics
- 操作系統(tǒng)之哲學原理第2版