Rsync服務簡介部署使用及原理詳解


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: 服務端免密同步文件到客戶端

[root@client ~]# rsync -auv --password-file=/etc/rsync.password rsync_backup@39.108.140.0::backup  /data
receiving incremental file list
./
1.dat
2.dat

sent 69 bytes  received 2,240 bytes  1,539.33 bytes/sec
total size is 2,048  speedup is 0.89

Example: 客戶端文件同步到服務端

[root@client data]# rsync -avz --delete /data/ rsync_backup@39.108.140.0::backup --password-file=/etc/rsync.password
sent 556 bytes  received 921 bytes  2,954.00 bytes/sec
total size is 10,240  speedup is 6.93
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]

Rsync優缺點

優點
# 1、支持數據增量備份,支持socket(daemon),集中備份(支持推拉,都是以客戶端為參照物);

# 2、遠程SHELL通道模式可以加密(SSH)傳輸,socket(daemon)模式需要加密傳輸可以使用×××服務或者ipsec服務;
缺點
# 1、大量小文件同步的時候,時間比較長,有的時候,rsync進程可能會停止;
# 2、同步大文件,10G這樣的大文件有時也會有問題,中途可能會中斷。
# 3、未完整同步前,文件默認是隱藏的,可以通過續傳等參數實現傳輸。

# 注意:
# 1、模式2和模式3不能結合使用
# 2、注意源目錄后面加“/”與沒有的區別(有“/”表示只同步該目錄下的數據;沒有表示連整個目錄一起同步)


免責聲明!

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



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