Rsync簡介
什麼是rsync?
Rsync是一款開源的、快速的、多功能的、可實現全量及增量的本地或遠端資料同步備份的優秀工具。Rstync軟體適用於unix/linux/windows等多種作業系統平臺。
Rsync英文全稱為Remotesynchronization,即遠端同步。從軟體的名稱就可以看出來,Rsync具有可使本地和遠端兩臺主機之間的資料快速複製同步映象、遠端備份的功能,這個功能類似ssh帶的scp命令,但又優於scp命令的功能,scp每次都是全量拷貝,而rsync可以增量拷貝。當然,Rsync還可以在本地主機的不通分割槽或目錄之間全量及增量的複製資料,這又類似cp命令,但同樣也優於cp命令,cp每次都是全量拷貝,而rsync可以增量拷貝。此外,利用Rsync還可以實現刪除檔案和目錄功能,這又相當於rm命令。
一個rsync相當於scp,cp,rm,並且優於他們每一個命令。
在同步備份資料時,預設情況下,Rsync通過其獨特的”quick check”演算法,它僅同步大小或者最後修改時間發生變化的檔案或目錄,當然也可以根據許可權,屬主等屬性的變化同步,但需要制定相應的引數,甚至可以實現只同步一個檔案裡有變化的內容部分,所以,可以實現快速的同步備份資料。
Rsync2.x和rsync3.x差異
# CentOS5,rsync2.x對比方法,把所有的檔案對比一遍,然後進行同步。
# CentOS6,rsync3.x對比方法,一邊對比差異,一邊對差異的部分進行同步。
rsync特性
# 支援拷貝特殊檔案如連結檔案,裝置等。
# 可以有排除指定檔案或目錄同步的功能,相當於打包命令tar的排除功能。
# 可以做到保持原始檔或目錄的許可權、時間、軟硬連結、屬主、組等所有屬性均不改變-p。
# 可以實現增量同步,既只同步發生變化的資料,因此資料傳輸效率很高。
# 可以使用rcp,rsh,ssh等方式來配合傳輸檔案(rsync本身對資料不加密)。
# 可以通過sockert(程式方式)傳輸檔案和資料(服務端和客戶端)。
# 支援匿名或認證(無需系統使用者)的程式模式傳輸,可實現方便安全的進行資料備份及映象。
# 注意:需要注意拷貝的時候源目錄加“/”和不加“/”的區別(加“/”表示只拷貝該目錄之下的檔案;不加“/”表示連該目錄一起拷貝)
rsync應用場景
定時備份
# 可以通過crond + rsync 來實現
實時備份
# 可以通過inotify(sersync)+ rsync來實現
inotify使用
作為客戶端命令,常用引數如下
inotify命令引數
# -avz --多個引數的集合
# -v, --verbose 詳細模式輸出,傳輸時的進度等資訊
# -z, --compress 傳輸時進行壓縮以提高傳輸效率,--compress-level=NUM可按級別壓縮。
# -a,--archive 歸檔模式,表示以遞迴方式傳輸檔案,並保持所有檔案屬性,等於-rtopgDl
# -r,--recursive 對子目錄以遞迴模式,即目錄下所有目錄有同樣傳輸
# -t,--times,保持檔案時間資訊
# -o,--owner 保持檔案屬主資訊
# -p,--perms 保持檔案許可權
# -g,--group 保持檔案屬組資訊
# -P,--progress 顯示同步的過程及傳世時的進度等資訊(大寫的P)
# -D,devices 保持裝置檔案資訊
# -l,--links 保持軟連結
# -e,--rsh=COMMAND 使用的通道協議,指替代rsh的shell程式。例如:ssh
# -exclude=PATTERN指排斥不需要傳輸的檔案模式
# --bwlimit=RATE 限速,預設是以kbit/s為單位
# --delete --刪除(本地沒有,遠端也沒有),讓目標目錄SRC和源目錄資料DST一致,適用於兩個目錄完全一樣
innotify的三種工作模式之本地模式
Rsync的本地模式,即將本地系統的檔案或目錄從一個目錄移動到另外一個目錄中,相當於一個系統命令來使用(不常用)。
命令格式
# rsync [OPTION...]SRC... [DEST]
Example
[root@jenkins data]# echo 1234 > test1.txt
[root@jenkins data]# ls
test1.txt
[root@jenkins data]# rsync /data/test1.txt /data/test2.txt
[root@jenkins data]# cat /data/test2.txt
1234
innotify的三種工作模式之shell模式
Rsync的遠端shell模式,即將本地系統檔案或目錄從一臺伺服器傳輸向另外一臺伺服器,類似於scp命令。既可以推送資料到其他伺服器,也可以下拉檔案到本地。(該模式也不常用)
命令格式
# Pull: rsync[OPTION...] [USER@]HOST:SRC... [DEST]
# Push: rsync[OPTION...] SRC... [USER@]HOST:DEST
Example: 將一個檔案傳輸到另一臺伺服器
[root@client data]# rsync -avz /data/test1.txt root@39.108.140.0:/root/
root@39.108.140.0's password:
sending incremental file list
test1.txt
sent 97 bytes received 35 bytes 37.71 bytes/sec
total size is 5 speedup is 0.04
[root@server ~]# cat test1.txt
1234
Example: 將一臺主機的檔案下載到本地
[root@client data]# rsync -avz 39.108.140.0:/root/test1.txt /data/test3.txt
root@39.108.140.0's password:
receiving incremental file list
test1.txt
sent 43 bytes received 97 bytes 56.00 bytes/sec
total size is 5 speedup is 0.04
[root@client data]# cat test3.txt
1234
加密傳輸(隧道傳輸)
Rsync的傳輸協議預設是不加密的明文傳輸,如果有加密傳輸檔案的需求,可以自定義加密管道管道協議。使用引數:-e來指定相應的管道協議。
Example: 跨主機加密傳輸檔案,指定ssh協議
[root@client data]# rsync -avz /etc/hosts -e 'ssh -p 22' root@39.108.140.0:
root@39.108.140.0's password:
sending incremental file list
sent 43 bytes received 12 bytes 22.00 bytes/sec
total size is 211 speedup is 3.84
# -e 指定加密協議以及協議埠號
限速傳輸
Rsync的傳輸預設是不限速的,傳輸時可能會佔用很大的網路頻寬,影響業務正常使用。可以使用引數:-bwlimit來限制傳輸時的網路頻寬
Example: 傳輸時限速為1M/s
[root@client data]# dd if=/dev/zero of=test bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00811283 s, 1.3 GB/s
[root@client data]# seq 10 | xargs -i dd if=/dev/zero of={}.dat bs=1024 count=1
# 不限速
[root@client data]# rsync -avz /data/test -e 'ssh -p 22' root@39.108.140.0:/data
root@39.108.140.0's password:
sending incremental file list
test
sent 10,293 bytes received 35 bytes 2,950.86 bytes/sec
total size is 10,485,760 speedup is 1,015.27
# 限速
[root@client data]# rsync -avz /data/test -e 'ssh -p 22' --bwlimit=1 root@39.108.140.0:/data
root@39.108.140.0's password:
sending incremental file list
test
sent 10,293 bytes received 35 bytes 826.24 bytes/sec
total size is 10,485,760 speedup is 1,015.27
# bwlimit的引數預設為1K bits/s
檔案備份需要注意的事項
# 1. 備份需要考慮頻寬限速(rsync,scp,ftp都有限速功能)
# 2. 備份需要選擇業務低谷
innotify的三種工作模式之Daemon模式
Daemon,即守護程式。該模式是在一臺rsync伺服器上安裝並執行一個rsync的服務程式,其他的客戶端通過rsync命令上傳檔案到伺服器中。該模式是rsync最常用的功能,用來做資料的定時或者實時備份,下面來具體安裝和介紹daemon模式。
Daemon模式的安裝與配置
環境清單
節點名 | IP | 軟體版本 | 硬體 | 網路 | 說明 |
---|---|---|---|---|---|
server | 39.108.140.0 | rsync-3.1.2 | 1C2G | 阿里雲 | 測試環境 |
Client | 47.95.119.205 | rsync-3.1.2 | 1C2G | 阿里雲 | 測試環境 |
安裝
[root@server data]# yum -y install rsync
[root@server data]# rpm -qa |grep rsync
rsync-3.1.2-10.el7.x86_64
配置服務端
修改/etc/rsyncd.conf
該配置檔案時rsync伺服器端預設的配置檔案,該檔案預設不存在,需要自己手動建立!填入內容如下:
cat rsyncd.conf
uid = rsync # 配置使用者,遠端命令要使用rsync使用者訪問共享目錄(訪問目錄的許可權)
gid = rsync # 配置rsync服務程式的使用者組
use chroot = no # 安全相關
max connections = 200 # 設定最大連線數
timeout = 300 # 設定超時時間
pid file = /var/run/rsyncd.pid # 定義程式檔案
lock file = /var/run/rsync.lock # 定義鎖檔案
log file = /var/log/rsyncd.log # 定義日誌檔案
[backup] # 配置一個資料儲存的模組
path = /data # 模組備份資料路徑
ignore errors
read only = false
list = false
hosts allow = 47.95.119.205,172.25.1.0/24 # 配置登入許可權,可以多個IP網段用逗號隔開
#hosts deny = 0.0.0.0/32
auth users = rsync_backup # 配置匿名服務登入使用者(訪問服務的許可權)
secrets file = /etc/rsync.password # 配置匿名使用者和密碼檔案
配置使用者
# 建立使用者名稱為rsync的使用者,只讓其執行程式,不給其登入系統的許可權以及家目錄
[root@server data]# useradd rsync -s /sbin/nologin -M
[root@server data]# tail -1 /etc/passwd
rsync:x:1001:1001::/home/rsync:/sbin/nologin
配置儲存路徑
建立目錄/data,並將其所屬使用者和使用者組修改為rsync,因為程式需要用rsync使用者來訪問這個目錄,如果rsync沒有許可權訪問該目錄,那麼客戶端也無法上傳檔案到備份資料目錄。命令如下:
[root@server data]# mkdir /data/ -p
[root@server data]# chown rsync:rsync /data/
[root@server data]# ls -ld /data/
drwxr-xr-x 2 rsync rsync 4096 Jul 29 23:12 /data/
配置虛擬使用者檔案
/etc/rsync.password
rsync有一個重要的特性,就是可以使用一個虛擬的使用者(不是實際存在的使用者)來訪問系統服務。為了使用這個功能,我們需要建立一個虛擬的使用者檔案,該檔案已經在rsyncd.conf配置檔案裡面的secrets file定義好了,是/etc/rsync.password檔案
[root@server data]# echo "rsync_backup:youmen" > /etc/rsync.password
[root@server data]# cat /etc/rsync.password
rsync_backup:youmen
[root@server data]# chmod 600 /etc/rsync.password
# 檔案建立完成之後,需要修改檔案的許可權屬性為600,否則程式無法正常執行
配置開機自啟動
[root@server data]# echo '/usr/bin/rsync --daemon' >> /etc/rc.local
[root@server data]# tail -1 /etc/rc.local
/usr/bin/rsync --daemon
配置客戶端
/etc/rsync.password
相對於伺服器端來說,客戶端的配置很簡單,只需要建立一個密碼檔案就行了。這個密碼檔案也是預設不存在,需要手動建立。
[root@client data]# echo "youmen" > /etc/rsync.password
[root@client data]# cat /etc/rsync.password
youmen
[root@client data]# chmod 600 /etc/rsync.password
[root@client data]# ls -l /etc/rsync.password
-rw------- 1 root root 7 Jul 29 23:29 /etc/rsync.password
使用rsync
啟動並驗證服務
[root@server data]# rsync --daemon
[root@server data]# ss -atnlp |grep 873
LISTEN 0 5 *:873 *:* users:(("rsync",pid=25230,fd=3))
LISTEN 0 5 :::873 :::* users:(("rsync",pid=25230,fd=5))
# 重啟
[root@server data]# pkill rsync
[root@server data]# rsync --daemon
同步資料
命令格式
# 下載: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
# rsync [OPTION...]rsync://[USER@]HOST[:PORT]/SRC... [DEST]
# 上傳: rsync [OPTION...] SRC... [USER@]HOST::DEST
# rsync [OPTION...] SRC...rsync://[USER@]HOST[:PORT]/DEST
建立測試資料
客戶端
[root@client data]# seq 10 | xargs -i dd if=/dev/zero of={}.dat bs=1024 count=1
[root@client data]# ls
10.dat 2.dat 4.dat 6.dat 8.dat
1.dat 3.dat 5.dat 7.dat 9.dat
服務端
[root@server data]# seq 2 | xargs -i dd if=/dev/zero of={}.dat bs=1024 count=1
1+0 records in
1+0 records out
1024 bytes (1.0 kB) copied, 0.000147976 s, 6.9 MB/s
1+0 records in
1+0 records out
1024 bytes (1.0 kB) copied, 9.5039e-05 s, 10.8 MB/s
[root@server data]# ls
1.dat 2.dat
下載資料測試
Example1