- 跟老男孩學Linux運維:高性能Web集群實踐(上)
- 老男孩
- 1245字
- 2019-12-20 11:59:33
3.2 Rsync工作方式介紹與實踐
Rsync有3種傳輸數據模式,具體介紹如下。
1.本地(Local)數據傳輸模式
Rsync的本地數據傳輸模式,很類似于cp本地復制命令,可以實現文件、目錄的移動備份等功能,所不同的是Rsync有增量復制的功能。
2.遠程Shell數據傳輸模式
遠程Shell數據傳輸模式一般是借助通道(如SSH)在兩臺服務器之間進行復制數據,這兩臺服務器之間是對等的,沒有客戶端與服務端之分,整個過程類似于scp遠程復制命令,所不同的是Rsync有增量復制的功能,但缺少scp的加密復制的功能。
3.守護進程(Daemon)傳輸模式
守護進程傳輸模式是在客戶端與服務端之間進行數據復制的,通常需要服務端部署守護進程服務,然后在客戶端執行命令,實現數據的拉取和推送復制。
以上幾種Rsync的工作方式,可以通過man rsync幫助或者查看官方手冊獲得。下面分別對上面3種模式進行詳細說明,幫助初學者掌握Rsync軟件工具的應用。
3.2.1 本地數據傳輸模式
1.本地數據傳輸模式語法
了解了上文介紹的本地數據傳輸模式以后,下面來了解下該模式的命令語法,如表3-1所示。
表3-1 本地模式命令語法格式說明

2.本地數據傳輸模式實踐
(1)作為本地復制命令應用(類似cp命令)
實例一:利用rsync命令實現本地文件的復制,命令如下。
[root@backup ~]# cd /tmp/ [root@backup tmp]# ls [root@backup tmp]# rsync /etc/hosts /tmp/ #<==實現hosts文件本地復制。 [root@backup tmp]# ls hosts 說明:根據以上操作信息,實現了本地拷貝文件操作。
實例二:利用rsync命令實現復制本地目錄,命令如下。
[root@backup tmp]# mkdir /oldboy_dir -p #<==創建測試目錄。 [root@backup tmp]# touch /oldboy_dir/file{1..5}.txt #<==在測試目錄中,創建5 個測試文件。 [root@backup tmp]# ls /oldboy_dir/ file1.txt file2.txt file3.txt file4.txt file5.txt [root@backup tmp]# rsync /oldboy_dir /tmp/ #<==直接復制目錄會顯示報 錯信息。 skipping directory oldboy_dir [root@backup tmp]# rsync -r /oldboy_dir /tmp/ #<==復制目錄需要加入-r 參數。 [root@backup tmp]# ls hosts oldboy_dir #<==本地目錄復制成功。 [root@backup tmp]# ls oldboy_dir/ file1.txt file2.txt file3.txt file4.txt file5.txt #<==測試目錄中數據也復制 成功。 說明:根據以上操作信息,實現了本地拷貝目錄操作。
(2)作為刪除數據命令應用(類似rm命令)
實例一:利用rsync命令的刪除功能清空文件內容,命令如下。
[root@backup tmp]# mkdir /opt/null -p #<==創建一個空目錄。 [root@backup tmp]# rsync -r --delete /opt/null/ /tmp/ #<==清除/tmp下所有內容。 [root@backup tmp]# ls #<==已刪除。 說明:利用上面所學的本地復制命令結合刪除功能參數--delete,對tmp目錄進行清除。 提示:在使用--delete刪除功能參數時,必須結合-r或-d參數使用。
實例二:利用rsync命令的刪除功能清空文件內容,命令如下。
[root@backup tmp]# echo "www.oldboyedu.com" >file1.txt #<==生成測試文件。 [root@backup tmp]# cat file1.txt www.oldboyedu.com [root@backup tmp]# touch null.txt #<==創建空文件null.txt,利用空文件實現對相應file1.txt文件內容的清除。。 [root@backup tmp]# rsync -r --delete /tmp/null.txt file1.txt #<==利用rsync命令刪除功能實現對文件數據信息清除。 [root@backup tmp]# cat file1.txt #<==數據信息已清除
通過以上實踐操作,相信大家已經對rsync命令數據刪除功能有所了解,以上實踐操作只是利用--delete參數與本地復制命令結合,實現本地數據的刪除。同理,可利用--delete參數與遠程復制命令結合,實現對遠程數據的刪除,這部分內容見后續章節。
提示:在使用rsync命令對目錄數據進行本地或遠程復制時,目錄名稱后面是否加“/”,產生的復制效果是不一樣的。目錄后面不加“/”,會將/oldboy_dir目錄及目錄下面的文件內容一并復制到tmp目錄中;如果目錄后面加“/”,會將/oldboy_dir目錄下面的文件內容復制到tmp目錄中,但oldboy_dir目錄本身沒有被復制。
(3)作為查詢數據命令應用(類似ls命令)
實例:利用rsync命令的查詢功能查看文件和目錄信息
[root@backup tmp]# rsync /etc/hosts #<==查詢文件信息。 -rw-r--r-- 3322019/04/10 22:07:43 hosts [root@backup tmp]# rsync /etc drwxr-xr-x 8,1922019/04/11 20:42:54 etc #<==查詢目錄信息。 說明:根據以上操作信息,實現了查詢數據信息功能。
通過以上實踐操作,相信大家已經對rsync命令的查詢數據功能有所了解。
3.2.2 遠程Shell數據傳輸模式
1.遠程Shell數據傳輸模式語法
遠程Shell數據傳輸模式分為拉取和推送兩種模式,拉取是指從遠端服務器把數據拉取到本地服務器;推送是指把數據從本地服務器推送到遠端服務器,這兩種傳輸方式的語法格式如下。
(1)拉取(Pull)
遠程Shell傳輸數據拉取語法說明如表3-2所示。
表3-2 拉取模式語法格式說明

