rsync 守護進程及實時同步


rsync 守護進程及實時同步

image

rsync簡介

rsync英文稱為remote synchronizetion,從軟件的名稱就可以看出來,rsync具有可使本地和遠程兩台主機之間的數據快速復制同步鏡像、遠程備份的功能,這個功能類似於ssh帶的scp命令,但是又優於scp命令的功能,scp每次都是全量拷貝,而rsync可以增量拷貝。當然,rsync還可以在本地主機的不同分區或目錄之間全量及增量的復制數據,這又類似cp命令。但是同樣也優於cp命令,cp每次都是全量拷貝,而rsync可以增量拷貝。

👉rsync官網

  • rsync監聽端口:873
  • rsync運行模式:C/S client/server
  • rsync簡稱叫做遠程同步,可以實現不同主機之間的數據同步,還支持全量和增量

rsync特性

  • 支持拷貝特殊文件,如連接文件、設備等。
  • 可以有排除指定文件或目錄同步的功能,相當於打包命令tar的排除功能。
  • 可以做到保持原文件或目錄的權限、時間、軟硬鏈接、屬主、組等所有屬性均不改變 –p。
  • 可以實現增量同步,既只同步發生變化的數據,因此數據傳輸效率很高(tar-N)。
  • 可以使用rcp、rsh、ssh等方式來配合傳輸文件(rsync本身不對數據加密)。
  • 可以通過socket(進程方式)傳輸文件和數據(服務端和客戶端)
  • 支持匿名的活認證(無需系統用戶)的進程模式傳輸,可以實現方便安全的進行數據備份和鏡像。

rsync應用場景

  • 全量備份:全量備份就是指對某一個時間點上的所有數據或應用進行的一個完全拷貝,耗時長。
  • 增量備份:增量備份是針對於上一次備份(無論是哪種備份)備份上一次備份后(包含全量備份、差異備份、增量備份)所有發生變化的文件,耗時短。
  • 差異備份:備份自上一次完全備份之后有變化的數據。差異備份過程中,只備份有標記的那些選中的文件和文件夾。它不清除標記,也即備份后不標記為已備份文件。換言之,不清除存檔屬性。差異備份是指在一次全備份后到進行差異備份的這段時間內,對那些增加或者修改文件的備份。在進行恢復時,我們只需對第一次全備份和最后一次差異備份進行恢復。

👉概念參考:全量,增量,差異備份

區別與cpscp備份

cp命令

  • cp備份:本機復制

  • 格式:cp [選項] 源文件 目標文件

cp參數

參數 說明
-a 相當於 -d、-p、-r 選項的集合
-d 如果源文件為軟鏈接(對硬鏈接無效),則復制出的目標文件也為軟鏈接
-i 詢問,如果目標文件已經存在,則會詢問是否覆蓋;
-l 把目標文件建立為源文件的硬鏈接文件,而不是復制源文件
-s 把目標文件建立為源文件的軟鏈接文件,而不是復制源文件
-p 復制后目標文件保留源文件的屬性(包括所有者、所屬組、權限和時間)
-r 遞歸復制,用於復制目錄
-u 若目標文件比源文件有差異,則使用該選項可以更新目標文件,此選項可用於對文件的升級和備用
# cp的不是本文重點只舉一個
# 創建一個示例目錄
[root@m01 ~]# mkdir -p ./a/b/c/test.txt
[root@m01 ~]# cp -ar ./a /tmp/ 
[root@m01 ~]# ll /tmp/a/b/c/
total 0
drwxr-xr-x 2 root root 6 Dec 29 15:00 test.txt

scp命令

scp 命令用於 Linux 之間復制文件和目錄,用於遠程復制,是rcp的加強版,rcp不加密。scp可以加密

  • scp備份:遠程復制

  • 格式:

    • scp [本地文件路徑] 用戶名@[服務器ip]:[遠程文件路徑] --- 推模式
    • scp 用戶名@[服務器ip]:[遠程文件路徑] [本地文件路徑] --- 拉模式
    # 簡單示例(推模式)
    scp a.txt root@172.16.1.41:/opt/
    
  • 參數:

  scp【本地或遠程文件的路徑】【服務器用戶名】@【服務器地址】:【遠程或本地文件的路徑】
  -1: 強制scp命令使用協議ssh1
  -2: 強制scp命令使用協議ssh2
  -4: 強制scp命令只使用IPv4尋址
  -6: 強制scp命令只使用IPv6尋址
  -B: 使用批處理模式(傳輸過程中不詢問傳輸口令或短語)
  -C: 允許壓縮。(將-C標志傳遞給ssh,從而打開壓縮功能)
  -p:保留原文件的修改時間,訪問時間和訪問權限。
  -q: 不顯示傳輸進度條。
  -r: 遞歸復制整個目錄。
  -v:詳細方式顯示輸出。scp和ssh(1)會顯示出整個過程的調試信息。這些信息用於調試連接,驗證和配置問題。
  -c cipher: 以cipher將數據傳輸進行加密,這個選項將直接傳遞給ssh。
  -F ssh_config: 指定一個替代的ssh配置文件,此參數直接傳遞給ssh。
  -i identity_file: 從指定文件中讀取傳輸時使用的密鑰文件,此參數直接傳遞給ssh。
  -l limit: 限定用戶所能使用的帶寬,以Kbit/s為單位。
  -o ssh_option: 如果習慣於使用ssh_config(5)中的參數傳遞方式,
  -P port:注意是大寫的P, port是指定數據傳輸用到的端口號
  -S program: 指定加密傳輸時所使用的程序。此程序必須能夠理解ssh(1)的選項。
  • 傳輸方式:
    • 格式在上面👆
    • push 推:本地上傳到遠程服務器
    • pull 拉:把遠程服務器文件下載到本地
