rsync遠端同步

wishy blog發表於2021-01-05

一、rsync同步簡介

1.1 關於rsync

Remote Sync,遠端同步
支援本地複製,或者與其他SSH,rsync主機同步

1.2 Rsync伺服器

1.Rsync是一款開源的、快速的、多功能的、可實現全量及增量的本地或遠端資料同步備份的優秀工具。並且可以不進行改變原有資料的屬性資訊,實現資料的備份遷移特性。

2.Rsync軟體適用於unix/linux/windows等多種作業系統平臺。

3.Rsync是一個快速和非常通用的檔案複製工具。它能本地複製,遠端複製,或者遠端守護程式方式複製。它提供了大量的引數來控制其行為的各個方面,並且允許非常靈活的方式來實現檔案的傳輸複製。

4.以其delta-transfer演算法聞名。 rsync監聽埠:873 rsync執行模式:C/S

1.3 同步方式

全量備份

所有資料全部傳送
把原來的檔案和新的檔案一起統一傳送
全量複製,效率低

增量備份

在傳輸資料之前通過一些演算法通過你有的資料和我有的資料進行對比,把不一樣的資料通過網路傳輸
增量複製,效率較高

檢查是否安裝rsync
在這裡插入圖片描述

二、rsync語法結構

2.1 rsync常用引數

引數說明
-a歸檔模式傳輸, 等於-tropgDl(打包)
-v詳細模式輸出, 列印速率, 檔案數量等
-z傳輸時進行壓縮以提高效率
-r遞迴傳輸目錄及子目錄,即目錄下得所有目錄都同樣傳輸。
-t保持檔案時間資訊
-o保持檔案屬主資訊
-p保持檔案許可權
-g保持檔案屬組資訊
-l保留軟連線
-P顯示同步的過程及傳輸時的進度等資訊
-D保持裝置檔案資訊
-L保留軟連線指向的目標檔案
-e使用的通道協議,指定替代 rsh 的 shell 程式
引數說明
–exclude=PATTERN指定排除不需要傳輸的檔案模式
–exclude-from=file檔名所在的目錄檔案
–bwlimit=100限速傳輸
–partial斷點續傳
–delete讓目標目錄和源目錄資料保持一致

2.2 本地使用

類似於cp命令,將aaa目錄及裡面的檔案歸檔、壓縮拷貝到/opt下面並顯示詳細資訊

rsync -avz /aaa /opt

在這裡插入圖片描述
兩者對比

rsync -avz /aaa1 /opt
rsync -avz /aaa1/ /opt

在這裡插入圖片描述

2.3 遠端使用

1.對server1根目錄下的aaa1目錄及三個檔案進行備份
在這裡插入圖片描述
將根目錄下的aaa1目錄及檔案備份到server2根目錄下的server1檔案中(server2下面要提前建立目錄)

rsync -avz /aaa1 root@20.0.0.12:/server1

在這裡插入圖片描述
在server2上面檢視根目錄下的server1目錄
在這裡插入圖片描述

2.在已經備份完的情況下,server1下的aaa1有新增了新的內容

rsync -avz /aaa1 root@20.0.0.12:/server1

在這裡插入圖片描述

在這裡插入圖片描述
3.總結:在備份檔案時,備份後的目錄沒有原始檔,那麼會完全複製過去,在此基礎上原始檔做了改動(新增了新的檔案),再次備份的時候,只需要備份新增的檔案

2.4 刪除命令

刪除原始檔上不存在的檔案,目標檔案上進行刪除,保證與原始檔內容一致

舉例

在根目錄下建立一個bbb目錄,並在裡面建立三個檔案
在這裡插入圖片描述

在/opt下面建立一個bbb目錄,並在裡面建立四個檔案,與根目錄下的bbb稍做區分
在這裡插入圖片描述

rsync -avP --delete /bbb/ /opt/bbb/

-P:顯示同步的過程及傳輸時的進度等資訊
--delete:讓目標目錄和源目錄資料保持一致
在這裡插入圖片描述

三、rsync守護程式

3.1 部署

vi /etc/rsyncd.conf
uid = nobody      執行使用者
gid = nobody      執行組
use chroot = no   鎖定宿主目錄
max connections = 200 最大連線數
pid file = /var/run/rsyncd.pid 程式檔案
log file = /var/log/rsyncd.log 日誌檔案
# exclude = lost+found/        執行許可權
# transfer logging = yes       傳輸日誌
# timeout = 900                連線超時時間
# ignore nonreadable = yes     忽略不可讀屬性
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 壓縮
hosts allow = 20.0.0.0/24    允許網段
address = 20.0.0.11   監聽地址
port 873   監聽埠

[wwwroot]    共享目錄名稱
path = /rsync    路徑
comment = test    描述
read only = yes    只讀
auth user = zhangsan    使用者
secrets file = /etc/user.db    使用者資料檔案路徑

在這裡插入圖片描述
編輯使用者檔案

vi /etc/user.db

在這裡插入圖片描述

賦只讀許可權

chmod 600 /etc/user.db

守護程式形式去啟動服務

rsync --daemon

檢視埠狀態

netstat -anpt | grep 873

在這裡插入圖片描述
server1建立測試用的檔案
在這裡插入圖片描述

3.2 拷貝複製操作

方法一 :在server2(20.0.0.12)上發起請求,備份到serve2的/rsync下面

rsync -avz zhangsan@20.0.0.11::wwwroot /rsync

與server1之間的對應關係
在這裡插入圖片描述

在這裡插入圖片描述

方法二 :類似網頁形式

rsync -avz rsync://zhangsan@20.0.0.11/wwwroot /rsync2

在這裡插入圖片描述

在這裡插入圖片描述

3.3 免互動配置

在這裡插入圖片描述

chmod 600 password
rsync -avz --password-file=/root/password rsync://zhangsan@20.0.0.11/wwwroot /rsync3

在這裡插入圖片描述

四、rsync + inotify

保證兩個裝置上的一個檔案資料資訊保持一致性

在server2(20.0.0.12)上
在這裡插入圖片描述
解壓、編譯、安裝

tar xf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14/
./configure && make && make install

建立測試用的目錄
在這裡插入圖片描述
對檔案進行修改並測試
在這裡插入圖片描述

建立一個密碼檔案(檔名自定義)
在這裡插入圖片描述
賦予只讀許可權

chmod 600 /etc/test.pass

編輯指令碼

vi inotify.sh 
#!/bin/bash
INOTIFY="inotifywait -mrq -e modify,create,attrib,move,delete /test/inotify"
RSYNC_CMD="rsync -avz --delete --password-file=/etc/test.pass /test/inotify zhangsan@20.0.0.11::name"
$INOTIFY | while read DIRECTORY EVENT FILE
do
       if [ $(pgrep rsync | wc -l) -le 0 ];then
           $RSYNC
        fi
done

在server1(20.0.0.11)上

vi /etc/rsyncd.conf

在這裡插入圖片描述

執行指令碼測試
在這裡插入圖片描述
核心引數

[root@server2 ~]# vi /etc/sysctl.conf 
[root@server2 ~]# sysctl -p  寫入系統,啟用
在末尾新增
fs.inotify.max_queued_events = 16384   監控事件的最大佇列數
fs.inotify.max_user_instances = 1024      監控的最大例項數
fs.inotify.max_user_watches = 1048576   監控的每個例項的最大檔案數

相關文章