(2)推送(Push)
遠程Shell傳輸數據推送語法說明如表3-3所示。
表3-3 推送模式語法格式說明

注意:Pull和Push的區別就是[USER@]HOST:SRC...和DEST位置對調而已。
根據以上語法格式信息畫圖對推拉概念進行說明,如圖3-2所示。

圖3-2 Rsync數據傳輸推拉原理圖
2.遠程Shell數據傳輸模式實踐
實踐一:利用拉取模式從遠端服務器把/etc/hosts復制到本地/tmp。具體實現過程如下:
[root@nfs01~]# rsync -av -e 'ssh -p 22' root@172.16.1.41:/etc/hosts /tmp #<==借助-e參數指定數據傳輸方式為ssh隧道加密傳輸,/tmp目錄為當前命令行的本地目錄。 #<==如果ssh端口是默認的22,命令中的-e 'ssh -p 22’部分可以省略。 Are you sure you want to continue connecting (yes/no)? yes #<==首次需輸入yes。 Warning: Permanently added '172.16.1.41' (ECDSA) to the list of known hosts. root@172.16.1.41's password: #<==輸入41服務器的root密碼。 receiving incremental file list hosts sent 43 bytes received 243 bytes 44.00 bytes/sec total size is 158 speedup is 0.55 說明:利用服務器B作為參照服務器,將遠程服務器A(172.16.1.41)上的數據進行拉取同步。
實踐二:利用推送模式從本地服務器把/etc/hosts復制到遠端主機的/tmp。具體實現過程如下:
[root@nfs01~]# rsync -av /etc/hosts root@172.16.1.41:/tmp #<==省略-e參數,/tmp目錄為遠程服務器的目錄,/etc/hosts為本地文件。 root@172.16.1.41's password: #<==輸入nfs01服務器的root密碼。 sending incremental file list hosts sent 243 bytes received 35 bytes 61.78 bytes/sec total size is 158 speedup is 0.57 說明:利用服務器nfs01作為參照服務器,將本地服務器nfs01上的數據進行推送同步。
通過以上兩個實踐操作過程,相信讀者已經熟悉推和拉的概念與作用了。
提示:
1)采用遠程Shell數據傳輸模式,每次都需要輸入遠程主機密碼信息,無法實現免交互;因此需要配合SSH key免密碼登錄來完成數據免交互同步。
2)該復制使用系統用戶進行存在安全隱患,而使用普通用戶進行又會導致權限不足。
3)實際工作中守護進程傳輸方式是更重要的方式。
3.2.3 守護進程傳輸模式
1.守護進程傳輸模式語法
守護進程傳輸模式是在客戶端與服務端之間進行數據復制的,通常需要服務端部署守護進程服務(后文會講解部署),然后在客戶端執行命令,實現數據的拉取和推送復制,即把數據推送到服務器端,或者從服務器端把數據拉取到本地客戶端,這兩種傳輸方式的客戶端命令又有不同的語法格式,具體說明如下。
1)拉取模式的兩種語法格式說明如表3-4、表3-5所示。
表3-4 第一種拉取模式語法格式說明【筆者推薦】