# 推模式:本地上傳到遠程服務器
[root@m01 tmp]# scp -r a root@172.16.1.41:/opt/
root@172.16.1.41's password: 
# 查看
[root@backup ~]# ll /opt/
total 0
drwxr-xr-x 3 root root 15 Dec 29 15:12 a

# 拉模式:把遠程服務器文件下載到本地
[root@backup ~]# touch /opt/b.txt
[root@m01 ~]# scp root@172.16.1.41:/opt/b.txt ./
root@172.16.1.41's password: 
b.txt                                             100%    0     0.0KB/s   00:00 

cp命令和scp命令都只支持全量復制,rsync支持遠程復制(全量)和增量復制

rsync的傳輸方式

  • push 推:客戶端將數據從本地推送至服務端
  • pull 拉:客戶端將數據從服務端拉取到本地

rsync的傳輸模式

  • 本地方式(類似於cp,不支持推送和拉取,只是單純的復制)
  • 遠程方式(類似於scp,又不同於scp),scp只支持全量備份,rsync支持增量備份和差異備份
  • 守護進程方式(客戶端和服務端)

rsync實際使用

rsync命令

三種格式:

# 本地,沒有推和拉模式
Local:  rsync [OPTION...] SRC... [DEST]

# 通過遠程shell訪問
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

# 通過rsync守護進程訪問
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
	  rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
	  rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

參數表(OPTIONS SUMMARY)

參數 說明
-a 歸檔模式傳輸, 等於-tropgDl -t -r -o -p -g -D -l
-v 詳細模式輸出, 打印速率, 文件數量等
-z 傳輸時進行壓縮以提高效率
-r 遞歸傳輸目錄及子目錄,即目錄下得所有目錄都同樣傳輸
-t 保持文件時間信息(stat命令查看文件時間,a/m/ctime)
-o 保持文件屬主信息
-g 保持文件屬組信息
-p 保持文件權限
-l 保留軟連接
-P 顯示同步的過程及傳輸時的進度等信息
-D 保持設備文件信息
-L 保留軟連接指向的目標文件
-e 使用的信道協議,指定替代rsh的shell程序
--append 指定文件接着上次傳輸中斷處繼續傳輸(斷點續傳)
--append-verify 使用參數續傳(在斷點續傳之后,驗證一下文件,如果不同,修復文件)
--exclude=PATTERN 指定排除不需要傳輸的文件
--exclude-from=[文件路徑] 按照文件指定內容排除
--bwlimit=100 限速傳輸(單位:MB)
--delete 讓目標目錄和源目錄數據保持一致
--password-file=[密碼文件路徑] 使用密碼文件
--port 指定端口傳輸

案例

# -v :詳細模式輸出, 打印速率, 文件數量等
[root@m01 ~]# rsync -v ./b.txt root@172.16.1.41:/opt/
root@172.16.1.41's password: 
b.txt

sent 88 bytes  received 35 bytes  82.00 bytes/sec
total size is 6  speedup is 0.05
[root@backup opt]# ll
total 4
-rw-r--r-- 1 root root 6 Dec 29 16:22 b.txt

# -z :傳輸時進行壓縮以提高效率
[root@m01 ~]# rsync -vz ./b.txt  root@172.16.1.41:/opt/

# -r :遞歸傳輸目錄及子目錄,即目錄下得所有目錄都同樣傳
[root@m01 opt]# rsync -vzr ./a/ root@172.16.1.41:/opt/
root@172.16.1.41's password: 
sending incremental file list
b/
b/c/
b/c/test.txt

sent 151 bytes  received 43 bytes  129.33 bytes/sec
total size is 0  speedup is 0.00

# -t:保持文件時間信息
[root@m01 opt]# rsync -trvz ./a root@172.16.1.41:/opt/

# -o :保持文件屬主信息
# -g :保持文件屬組信息
[root@m01 opt]# rsync -trvzgo ./a root@172.16.1.41:/opt/

# -p:保持文件權限
[root@m01 opt]# chmod 000 a/b/c/test.txt
[root@m01 ~]# rsync -vzrtgop  ./a/b/c/test.txt  root@172.16.1.41:/opt/

# -l:保留軟連接
[root@m01 ~]# rsync -vzrtgopl  ./*  root@172.16.1.41:/opt/

# -P :顯示同步的過程及傳輸時的進度等信息
[root@m01 opt]# rsync -vzrtgoplP /root root@172.16.1.41:/opt/

