2021-05-12 14:32:11
Rsync實現檔案的同步
故事背景:我們公司是做新零售的,需要對發布的每台機器進行檔案的同步更新,所以我這裡做了一個小小的調研
技術調研:Linux之間同步檔案有兩種方式rsync與scp。
sync和scp在資料夾均不存在時,執行時間相差不大,但是資料夾存在的情況下差異很大。原因是scp是複製:若mas2檔案不存在則新建,若存在則覆蓋,若mas2上有而Dashboard主機沒有,則不改變。可以理解為scp為“複製”。而rsync則在檔案在存在於兩主機時,比較兩檔案是夠相同,相同的話,就什麼都不做,若存在差異就直接更新。
簡單的說rsync只對差異檔案做更新。
#### Rsync介紹
rsync是一款開源的備份工具,可以再不同主機之間進行同步,實現全量和增量備份,適用於集中備份或異地備份等應用場景。
rsync監聽埠:873
rsync執行模式:C/S
#### Rsync傳輸模式
- 本地模式
本地傳輸,主機內部進行資料傳輸(類似於cp命令)
- 遠端模式
遠端通道傳輸,通過ssh通道傳輸資料(類似scp命令)
- 守護行程模式
守護行程傳輸,不使用系統使用者進行傳輸(安全性高)
#### Rsync命令引數
-a 複製各種型別的檔案(相當於-tropgDl)
-v 顯示傳輸過程
-z 傳輸時進行壓縮
-r 遞回傳輸目錄和子目錄
-t 保持檔案時間不變
-o 保持檔案屬主資訊
-g 保持檔案屬組資訊
-p 保持檔案許可權
-l 保持軟連線
-P 顯示同步進度及過程
-D 保持裝置檔案資訊
--bwlimit=100 限速傳輸
--delete 源和目標資料保持一致
--partial 斷點續傳
#### 安裝rsync
`sudo apt-get install`一般機器好像都有
#### 伺服器端
1. 建立rsyncd.conf組態檔,sudo vim /etc/rsyncd.conf
`uid = ai #執行進程使用者
gid = ai #執行使用者組
port = 873 #監聽埠
fake super = yes #無需rsync以root身份執行,允許接受資料
use chroot = no #禁錮推播資料至某個目錄
max connections = 0 #最大連線數
timeout = 600 #超時時間
log file = /var/log/rsyncd.log #定義紀錄檔檔案路徑
#####################################
[backup] #模組名稱
path = /backup #定義接收備份資料目錄
ignore errors #忽略錯誤資訊
read only = false #對備份資料可讀寫
list = false #不允許檢視模組資訊
auth users = test #定義虛擬使用者,認證使用
secrets file = /etc/rsync.passwd #認證密碼路徑`
2. 建立rsync.passwd
`echo "test:123456" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd 不然傳輸會報錯`
3. 啟動rsync
`rsync --daemon`
#### 用戶端
1. 建立rsync.passwd
`echo "123456" > /etc/rsync.password
chmod 600 /etc/rsync.password 不然傳輸會報錯`
#### 範例(拉取)
`rsync -avz test@192.168.174.128::backup --password-file=/etc/rsyncd.password /tmp/backup/`
#### 定時拉取
把拉取指令設定在用戶端crontab即可
相關文章