4月20日學習筆記,Rsync數據復制


day33學習筆記(4月20日)

Rsync數據復制

Rsync服務概念特性

Rsync是一款開源的、快速的、多功能的、可實現全量及增量的本地或遠程數據同步備份的優秀工具。並且可以不進行改變原有數據的屬性信息,實現數據的備份遷移特性。Rsync軟件適用於unix/linux/windows等多種操作系統平台。 Rsync是一個快速和非常通用的文件復制工具。它能本地復制,遠程復制,或者遠程守護進程方式復制。它提供了大量的參數來控制其行為的各個方面,並且允許非常靈活的方式來實現文件的傳輸復制。它以其delta-transfer算法聞名。減少通過網絡數據發送數量,利用只發送源文件和目標文件之間的差異信息,從而實現數據的增量同步復制。

Rsync被廣泛用於數據備份和鏡像

,並且作為一種改進后的復制命令用於日常運維。

Rsync具備使本地和遠程兩台主機之間的數據快速復制遠程備份的功能,Rsync命令本身即可實現異地主機復制數據,功能類似scp又優於scp,scp每次都是全量備份,rsync可以實現增量拷貝(和scp一樣都是基於ssh服務傳輸),Rsync軟件還支持配置守護進程,實現異機數據復制。

增量復制是Rsync一特點,優於scp,cp命令。

Rsync實現如下功能

  • 本地數據同步復制,效果如cp
  • 遠程數據同步復制,如scp
  • 本地數據刪除,如rm
  • 遠程數據查看,如ls

Rsync軟件特性

  • 支持拷貝普通文件,特殊文件(link文件,設備文件)
  • 支持排除指定文件、目錄的同步功能(同步數據時,指定文件不同步)
  • 能夠保持原有文件所有屬性均不變(stat查看的狀態)
  • 實現增量復制(只復制變化的數據,數據傳輸效率極高)
  • 可以配合ssh、rcp、rsh等方式進行隧道加密文件傳輸(rsync本身不加密數據)
  • 可以通過socket(進行通信文件)傳輸文件和數據(c/s架構)
  • 支持匿名用戶模式傳輸

增量傳輸

Rsync軟件的增量備份是一大特點,在備份復制數據時,Rsync通過其quick cheek算法,僅復制文件(容量、最后修改時間變化)的文件或是目錄,也可以指定文件權限的變化復制,甚至可以復制一個文件里僅變化的內容,因此可以實現快速的備份復制數據。

Rsync在centos7系統上默認是3.x版本,效率更高,原理是一邊比對差異,一邊對差異的數據進行復制,比centos6上的Rsync 2.x更高效。

Rsync語法參數

Rsync命令參數詳解

在對rsync服務器配置結束以后,下一步就需要在客戶端發出rsync命令來實現將服務器端的文件備份到客戶端來。rsync是一個功能非常強大的工具,其命令也有很多功能特色選項,我們下面就對它的選項一一進行分析說明。Rsync的命令格式可以為以下六種:

  rsync [OPTION]... SRC DEST
  rsync [選項]  源數據  目標路徑
  
  rsync [OPTION]... SRC [USER@]HOST:DEST
  rsync [選項]   源數據  user@ip:目標路徑
  
  rsync [OPTION]... [USER@]HOST:SRC DEST
  rsync [選項]   user@ip: 源數據   目標路徑
  
  rsync [OPTION]... [USER@]HOST::SRC DEST
  rsync [選項]   user@ip::指定模塊源數據   目標路徑
  
  rsync [OPTION]... SRC [USER@]HOST::DEST
  rsync [選項]    源文件   user@ip::指定模塊目標路徑
  
  rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
  
  對應於以上六種命令格式,rsync有六種不同的工作模式:
  1)拷貝本地文件。當SRC和DES路徑信息都不包含有單個冒號":"分隔符時就啟動這種工作模式。如:rsync -a /data /backup
  2)使用一個遠程shell程序(如rsh、ssh)來實現將本地機器的內容拷貝到遠程機器。當DST路徑地址包含單個冒號":"分隔符時啟動該模式。如:rsync -avz *.c foo:src
  3)使用一個遠程shell程序(如rsh、ssh)來實現將遠程機器的內容拷貝到本地機器。當SRC地址路徑包含單個冒號":"分隔符時啟動該模式。如:rsync -avz foo:src/bar /data
  4)從遠程rsync服務器中拷貝文件到本地機。當SRC路徑信息包含"::"分隔符時啟動該模式。如:rsync -av root@172.16.78.192::www /databack
  5)從本地機器拷貝文件到遠程rsync服務器中。當DST路徑信息包含"::"分隔符時啟動該模式。如:rsync -av /databack root@172.16.78.192::www
    6)列遠程機的文件列表。這類似於rsync傳輸,不過只要在命令中省略掉本地機信息即可。如:rsync -v rsync://172.16.78.192/www