# -D:保持設備文件信息
[root@m01 dev]# rsync -vzrtgDopl /dev/tty1  root@172.16.1.41:/opt/

# -t -r -o -p -g -D -l參數可以用-a來替換
[root@m01 opt]# rsync -avzP ./* root@172.16.1.41:/opt/
root@172.16.1.41's password: 
sending incremental file list
1.txt
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=6/7)
a/
a/1.txt -> 1.txt
a/b/
a/b/c/
a/b/c/test.txt
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=0/7)
b/

sent 304 bytes  received 81 bytes  256.67 bytes/sec
total size is 5  speedup is 0.01

rsync守護進程模式

image

服務端

  1. 安裝rsync
[root@backup ~]# yum install -y rsync
  1. 修改配置文件

模塊用於備份

[root@m01 ~]# vim /etc/rsyncd.conf 
uid = rsync      # 啟動服務的用戶id
gid = rsync			# 啟動服務的用戶的組id
port = 873         # 服務默認監聽端口
fake super = yes		# 無須使用root用戶啟動
use chroot = no			# 安全機制
max connections = 200		# 最大連接數
timeout = 600				# 超時時間	
ignore errors				# 忽略錯誤
read only = false			# 只讀權限
list = false				# 查看模塊列表
auth users = rsync_backup		# 定義虛擬用戶(rsync傳輸過程使用的用戶)
secrets file = /etc/rsync.passwd  # 定義虛擬用戶的密碼
log file = /var/log/rsyncd.log    # 日志文件
#####################################
[backup]         				# 模塊
comment = welcome to backup!	# 模塊備注
path = /backup					# 路徑
[linux]
comment = welcome to linux!
path=/tmp/linux
  1. 創建系統用戶
[root@backup opt]# groupadd rsync -g 666
[root@backup opt]# useradd rsync -u 666 -g 666 -M -s /sbin/nologin -r
  1. 創建密碼文件
# 密碼自定義
[root@backup opt]# echo "rsync_backup:123456" > /etc/rsync.passwd
  1. 授權(必須授權為600)
[root@backup opt]# chmod 600 /etc/rsync.passwd
  1. 創建備份目錄
[root@backup opt]# mkdir /backup
[root@backup opt]# mkdir /tmp/linux
  1. 目錄授權
[root@backup opt]# chown rsync.rsync /backup/
[root@backup opt]# chown rsync.rsync /tmp/linux/
  1. 關閉防火牆和selinux
[root@backup opt]# systemctl disable --now firewalld
[root@backup opt]# setenforce 0
  1. 啟動rsyncd服務
[root@backup opt]# systemctl start rsyncd

客戶端

客戶端傳輸的方式有以下三種,任選其一

方法一:自己輸入密碼
[root@m01 ~]# rsync -avzP ./* rsync_backup@172.16.1.41::backup

# 注:
# 1、rsync_backup : 虛擬用戶,只在數據傳輸時使用
# 2、172.16.1.41  : backup服務端的IP
# 3、backup       : 模塊名稱

方法二:設置密碼文件,運行時讀取
1、編寫密碼文件
[root@m01 ~]# echo "123456" > /etc/rsyncd.passwd

2、授權
[root@m01 ~]# chmod 600 /etc/rsyncd.passwd

3、連接
[root@m01 ~]# rsync -avzP --password-file=/etc/rsyncd.passwd  ./* rsync_backup@172.16.1.41::linux


方法三:添加環境變量
1、定義環境變量
[root@m01 ~]# export RSYNC_PASSWORD=123456
	
2、同步
[root@m01 ~]# rsync -avzP  ./* rsync_backup@172.16.1.41::linux

rsync實時同步傳輸

rsync是不支持實時同步的,通常我們借助於inotify這個軟件來實時監控文件變化,一旦inotify監控到文件變,則立即調用rsync進行同步。

  1. 安裝inotify(裝在客戶端)
[root@m01 ~]# yum -y install inotify-tools
  1. inotify參數介紹
參數 作用
-m 持續監控
-r 遞歸
-q 靜默,僅打印時間信息
--timefmt 指定輸出時間格式
--format 指定事件輸出格式
格式如👉
格式: 1、 %Xe 事件
2、%w 目錄
3、%f 文件
-e 指定監控的事件 access 訪問
modify 內容修改
attrib 屬性修改
close_write 修改真實文件內容
open 打開
open 打開
delete 刪除
umount 卸載
  1. 開始監控

在m01中創建文件,修改文件和刪除等都會被監控到

[root@m01 ~]# /usr/bin/inotifywait  -mrq  --format '%Xe  %w  %f' -e create,modify,delete,attrib,close_write  /root
  1. 實時監控並同步

在m01中執行以下命令,會同步創建,到172.16.1.41中查看

[root@m01 ~]# /usr/bin/inotifywait  -mrq  --format '%Xe  %w  %f' -e create,modify,delete,attrib,close_write  /root | while read line;do
	cd  /root
	rsync -avzP --delete --password-file=/etc/rsyncd.passwd ./* rsync_backup@172.16.1.41::backup
done


免責聲明!

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



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