表3-5 第二種拉取模式語法格式說明

2)推送模式的兩種語法格式說明如表3-6、表3-7所示。
表3-6 第一種推送模式語法格式說明

通過語法說明不難發現,拉取和推送數據傳輸模式擁有的兩種語法格式作用是完全相同的,可以根據用戶自身命令語法記憶習慣選擇其一,本書以第一種拉取和推送模式為例進行講解。
通過對守護進程傳輸語法的介紹,可以看出其應用方法與遠程Shell傳輸模式類似,但是如果想采用守護進程傳輸模式進行實際復制傳輸數據,還必須要額外部署Rsync Daemon服務才行,下面會對守護進程傳輸模式的部署過程進行說明。
2.守護進程傳輸模式實踐
(1)部署前準備工作
第一步:部署環境準備
考慮到很多讀者沒有實際的生產環境,本文使用VMware虛擬機環境下Linux主機來進行試驗,和生產環境的真實服務器部署幾乎沒區別。
本書采用的CentOS7.6系統相關信息如下:
[root@nfs01~]# cat /etc/redhat-release #<==查看操作系統信息。 CentOS Linux release 7.6.1810 (Core) [root@nfs01~]# uname -r #<==查看內核信息。 3.10.0-957.1.3.el7.x86_64 [root@nfs01~]# uname -m #<==查看系統是32位還是64位。 x86_64 [root@nfs01~]# rpm -qa rsync #<==Rsync軟件信息。 rsync-3.1.2-4.el7.x86_64 說明:Rsync軟件默認系統已經安裝,若未安裝可以通過yum命令進行安裝。
網絡拓撲配置參見表3-8。
表3-8 Rsync守護進程模式網絡拓撲地址規劃表

第二步:具體需求
要求在Rsync備份服務器(BACKUP)上以rsync守護進程的方式部署Rsync服務,使得所有Rsync節點客戶端主機,可以把本地數據通過rsync命令的方式備份數據到數據備份服務器Rsync服務器上。本例的客戶端服務器以Web01服務器、NFS服務器為例講解說明。
第三步:備份數據架構拓撲
參照圖3-3進行Rsync守護進程模式服務器架構部署搭建,并且以遠程數據同步方式由客戶端節點向服務端推送數據。

圖3-3 Rsync服務守護進程模式部署架構圖

圖3-4 R s y n c服務守護進程客戶端訪問原理
(2)Rsync服務器端部署
表3-9為Rsync守護進程操作步驟以及形象記憶比喻。
表3-9 Rsync守護進程操作步驟說明

1)配置rsyncd.conf。
提示:Rsync守護進程模式服務需要部署在BACKUP服務器上,即172.16.1.41服務器上。
編寫rsyncd.conf單模塊配置文件,命令如下。
#說明:增加如下配置,/etc/rsyncd.conf為默認的Rsync服務的配置文件路徑及文件名, #特別注意,是rsyncd.conf不是rsync.conf。 cp /etc/rsyncd.conf{, .ori} cat >/etc/rsyncd.conf<<EOF #rsync_config_______________start #created by oldboy #site: http://www.oldboyedu.com uid = rsync gid = rsync fake super = yes #<==CentOS7比CentOS6增加的參數。 use chroot = no 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/ EOF # hosts allow和hosts deny不要同時存在,否則可能導致功能不生效。 # 如果使用普通用戶Rsync,則fake super = yes需要加上,否則系統會報錯(CentOS7特有)。
表3-10所示為Rsync服務配置文件常用參數說明。
表3-10 Rysnc服務配置文件參數說明

