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大致使用三種主要的數據傳輸方式
-
本地傳輸
-
遠程通道傳輸
-
守護進程傳輸
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 smtp=smtps://smtp.qq.com:465
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客戶端配置相同,唯一不同就是你需要備份的目錄是什麼。