rsync參數的具體解釋如下:

-v, --verbose 詳細模式輸出
-q, --quiet 精簡輸出模式
-c, --checksum 打開校驗開關,強制對文件傳輸進行校驗
-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等於-rlptgoD
-r, --recursive 對子目錄以遞歸模式處理
-R, --relative 使用相對路徑信息
-b, --backup 創建備份,也就是對於目的已經存在有同樣的文件名時,將老的文件重新命名為~filename。可以使用--suffix選項來指定不同的備份文件前綴。
--backup-dir 將備份文件(如~filename)存放在在目錄下。
-suffix=SUFFIX 定義備份文件前綴
-u, --update 僅僅進行更新,也就是跳過所有已經存在於DST,並且文件時間晚於要備份的文件。(不覆蓋更新的文件)
-l, --links 保留軟鏈結
-L, --copy-links 想對待常規文件一樣處理軟鏈結
--copy-unsafe-links 僅僅拷貝指向SRC路徑目錄樹以外的鏈結
--safe-links 忽略指向SRC路徑目錄樹以外的鏈結
-H, --hard-links 保留硬鏈結     -p, --perms 保持文件權限
-o, --owner 保持文件屬主信息     -g, --group 保持文件屬組信息
-D, --devices 保持設備文件信息    -t, --times 保持文件時間信息
-S, --sparse 對稀疏文件進行特殊處理以節省DST的空間
-n, --dry-run現實哪些文件將被傳輸
-W, --whole-file 拷貝文件,不進行增量檢測
-x, --one-file-system 不要跨越文件系統邊界
-B, --block-size=SIZE 檢驗算法使用的塊尺寸,默認是700字節
-e, --rsh=COMMAND 指定使用rsh、ssh方式進行數據同步
--rsync-path=PATH 指定遠程服務器上的rsync命令所在路徑信息
-C, --cvs-exclude 使用和CVS一樣的方法自動忽略文件,用來排除那些不希望傳輸的文件
--existing 僅僅更新那些已經存在於DST的文件,而不備份那些新創建的文件
--delete 刪除那些DST中SRC沒有的文件
--delete-excluded 同樣刪除接收端那些被該選項指定排除的文件
--delete-after 傳輸結束以后再刪除
--ignore-errors 及時出現IO錯誤也進行刪除
--max-delete=NUM 最多刪除NUM個文件
--partial 保留那些因故沒有完全傳輸的文件,以是加快隨后的再次傳輸
--force 強制刪除目錄,即使不為空
--numeric-ids 不將數字的用戶和組ID匹配為用戶名和組名
--timeout=TIME IP超時時間,單位為秒
-I, --ignore-times 不跳過那些有同樣的時間和長度的文件
--size-only 當決定是否要備份文件時,僅僅察看文件大小而不考慮文件時間
--modify-window=NUM 決定文件是否時間相同時使用的時間戳窗口,默認為0
-T --temp-dir=DIR 在DIR中創建臨時文件
--compare-dest=DIR 同樣比較DIR中的文件來決定是否需要備份
-P 等同於 --partial
--progress 顯示備份過程
-z, --compress 對備份的文件在傳輸時進行壓縮處理
--exclude=PATTERN 指定排除不需要傳輸的文件模式
--include=PATTERN 指定不排除而需要傳輸的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 綁定到特定的地址
--config=FILE 指定其他的配置文件,不使用默認的rsyncd.conf文件
--port=PORT 指定其他的rsync服務端口
--blocking-io 對遠程shell使用阻塞IO
-stats 給出某些文件的傳輸狀態
--progress 在傳輸時現實傳輸過程
--log-format=formAT 指定日志文件格式
--password-file=FILE 從FILE中得到密碼
--bwlimit=KBPS 限制I/O帶寬,KBytes per second      
-h, --help 顯示幫助信息




 比較常用的組合參數
 rsync -avzP
-a    保持文件原有屬性
-v    顯示傳輸細節情況
-z    對傳輸數據壓縮傳輸
-P    顯示文件傳輸的進度信息
--delete 刪除那些DST中SRC沒有的文件
--bwlinmit  限制上傳的速度

Rsync工作方式

1本地數據傳輸

類似cp的復制,實現文件,目錄的增量復制。

2.遠程Shell數據傳輸

借助SSH服務在兩台服務器之間傳輸,沒有客戶端/服務端之分,兩台機器是相對的復制關系。

本地數據傳輸

本地linux機器內的數據傳輸
語法:
  rsync [OPTION]... SRC DEST
  rsync [選項]  源數據  目標路徑
  
示例:
登錄rsync-41虛擬機,安裝rsync
yum  install  rsync  -y