提示:
1)模塊中的參數項可以拿到全局配置中(放到模塊前面)使用。
2)以上配置參數為老男孩經常使用的參數,正常情況下掌握這些已足夠。
3)更多參數可執行man rsyncd.conf查看。
2)配置用于數據備份的目錄。
如果配置文件里配置了“path = /backup”,這里的/backup備份目錄默認不存在,創建命令如下。
[root@backup ~]# useradd rsync -s /sbin/nologin -M #<==創建管理備份目錄的用戶。 [root@backup ~]# mkdir -p /backup #<==創建BACKUP備份目錄 [root@backup ~]# chown -R rsync.rsync /backup #<==授權Rsync用戶和組管理 /backup用戶。
3)配置用于Rsync復制的賬號、密碼及賬號文件權限。
在Rsync服務端創建用于在Rsync客戶端與服務端進行驗證的賬號和密碼,并將其寫入文件。
創建服務認證賬號和密碼文件的命令如下。
[root@backup ~]# echo "rsync_backup:oldboy" >/etc/rsync.password #<==將賬號和密碼寫入文件。 [root@backup ~]# chmod 600 /etc/rsync.password #<==文件必須為600權限。 #說明:其中rsync_backup:oldboy中的rsync_backup為同步傳輸用到的虛擬賬號,這個賬號僅 為Rsync服務的認證賬號,不需要是系統賬號,也不需要創建該賬號。后面的oldboy為密碼, 不超過8位。賬號和密碼中間用冒號分隔。
檢查認證文件信息的命令如下。
[root@backup ~]# cat /etc/rsync.password #<==操作完檢查是個好習慣。 rsync_backup:oldboy #<==注意賬號密碼格式。 [root@backup ~]# ll /etc/rsync.password -rw-------1 root root 40 2月 8 23:12 /etc/rsync.password #<==600權限。
4)啟動Rsync服務以及檢查確認。
Rsync服務啟動、開機自啟動及檢查等操作過程的命令如下。
[root@backup ~]# systemctl start rsyncd #<==啟動Rsyncd,也可以使用rsync --daemon啟動。 [root@backup ~]# systemctl enable rsyncd #<==設置開機自啟動。 [root@backup ~]# systemctl status rsyncd #<==檢查啟動狀態和開機自啟動狀態。 ● rsyncd.service - fast remote file copy program daemon Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2019-04-12 19:44:31 CST; 17s ago Main PID: 7772 (rsync) CGroup: /system.slice/rsyncd.service └—7772 /usr/bin/rsync --daemon --no-detach [root@backup ~]# ps -ef|grep rsync|grep -v grep #<==檢查進程。 root 7450 1 0 19:33 ? 00:00:00 rsync --daemon [root@backup ~]# netstat -lntup|grep rsync #<==檢查Rsync服務應用的端口是否 已處于監聽狀態。 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 7450/rsync tcp6 0 0 :::873 :::* LISTEN 7450/rsync # 說明:以上操作均是Rsync服務端本地檢查服務與端口是否正常。 # 執行lsof -i :873也可以檢查端口。
(3)Rsync客戶端操作過程
Rsync客戶端操作過程如下:
? 確認是rsync命令是否存在。
? 創建與Rsync服務端建立連接所需的密碼文件,并進行授權,權限為600。
配置Rsync賬號及賬號文件權限
以下內容信息為Rsync客戶端認證文件配置信息,注意要與服務端的配置區別。客戶端172.16.1.31(nfs01)和172.16.1.7(web01)分別做如下操作,此處僅利用NFS01主機進行演示說明,Web01主機操作相同,不再贅述。
客戶端的配置方法有以下兩個。
方法一:配置密碼文件方式(常用)
[root@nfs01~]# echo "oldboy" >/etc/rsync.password #<==這里oldboy密碼必須和 服務器端相同。 #<==客戶端密碼認證文件里僅配置了密碼,不需要賬號了。這是與服務端的區別。 [root@nfs01~]# chmod 600 /etc/rsync.password #<==必須為600權限。 [root@nfs01~]# cat /etc/rsync.password #<==驗證認證文件配置信息是否 正確。 oldboy #<==必須和服務器端密碼信息 相同。 [root@nfs01~]# ll /etc/rsync.password #<==驗證認證文件權限信息是否 正確。 -rw-------1 root root 7 2月 7 16:48 /etc/rsync.password
方法二:配置特殊變量RSYNC_PASSWORD
[root@nfs01~]# export RSYNC_PASSWORD=oldboy #<==臨時生效配置。 [root@nfs01~]# echo ' export RSYNC_PASSWORD=oldboy' >>/etc/bashrc #<==永久生效配置。 [root@nfs01~]# tail -1 /etc/bashrc export RSYNC_PASSWORD=oldboy [root@nfs01~]# . /etc/bashrc [root@nfs01~]# echo $RSYNC_PASSWORD oldboy 提示:采用環境變量的方式要注意將來使用定時任務執行rsync命令備份時要重新定義這個密碼變量。
至此,Rsync守護進程方式服務端和客戶端的配置大功告成。
(4)測試數據同步效果
1)推送:從客戶端同步文件或目錄到服務器端。
從客戶端推送/etc目錄到服務器端Rsync指定的目錄(這里為/backup)下,
[root@nfs01~]# rsync -avzP /etc rsync_backup@172.16.1.41::backup --password- file=/etc/rsync.password building file list ... 1740 files to consider ...中間輸出省略 ...... etc/yum/pluginconf.d/fastestmirror.conf 143 100% 0.46kB/s 0:00:00 (xfer#992, to-check=0/1740) sent 5557304 bytes received 26328 bytes 587750.74 bytes/sec total size is 53434678 speedup is 9.57 [root@nfs01~]# export RSYNC_PASSWORD=oldboy #<==如果前文使用了方法二,此步可省。 [root@nfs01~]# rsync -avzP /etc rsync_backup@172.16.1.41::backup #<==省略冗長的密碼文件參數。 sending incremental file list sent 54,970 bytes received 646 bytes 111,232.00 bytes/sec total size is 31,237,780 speedup is 561.67
這時我們查看服務器端指定的Rscyn備份目錄/backup,發現已經有了etc目錄及文件。
[root@backup ~]# ls /backup/ etc [root@backup ~]# du -sh /backup/ 35M /etc
以上同步傳輸命令拆解簡要說明如下。
rsync -avzP /etc rsync_backup@172.16.1.41::backup/ --password-file=/etc/ rsync.password # -avzP /etc解釋說明。 -a #<==保持文件原有屬性的若干參數。 -z #<==對傳輸的數據進行壓縮傳輸。 -v #<==是指顯示出詳細的傳輸情況。 -P --progress #<==顯示文件傳輸過程中的進度信息。 /etc #<==要推送的本地目錄。 # rsync_backup@172.16.1.41::oldboy/解釋說明。 rsync_backup #<==rsync同步數據的虛擬認證用戶。 @172.16.1.41::backup #<==為要推送的目的地的(Rsync服務端)IP地址及模塊名稱。 說明:IP和模塊名稱之間有兩個冒號,且雙冒號后的backup是/etc/rsyncd.conf配置文件中的 [模塊名]中的模塊名,而非目錄名。 #--password-file=/etc/rsync.password解釋說明。 --password-file #<==客戶端本地密碼文件,可用環境變量RSYNC_PASSWORD替代。
2)拉取:從服務器端同步文件或目錄到客戶端。
從服務器端Rsync指定的目錄下拉取所有文件到本地客戶端目錄/opt。執行命令如下。
rsync -avz rsync_backup@172.16.1.41::backup /opt/ --password-file=/etc/rsync. password
還可以拉取或推送模塊目錄下的指定目錄或文件,以下為拉取命令。
[root@nfs01 ~]# rsync -vzrtopg rsync_backup@172.16.1.41::backup/etc/hosts / opt \ --password-file=/etc/rsync.password
(5)Rsync客戶端命令參數選項
之前內容中已經看到了很多rsync命令參數,現在就來詳細了解一下rsync命令的同步參數選項,徹底熟悉一下這些參數,特別強調,是Rsync客戶端命令的參數。
常用參數選項說明如表3-11所示。
表3-11 Rsync客戶端命令對應的常用參數說明表
