Rsync數據同步備份


1、 Rsync 基礎概述

Rsync是一款開源的備份工具,可以在不同主機之間進行同步,可實現全量備份和增量備份,因此非常適合用於架構集中式備份或異地備份等應用。

Rsync官方地址:https://rsync.samba.org/

Rsync監聽端口:873

Rsync運行模式:C/S

Rsync常見的兩種備份方式

  1. 完全備份

  2. 增量備份

Rsync優點:

1. 支持增量備份,第一次全量備份,第二次增量備份:邊復制,邊比較,邊統計,傳輸效率很高。

2. 數據集中備份,客戶端可以推送數據至服務端,也可以從服務端獲取數據,以客戶端為參照物。保持文件屬性,符號鏈接,硬鏈接,權限,時間等。

3. 安全方式傳輸,rsync本身不對不對數據加密,使用SSH作為傳輸端口。

4. 指定排除文件,排除無需同步的文件或目錄。

5. 進程方式同步,rsync運行在C/S架構,通過進程方式傳輸文件或數據。

Rsync缺點:

1. 大量小文件同步會比較慢,需要比對較長時間,有可能會造成rsync進程停止。

解決思路:將小文件進行打包,然后在同步,減少比對時間,傳輸效率提高。

2. 同步大文件會出現中斷情況,而且長時間同步會造成網絡資源被耗盡。

解決思路:配置限速同步,未同步完之前修改為隱藏文件,同步完成后修改為正常文件。

解析

假設客戶端上有 file1 file2 file3文件,服務端上有file1文件,現要將客戶端上的數據備份至服務端

 

2、 Rsync 應用場景

1. 推:所有主機推送本地數據至Rsync備份服務器,會導致數據同步緩慢(適合少量數據備份)

 

2.拉:Rsync備份服務器拉取所有主機上的數據,會導致備份服務器開銷過大

 

3.大量服務器備份場景

 

4.異地備份場景

 

3、 Rsync 命令講解

Rysnc命令格式

rsync  [OPTION...]  SRC...  [USER@]HOST::DEST

rsync  [OPTION...]  SRC...  rsync:#[USER@]HOST[:PORT]/DEST

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

讓目標目錄和源目錄數據保持一致

 

Rsync大致使用三種主要的數據傳輸方式

  1. 本地傳輸

  2. 遠程通道傳輸

  3. 守護進程傳輸

4、 Rsync 傳輸模式

1. 本地傳輸 local

語法:

Access via remote shell:

Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]

Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

命令 選項 源文件 目標文件

實例:

[root@rsync-servre ~]# rsync /etc/passwd /tmp/

# 命令

2. 遠程通道傳輸 remote shell

語法:拉取遠端數據⾄本地(下載)

Access via remote shell:遠程傳輸

Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST](下載)

Push: rsync [OPTION...] SRC... [USER@]HOST:DEST(上傳)

遠程方式存在的缺陷:

    1. 需要使用系統用戶(不安全)

    2. 使用普通用戶(權限不足)

    3. 需要走SSH協議

3. 守護進程傳輸 daemon(服務,持續后台運行)

語法:

Access via rsync daemon:守護進程方式傳輸

Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST](下載)

Push: rsync [OPTION...] SRC... [USER@]HOST::DEST(上傳)

一、項目需求:

已知3台服務器主機名分別為web、nfs、rsync,主機信息見下表:       

服務器角色 外網IP(NAT) 內網IP(LAN) 主機名
Rsync服務器 ens33:192.168.1.232 ens37:172.16.30.30 rsync_server
web服務器 ens33:192.168.1.233 ens37:172.16.30.20 web_server
NFS服務器 ens33:192.168.1.234 ens37:172.16.30.10 nfs_server

具體要求如下:

每天晚上01點整在Web服務器上打包備份系統配置文件、日志文件、其他目錄並通過rsync命令推送備份服務器backup上備份保留,所有服務器在本地按日期打包,然后再推到備份服務器backup上。

  1. 所有服務器的備份目錄必須都為/backup。

  2. 備份的系統配置文件包括但不限於;

  3. Web服務器本地保留最近7天的數據,避免浪費磁盤空間

  4. Rsync備份服務器上,其它要保留6個月的數據副本。

  5. 客戶端服務器推送數據,以主機名_IP地址_當前時間作為目錄,所有的備份數據存放至該目錄下rsync_server_172.16.30.30_2019-04-06/

  6. 確保備份的數據完整,在備份服務器上對備份的數據進行檢查,把備份的成功及失敗結果信息發送到系統管理員郵箱中。

  7. 真實工作中除了服務器之間備份,可能還會需要異地備份,這個地方請大家思考如何異地備份。

二、需求分析:

1、客戶端需求:

1. 客戶端每天凌晨1點在服務器本地打包備份(系統配置文件、日志文件、其他目錄、應用配置等文件);

2. 客戶端備份的數據必須打包存放在主機名_IP地址_當前時間命名的目錄中;

3. 客戶端對打包數據進行添加標記信息;

4. 客戶端最后推送到本地已打包好的備份文件至Rsync備份服務器上;

5. 客戶端服務器本地保留最近7天的數據,避免浪費磁盤空間。

2、服務端需求:

1. 服務端部署配置郵件服務;

2. 服務端部署rsync服務,用於接收客戶端推送過來的備份數據;

3. 服務端需要每天校驗客戶端推送過來數據的完整性;

4. 服務端需要每天校驗的結果以郵件的形式通知給管理員;

5. 服務端本地僅僅保留180天備份數據,其余的全部刪除;