創建一個1G的測試文件,示范單個文件傳輸
cd  /opt 
mkdir   test1
dd  bs=100M   count=10  if=/dev/zero   of=/opt/test1
rsync  -avzP  /opt/1G.txt   /tmp

因為傳輸單個大文件會消耗磁盤的IO資源,可以使用--bwlimit參數限制單個大文件的傳輸速度
rsync  -avzP  --bwlimit=10  /opt/1G.txt   /tmp  #限制傳輸速度10M



!!!注意如上的區別
目錄后有/表示拷貝目錄下所有的子文件
目錄后沒有/表示整個目錄拷貝

# 復制/data下所有內容到/tmp
rsync -r /data/ /tmp/

# 復制/data整個文件夾到/tmp
rsync -r /data  /tmp   

無差異化同步
文件夾數據同步--delete參數,被同步的文件夾內容會被清空,拷貝的文件和源文件完全相同
[root@rsync-41 /tmp/tt]#ls  /opt/test1  /tmp/tt
/opt/test1:
1.txt  2.txt  3.txt  4.txt  5.txt

/tmp/tt:
a.log  b.log  c.log  d.log  e.log

rsync   -avzP  --delete /opt/test1/   /tmp/tt/

[root@rsync-41 /tmp/tt]#ls  /opt/test1  /tmp/tt
/opt/test1:
1.txt  2.txt  3.txt  4.txt  5.txt

/tmp/tt:
1.txt  2.txt  3.txt  4.txt  5.txt


遠程數據傳輸

遠程傳輸分為兩種情況【拉取|推送】

拉取:遠端服務器數據,拉取到本地

推送:本地數據發送給遠程服務器

拉取pull

語法
rsync  option               user@host:src                   dest
命令        可選參數        用戶名@主機ip:源路徑            本地路徑

示例:
登錄nfs-31虛擬機,安裝rsync
yum  install  rsync  -y

將機器rsync-41的/opt/test1目錄拷貝到本機/opt下
rsync  -avzP  root@10.0.0.41:/opt/test1    /opt

將機器rsync-41的/opt/test1目錄下的文件拷貝到本機/opt下
rsync  -avzP  root@10.0.0.41:/opt/test1/    /opt

推送push

語法
rsync        option        src            user@host:dest
命令        參數            本地路徑        用戶@主機ip:目的路徑

示例
登錄rsync41
用ip形式、再用主機名形式
添加無差異化參數,該參數,慎用!

rsync -avzP  --delete  /root/    root@172.16.1.31:/tmp/

另外一種寫法
rsync -avzP  --delete  /root/    root@nfs-31:/tmp/

#注意:傳輸過程不限速導致帶寬被占滿,使用--bwlimit=50限速
#注意:如果/和一個空目錄進行完全同步,那么效果和刪根一樣

遠程傳輸 nfs-31下的 /tmp/2G.log   備份到  rsync-41的/opt下
rsync -avzP   /tmp/2G.log   root@172.16.1.41:/opt

遠程備份文件,且改名
[root@nfs-31 /tmp]#rsync -avzP   /tmp/1G.log   root@172.16.1.41:/opt/1G.logggggggggggggggggggggg

遠程傳輸 nfs-31下的 /tmp/2G.log   備份到  rsync-41的/opt下,且是無差異化備份
等於清空原有/opt下的數據

rsync -avzP --delete   /tmp/1G.log   root@172.16.1.41:/opt/1G.log

Rsync服務模式

為什么需要服務模式

​ Rsync 借助 SSH 協議同步數據存在的缺陷:
​ 1.使用系統用戶(不安全) /etc/passwd
​ 2.使用普通用戶(會導致權限不足情況)
​ 3.守護進程傳輸方式: rsync 自身非常重要的功能(不使用系統用戶,更加安全)

服務端配置

1、安裝rsync
yum install rsync -y

2、修改配置文件
uid = rsync
gid = rsync
fake super = yes # 無需讓rsync以root身份運行即可保存文件完整屬性
use chroot = no
max connections = 200
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 = 192.168.178.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password

[backup]
comment = This is  backup!
path = /backup/

[data]
comment = this is secord backup dir,to website data..
path = /data

------------------------------------------------------------------

【rsyncd.conf參數解釋】

