官术网_书友最值得收藏!

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客戶端命令對應的常用參數說明表

主站蜘蛛池模板: 于都县| 高台县| 双桥区| 若尔盖县| 林甸县| 石渠县| 若羌县| 和林格尔县| 静乐县| 青浦区| 孝感市| 恩平市| 弥渡县| 横山县| 玛曲县| 屏山县| 赤城县| 定州市| 平泉县| 务川| 东城区| 淳化县| 临桂县| 九江县| 襄樊市| 平阴县| 襄汾县| 阿拉尔市| 潼关县| 南京市| 四会市| 报价| 永兴县| 灌南县| 尼勒克县| 宝应县| 井研县| 环江| 安溪县| 石河子市| 获嘉县|