注意:所有服務器的備份目錄必須都為/backup

三、操作步驟:

1、服務端配置

1. 同步服務器時間

[root@rsync_server ~]# ntpdate ntp.aliyun.com

2. 配置郵件服務器

2.1 安裝郵件軟件

[root@rsync_server ~]# yum -y install mailx

2.2 配置郵箱發件服務器

[root@rsync_server ~]# vim /etc/mail.rc

set from=912905986@qq.com

set smtp=smtps://smtp.qq.com:465

set smtp-auth-user=912905986@qq.com

set smtp-auth-password=dkmcmgeovuebbe

set smtp-auth=login

set ssl-verify=ignore

set nss-config-dir=/etc/pki/nssdb/

1.3 發送郵件測試發件服務器是否配置成功

[root@rsync_server ~]# mail -s "123" 912905986@qq.com </etc/hosts

1.4 打開郵箱查看是否收到郵件

 

3. 安裝rsync軟件

[root@rsync_server ~]# yum -y install rsync

4. 配置rsync服務

##rsyncd.conf start##
uid = rsync                             
gid = rsync                             
port = 873                              
use chroot = no                         
max connections = 2000                  
timeout = 600                           
pid file = /var/run/rsyncd.pid          
lock file = /var/run/rsync.lock         
log file = /var/log/rsyncd.log          
ignore errors                           
read only = false                       
list = false                            
address = 172.16.30.30                  
hosts allow = 172.16.30.0/24            
hosts deny = 0.0.0.0/32                 
auth users = rsync_backup               
secrets file = /etc/rsync.password      
                                        
[backup]                                
path = /backup                          
comment = rsync server backup  

5. 創建rsync用戶不創建家目錄,不允許其登陸

[root@rsync_server ~]# useradd -M -s /sbin/nologin rsync

[root@rsync_server ~]# id rsync

6. 創建備份目錄(盡可能磁盤空間足夠大),授權rsync用戶為屬組

[root@rsync_server ~]# mkdir /backup

[root@rsync_server ~]# chown rsync:rsync /backup/

[root@rsync_server ~]# ll / |grep backup

7. 創建虛擬用戶和密碼,並賦予600權限

[root@rsync_server ~]# echo "rsync_backup:123" >> /etc/rsync.password

[root@rsync_server ~]# chmod 600 /etc/rsync.password

[root@rsync_server ~]# ll /etc/ |grep rsync.password

8. 啟動服務,並加入開機自啟

[root@rsync_server ~]# systemctl start rsyncd

[root@rsync_server ~]# systemctl enable rsyncd

[root@rsync_server ~]# systemctl status rsyncd

9. 查看監聽端口是否正常運行

[root@rsync_server ~]# netstat -lntp |grep rsync

10. 編寫服務端腳本

[root@rsync_server ~]# vim /server/shell/server_rsync.sh

#!/bin/bash

#定義全局變量信息

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

#定義本地變量信息

Path=/backup

Date=$(date +%F)

#查找flag文件,並對該文件進行校驗,校驗完畢的結果輸出到MD5_result_時間

find $Path/*_${Date} -type f -name "flag_${Date}"|xargs md5sum -c >$Path/MD5_result_${Date}

#檢查校驗輸出的文件是否為空

if test -s $Path/MD5_result_${Date}; then

#如果不為空則把校驗后的結果發送郵件給管理員

mail -s "Rsync backup ${Date}" 912905986@qq.com <$Path/MD5_result_${Date}

#如果不為空則給管理員發送校驗文件為空

else

echo "校驗文件輸出文件為空,請您盡快處理" |mail -s "校驗失敗" 912905986@qq.com

fi

#刪除超過七天的校驗MD5_result文件

find $Path/ -type f -name "MD5_result*" -mtime +7 |xargs rm -f

#刪除超過180天的備份數據

find $Path/ -type d -mtime +180 |xargs rm -rf

11. 添加到定時計划任務

[root@rsync_server ~]# crontab -e

      30 6 * * * /usr/bin/sh /server/shell/server_rsync.sh

二、客戶端配置

1. 同步服務器時間

[root@nfs ~]# ntpdate ntp.aliyun.com

2. 安裝rsync軟件

[root@nfs ~]# yum -y install rsync

3. 編寫腳本

[root@nfs ~] vim rsync_crond_backup.sh

#!/bin/bash

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

#定義變量信息

Host=$(hostname)

Addr=$(ifconfig ens37 |awk 'NR==2{print $2}')

Date=$(date +%F)

Dest=${Host}_${Addr}_${Date}

Path=/backup

#創建備份目錄

mkdir -p $Path/$Dest

#備份對應的文件

cd / && \

/usr/bin/tar -czf $Path/$Dest/system_$Date.tar.gz etc/fstab etc/rsyncd.conf &&\

/usr/bin/tar -czf $Path/$Dest/log_$Date.tar.gz var/log/messages var/log/secure &&\

#生成MD5驗證信息

md5sum $Path/$Dest/*.tar.gz > $Path/$Dest/flag_$Date &&\

#推送本地數據到rsync服務端

export RSYNC_PASSWORD=1

rsync -az $Path/ rsync_backup@172.16.30.30::backup &&\

#配置本地保留7天數據

find $Path/ -type d -mtime +7|xargs rm -rf

4. 配置定時計划任務

[root@nfs ~]# crontab -e

10 1 * * * /usr/bin/sh /root/rsync_crond_backup.sh

 web 客戶端配置與NFS客戶端配置相同,唯一不同就是你需要備份的目錄是什么。


免責聲明!

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



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