1. 程式人生 > 實用技巧 >企業中Linux系統如何通過rsync服務做資料同步

企業中Linux系統如何通過rsync服務做資料同步

1. rsync服務介紹

  rsync是一個遠端資料同步工具,可通過網路快速同步多臺主機間的檔案,也可以使用 rsync 同步本地硬碟中的不同目錄。rsync 在同步檔案時會檢查檔案之間是否有差異,它只同步存在差異或者不存在的檔案,即增量備份。

2. 環境介紹

  此博文利用兩臺 Linux(centos) 主機,一臺作為客戶端,即應用型別伺服器,一臺作為服務端,即備份伺服器,使用rsync服務將客戶端的重要資料定時同步至備份伺服器,模擬企業生產環境進行介紹。

3. 部署安裝

  服務端部署(備份伺服器)

    步驟一:檢查是否安裝   

[root@backup ~]# rpm -qa | grep
rsync  #<==== 檢查確認已經安裝,若未安裝利用 yum install rsync -y 命令進行安裝 rsync-3.1.2-6.el7_6.1.x86_64

    步驟二:編寫配置檔案

cp  /etc/rsyncd.conf{,.bak}  #<==== 備份原始配置檔案
echo ''> /etc/rsyncd.conf  #<==== 清空檔案內容
vim /etc/rsyncd.conf
uid = rsync		#----指定管理備份目錄的使用者
gid = rsync		#----指定管理備份目錄的使用者組
port = 873		#----定義rsync備份服務的網路埠號
fake super = yes	#---- 將rsync虛擬使用者偽裝成為一個超級管理員使用者
use chroot = no	        #----和安全相關的配置
max connections = 200	#----最大連線數
timeout = 300		#----超時時間(單位秒)
pid file = /var/run/rsyncd.pid	#----記錄程序號資訊 1、讓程式快速結束程序 2、判斷一個服務是否在執行
lock file = /var/run/rsync.lock	#----鎖檔案
log file = /var/log/rsyncd.log	#----記錄rsync服務的日誌檔案,用於排錯分析問題
ignore errors		#----忽略傳輸中的簡單錯誤
read only = false	#----指定備份目錄可讀可寫
list = false		#----使客戶端可以檢視服務端的模組資訊
hosts allow = 172.16.1.0/24	#----允許傳輸備份資料的主機(白名單)
hosts deny = 0.0.0.0/32		#----禁止傳輸資料備份的主機(黑名單)
auth users = rsync	#----指定認證使用者
secrets file = /etc/rsync.password	#----指定認證使用者密碼檔案 使用者名稱稱:密碼資訊
[backup]		#----模組資訊
comment = "backup dir by yunxuan"
path = /backup		#----模組中的配置引數  指定備份目錄

    步驟三:搭建服務環境

    建立rsync虛擬使用者、建立備份服務認證密碼檔案、建立備份目錄 

[root@backup ~]# useradd -M -s /sbin/nologin rsync  #<==== 建立虛擬使用者rsync
[root@backup ~]# mkdir /backup  #<==== 建立備份目錄
[root@backup ~]# chown -R rsync.rsync /backup/  #<==== 修改備份目錄訪問許可權
[root@backup ~]# ll -d /backup/  #<==== 檢視備份目錄屬性資訊
drwxr
-xr-x. 2 rsync rsync 6 Nov 3 17:23 /backup/
[root@backup ~]# echo "rsync:123456" > /etc/rsync.password  #<==== 建立備份服務認證密碼檔案 [root@backup ~]# chmod 600 /etc/rsync.password   #<==== 修改備份服務認證密碼檔案許可權
[root@backup ~]# ll /etc/rsync.password  #<==== 檢視備份服務認證密碼檔案屬性資訊
-rw-------. 1 root root 13 Nov 3 17:24 /etc/rsync.password

    步驟四:啟動rsync應用