配置參數 參數說明
uid = rsync 指定rsync服務運行的時候,向磁盤進行讀取和寫入操作的操作者
gid = rsync 指定rsync服務運行的時候,向磁盤進行讀取和寫入操作的操作者
use chroot = no 進行數據同步存儲時,安全相關參數,默認內網進行數據同步,可以關閉
max connections = 200 定義向備份服務器進行數據存儲的並發連接數
timeout = 300 定義與備份服務器建立的網絡連接,在多長時間沒有數據傳輸時,就釋放連接
pid file = /var/run/rsyncd.pid 服務程序運行時,會將進程的pid信息存儲到一個指定的pid文件中
lock file = /var/run/rsync.lock 定義鎖文件,主要用於配合max connections 參數,當達到最大連接就禁止繼續訪問
配置參數 參數說明
log file = /var/log/rsyncd.log 定義服務的日志文件保存路徑信息
[backup] 指定備份目錄的模塊名稱信息
path = /backup 指定數據進行備份的目錄信息
ignore errors 在進行數據備份傳輸過程過程中,忽略一些I/O產生的傳輸錯誤
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] 指定模塊名稱,便於日后維護
path=/backup 在當前模塊中,Daemon使用的文件系統或目錄,注意目錄權限和配置文件權限一直,防止讀寫出問題
#exclude= 排除文件或目錄,相對路徑
[xxxx] 還可以添加其他模塊

【配置數據備份的目錄】

1.根據rsyncd.conf中定義的目錄,創建目錄、用戶
useradd   rsync   -s  /sbin/nologin  -M  
mkdir -p /data/   /backup/
chown -R rsync.rsync /backup/
chown -R rsync.rsync /data/

2.配置用於Rsync復制的賬戶、密碼、文件權限,在Rsync備份服務端創建

echo  'rsync_backup:123123'  >  /etc/rsync.password   #客戶端向rsync服務器推送數據用的賬號密碼

chmod 600 /etc/rsync.password  #這一步,非常重要,rsync要求降低密碼文件的權限,且必須是600

檢查密碼文件,權限
[root@rsync-41 /opt]#ll /etc/rsync.password
-rw------- 1 root root 20 Apr 20 18:00 /etc/rsync.password
[root@rsync-41 /opt]# cat /etc/rsync.password
rsync_backup:123123

3.啟動rsync服務,開機自啟
systemctl    start rsyncd
systemctl    enable rsyncd
systemctl    status rsyncd

4.檢查Rsync服務進程、端口
ps -ef|grep 'rsync' | grep -v 'grep'
netstat -tunlp|grep rsync

Rsync客戶端(nfs01)配置

1.確認rsync命令安裝
2.創建和rsync服務端連接的賬戶密碼文件,且授權
3.注意區分Rsync客戶端要和服務端的配置

配置過程

1.安裝rsync
yum install rsync -y

2.創建密碼文件,和服務端相同
 echo "123123" > /etc/rsync.password

3.授權文件
chmod 600 /etc/rsync.password

4.驗證文件密碼、權限
[root@nfs-31 /opt]#cat /etc/rsync.password
123123
[root@nfs-31 /opt]#ll /etc/rsync.password
-rw------- 1 root root 7 Apr 20 18:25 /etc/rsync.password

5.配置特殊變量RSYNC_PASSWORD,可以替代密碼文件
export RSYNC_PASSWORD=123123    #臨時生效
echo "export RSYNC_PASSWORD=123123" >> /etc/bashrc    #永久開機生效驗證密碼變量

驗證密碼變量
[root@nfs-31 /opt]#tail -1 /etc/bashrc
export RSYNC_PASSWORD=123123
[root@nfs-31 /opt]#echo $RSYNC_PASSWORD
123123

測試數據同步


推送:客戶端同步文件給服務端

1.從客戶端推送 /opt目錄 同步到服務端Rsync指定的目錄(/bakcup)下
[root@nfs-31 /opt]#rsync -avzP --password-file=/etc/rsync.password  /opt  rsync_backup@10.0.0.41::backup
sending incremental file list
opt/
opt/hehe/

sent 85 bytes  received 24 bytes  218.00 bytes/sec
total size is 0  speedup is 0.00

選項解釋
-avzP /opt
-a  保持文件原有屬性
-v    顯示傳輸細節情況
-z    對傳輸數據壓縮傳輸
-P    顯示文件傳輸的進度信息
/opt  要推送的本地目錄,注意/opt/ 表示推送該目錄下內容

--password-file=/etc/rsync.password   #指定密碼文件

rsync_backup@10.0.0.41::backup
# 驗證rsync服務端參數 grep 'auth user' /etc/rsyncd.conf
rsync_backup    #rsync同步數據的虛擬認證用戶 

拉取:從服務器端同步文件或目錄到客戶端

把rsync服務端的備份目錄中的數據,拷貝到客戶端的某個目錄

1.在客戶端執行,拷貝rsync-41機器中的數據到本機/tmp
[root@nfs-31 /opt]#rsync  -avzP --password-file=/etc/rsync.password  rsync_backup@172.16.1.41::backup  /tmp 
receiving incremental file list
./
opt/
opt/hehe/

sent 35 bytes  received 116 bytes  302.00 bytes/sec
total size is 0  speedup is 0.00


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM