Rsync數據同步備份

来源:https://www.cnblogs.com/chenjiangfeng/archive/2019/04/08/10671601.html
-Advertisement-
Play Games

1、 Rsync 基礎概述 Rsync是一款開源的備份工具,可以在不同主機之間進行同步,可實現全量備份和增量備份,因此非常適合用於架構集中式備份或異地備份等應用。 Rsync官方地址:https://rsync.samba.org/ Rsync監聽埠:873 Rsync運行模式:C/S 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 [email protected]

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

set [email protected]

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" [email protected] </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}" [email protected] <$Path/MD5_result_${Date}

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

else

echo "校驗文件輸出文件為空,請您儘快處理" |mail -s "校驗失敗" [email protected]

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/ [email protected]::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客戶端配置相同,唯一不同就是你需要備份的目錄是什麼。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 先說BUG,最近要做項目需要樹莓派和陀螺儀,資金充足的話肯定是買一個硬體卡爾曼濾波的感測器類似JY901模塊,資金不足的就買MPU6050。 網上關於MPU6050在樹莓派上的代碼還能用,關於JY901的代碼真的是千奇百怪,而且複製現象特別嚴重,有很多系統本身有問題,導致很多像我一樣的新手在上面浪費 ...
  • 1. 主機規劃 Targeting Minions文檔 另請參見:自動化運維神器之saltstack (三)節點組及複合匹配器 註意事項 修改了master或者minion的配置文件,那麼必須重啟對應的服務。 2. 目標指定方式 Letter Match Type Example Alt Delim ...
  • 本文主要介紹一下阿裡雲CentOS7下如何對MySql 8.0資料庫進行自動備份,並使用.NET Core 將備份文件上傳至七牛雲存儲上,並對整個過程所踩的坑加以記錄. 環境、工具、準備工作 伺服器:阿裡雲64位CentOS 7.4.1708版本;並安裝MySql 8.0 資料庫(如何安裝點擊) 客 ...
  • Windows 評估和部署工具包 (Windows ADK) 具有自定義大規模部署的 Windows 映像以及測試系統、添加的組件和在該系統上運行的應用程式的質量和性能所需的工具。 Windows ADK 包括:用於評估系統或組件的質量和性能的 Windows 評估工具包和 Windows Perf ...
  • 想學會如何在STM8上使用ADC這個功能,我們先得瞭解單片機中ADC究竟是什麼。 ADC是模擬信號轉成數值信號,單片機只能識別TTL電平,其實就是 1 或者 0 ,但是如果我們給它一個3.3V電壓,單片機就無法識別,,若想使用單片機讀取出來得時候,它必須將模擬量變成數字量。 瞭解完後,我們就開始講解 ...
  • [TOC]     1. Linux啟動過程 Linux的啟動過程是在執行多級初始化過程中啟動一個Linux的安裝,它在許多方面類似於BSD和其他Unix風格的引導過程,從中衍生出來。   引導Linux安裝設計多個階段和軟體組成,包括固件初始化,引導載入程式的執行,L ...
  • 必要瞭解函數的功能和使用場景: fflush, setbuf, setvbuf 瞭解的操作: setbuf(stdout,NULL); // 關閉輸出緩衝區; 保持更新,轉載請註明出處。 ...
  • 現狀描述與需求描述 最近梳理系統功能的時候發現現在每個月處理完數據之後,需要給別的系統傳送批介面文件,介面文件的內容是來自於Oracle數據表中的數據。我每次都需要手工執行一下存儲過程,讓數據從正式表中插入到介面表中,然後再藉助plsql工具軟體sqlplus的spool工具導出介面文件,然後把導出 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...