[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
[root@backup ~]# systemctl status rsyncd
● rsyncd.service - fast remote file copy program daemon
   Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2020-11-03 17:36:40 CST; 18s ago
 Main PID: 3651 (rsync)
   CGroup: /system.slice/rsyncd.service
           └─3651 /usr/bin/rsync --daemon --no-detach

Nov 03 17:36:40 backup systemd[1]: Started fast remote file copy program daemon.

    步驟五:待客戶端配置完成,進行測試資料同步功能

[root@backup ~]# ll /backup/  #<==== 檢查客戶端是否將hosts檔案備份至服務端/backup目錄
total 4
-rw-r--r--. 1 rsync rsync 158 Jun  7  2013 hosts
[root@backup ~]# 

  

  客戶端部署(應用伺服器)

    步驟一:檢查rsync軟體是否安裝  

[root@backup ~]# rpm -qa | grep rsync  #<==== 檢查確認已經安裝,若未安裝利用 yum install rsync -y 命令進行安裝
rsync-3.1.2-6.el7_6.1.x86_64

    步驟二:客戶端建立密碼檔案(用於免互動同步資料)

[root@nfs01 ~]# echo "123456">/etc/rsync.password
[root@nfs01 ~]# chmod 600 /etc/rsync.password
[root@nfs01 ~]# ll /etc/rsync.password
-rw-------. 1 root root 7 Nov  3 17:41 /etc/rsync.password
[root@nfs01 ~]# cat /etc/rsync.password
123456

    步驟三:測試資料同步功能

[root@nfs01 ~]# rsync -avz /etc/hosts rsync@172.16.1.211::backup --password-file=/etc/rsync.password  #<==== 將客戶端hosts檔案備份至服務端
sending incremental file list
hosts

sent 140 bytes  received 43 bytes  366.00 bytes/sec
total size is 158  speedup is 0.86

4. rsync 同步命令語法介紹、常用引數和示例演示

  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

  常用引數:

-v 顯示詳細的傳輸資訊
-a 命令的歸檔引數,相當於(rtopgDl)
-r 遞迴引數
-t 保持穩健屬性資訊中時間資訊(mtime)不變,修改時間
-o 保持檔案的屬主資訊不變
-g 保持檔案的屬組資訊不變
-p 保持檔案的許可權資訊不變
-D 保持裝置檔案資訊不變
-l 保持連結檔案屬性不變
-L 保持連結檔案資料資訊不變
-P 顯示資料傳輸的進度資訊
--exclude=PATTERN 排除指定資料不被傳輸
--exclude-from=file 排除指定資料不被傳輸(批量排除)
--bwlimit=RATE 顯示傳輸的速率
--delete 無差異同步資料

  

  示例:

  --delete 無差異同步資料,將客戶端/data目錄下的所有資料無差異的同步至服務端/backup目錄下

  此引數在企業中慎用

# 當前客戶端資料
[root@nfs01 ~]# ll /data
total 0
-rw-r--r--. 1 root root 0 Nov  3 18:52 01.txt
-rw-r--r--. 1 root root 0 Nov  3 18:52 02.txt
-rw-r--r--. 1 root root 0 Nov  3 18:52 03.txt
-rw-r--r--. 1 root root 0 Nov  3 18:52 a.jpg
-rw-r--r--. 1 root root 0 Nov  3 18:52 b.jpg
drwxr-xr-x. 2 root root 6 Nov  3 18:52 test
# 當前服務端資料
[root@backup ~]# ll /backup/
total 4
-rw-r--r--. 1 rsync rsync 158 Jun  7  2013 hosts

# 客戶端執行同步命令
[root@nfs01 ~]# rsync -avz --delete /data/ rsync@172.16.1.211::backup --password-file=/etc/rsync.password
sending incremental file list
deleting hosts
./
01.txt
02.txt
03.txt
a.jpg
b.jpg
test/

sent 372 bytes  received 139 bytes  1,022.00 bytes/sec
total size is 0  speedup is 0.00
# 檢視服務端同步情況
[root@backup ~]# ll /backup/
total 0
-rw-r--r--. 1 rsync rsync 0 Nov  3 18:52 01.txt
-rw-r--r--. 1 rsync rsync 0 Nov  3 18:52 02.txt
-rw-r--r--. 1 rsync rsync 0 Nov  3 18:52 03.txt
-rw-r--r--. 1 rsync rsync 0 Nov  3 18:52 a.jpg
-rw-r--r--. 1 rsync rsync 0 Nov  3 18:52 b.jpg
drwxr-xr-x. 2 rsync rsync 6 Nov  3 18:52 test

  備份連結檔案,要使連結檔案資料資訊不失效,加 -L 引數生效

[root@nfs01 data]# ll
total 4
lrwxrwxrwx. 1 root root 7 Nov  3 18:59 001_link.txt -> 001.txt
-rw-r--r--. 1 root root 7 Nov  3 18:59 001.txt
[root@nfs01 data]# rsync -avz -L  /data/001_link.txt rsync@172.16.1.211::backup --password-file=/etc/rsync.password
sending incremental file list
001_link.txt

sent 105 bytes  received 43 bytes  296.00 bytes/sec
total size is 7  speedup is 0.05


[root@backup backup]# ll 001_link.txt 
-rw-r--r--. 1 rsync rsync 7 Nov  3 18:59 001_link.txt
[root@backup backup]# cat 001_link.txt 
123456