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