三、Rsync備份服務實戰

1.Rsync基本概述

rsync是一款開源的備份工具,能夠在不一樣主機之間進行同步,可實現全量備份與增量備份,所以很是適合用於架構集中式備份或異地備份等應用。
rsync官方地址:傳送門http://rsync.samba.org/
rsync監聽端口:873
rsync運行模式:C/S
既然須要備份,那麼咱們應該瞭解備份的方式
徹底備份
增量備份
假設客戶端上有file1 file2 file3文件,服務端上有file1文件,現要將客戶端上的數據備份至服務端
mysql

徹底備份,將客戶端全部的數據內容file1 file2 file3所有備份至服務端 (效率低下, 佔用空間)
nginx

增量備份,將客戶端的file2 file3增量備份至服務端 (提升備份效率,節省空間, 適合異地備份 )web

2.Rsync應用場景

前面咱們瞭解過備份的方式,下面咱們須要瞭解Rync的數據同步模式
1.推: 全部主機推送本地數據至Rsync備份服務器,會致使數據同步緩慢(適合少許數據備份)

2.拉: rsync備份服務端拉取全部主機上的數據,會致使備份服務器開銷大

3.大量服務器備份場景

4.異地備份實現思路
redis

3.Rsync傳輸模式

Rsync使用三種主要的數據傳輸方式
本地方式
遠程方式
守護進程sql

3.1.本地傳輸方式: 單個主機本地之間的數據傳輸(此時相似於cp命令)

本地拷貝數據命令shell

Local:  rsync [OPTION...] SRC... [DEST]
#本地拷貝數據示例
[root@backup ~]# rsync  -avz  /etc/passwd  /tmp/
rsync       #備份命令(cp)
[options]   #選項
SRC...      #本地源文件
[DEST]      #本地目標文件

3.2.遠程通道傳輸方式: 經過ssh通道傳輸數據,相似scp命令

#pull拉取數據命令
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
#pull拉取數據示例
[root@backup ~]# rsync -avz root@172.16.1.41:/etc/hostname ./   #拉取遠程文件
[root@backup ~]# rsync -avz root@172.16.1.41:/root/ /backup/   #拉取遠程目錄下的全部文件
[root@backup ~]# rsync -avz root@172.16.1.41:/root /backup/    #拉取遠程目錄以及目錄下的全部文件
Pull        #拉取, 下載
rsync       #備份命令
[options]   #選項
[USER@]     #目標主機的系統用戶
HOST        #目主機IP地址或域名
SRC...      #目標主機源文件
[DEST]      #下載至本地哪一個位置
     

#push推送數據命令
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
#push推送數據示例
rsync -avz /backup/2018-10-01 root@172.16.1.41:/tmp/
Push        #推送, 上傳
rsync       #備份命令
[options]   #選項
SRC...      #本地源文件
[USER@]     #目標主機的系統用戶
HOST        #目主機IP地址或域名
[DEST]      #目標對應位置

Rsync藉助SSH協議同步數據存在的缺陷
1.使用系統用戶(不安全)
2.使用普通用戶(會致使權限不足狀況)

3.3.守護進程傳輸方式: rsync自身很是重要的功能(不使用系統用戶,更加安全)

#pull拉取數據命令
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
#1.拉取rsync備份服務的"backup模塊"數據至本地/mnt目錄
[root@nfs01 ~]# rsync -avz rsync_backup@192.172.16.1.41::backup/ /mnt/ --password-file=/etc/rsync.password
rsync           #命令
[OPTION...]     #選項
[USER@]         #遠程主機用戶(虛擬用戶)
HOST::          #遠程主機地址  
SRC...          #遠程主機模塊(不是目錄)
[DEST]          #將遠程主機數據備份至本地什麼位置     


#push推送數據命令
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
#2.將本地/mnt目錄推送至rsync備份服務器的backup模塊
[root@nfs01 ~]# rsync -avz /mnt/ rsync_backup@192.172.16.1.41::backup/ --password-file=/etc/rsync.password
rsync           #命令
[OPTION...]     #選項
SRC...          #遠程主機模塊(不是目錄)
[USER@]         #遠程主機用戶(虛擬用戶)
HOST::          #遠程主機地址
[DEST]          #將遠程主機模塊備份至本地什麼位置

3.4.Rsync命令對應選項

-a           #歸檔模式傳輸, 等於-tropgDl
-v           #詳細模式輸出, 打印速率, 文件數量等
-z           #傳輸時進行壓縮以提升效率
-r           #遞歸傳輸目錄及子目錄,即目錄下得全部目錄都一樣傳輸。
-t           #保持文件時間信息
-o           #保持文件屬主信息
-p           #保持文件權限
-g           #保持文件屬組信息
-l           #保留軟鏈接
-P           #顯示同步的過程及傳輸時的進度等信息
-D           #保持設備文件信息
-L           #保留軟鏈接指向的目標文件
-e           #使用的信道協議,指定替代rsh的shell程序
--exclude=PATTERN   #指定排除不須要傳輸的文件模式
--exclude-from=file #文件名在file文件中的
--bwlimit=100       #限速傳輸
--partial           #斷點續傳
--delete            #讓目標目錄和源目錄數據保持一致

=============================================vim

4.Rsync服務實踐

主機角色 主機名稱 外網IP(NAT) 內網IP(LAN)
Rsync服務端 backup 10.0.0.41 172.16.1.41
Rsync客戶端 nfs 10.0.0.31 172.16.1.31
1.安裝rsync
[root@backup ~]# yum -y install rsync

2.配置/etc/rsyncd.conf
[root@backup ~]# cat /etc/rsyncd.conf
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup

--- 配置詳解
[root@backup ~]# vim /etc/rsyncd.conf
uid = www                      # 運行進程的用戶
gid = www                      # 運行進程的用戶組
port = 873                       # 監聽端口
fake super = yes                 # 無需讓rsync以root身份運行,容許接收文件的完整屬性
use chroot = no                  # 禁錮推送的數據至某個目錄, 不容許跳出該目錄
max connections = 200            # 最大鏈接數
timeout = 600                    # 超時時間
ignore errors                    # 忽略錯誤信息
read only = false                # 對備份數據可讀寫
list = false                     # 不容許查看模塊信息
auth users = rsync_backup        # 定義虛擬用戶,做爲鏈接認證用戶
secrets file = /etc/rsync.passwd # 定義rsync服務用戶鏈接認證密碼文件路徑

[backup]                # 定義模塊信息
comment = commit        # 模塊註釋信息
path = /backup          # 定義接收備份數據目錄

3.建立用戶(運行www服務的用戶身份)
#1) 建立www帳戶
[root@backup ~]# groupadd -g666 www
[root@backup ~]# useradd -u666 -g666 www

#2) 建立備份目錄(儘量磁盤空間足夠大),受權www用戶爲屬主
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R www.www /backup/

4.建立虛擬用戶密碼文件, 受權600安全權限(用於客戶端鏈接時使用的用戶)
[root@backup ~]# echo "rsync_backup:xly" >/etc/rsync.passwd
[root@backup ~]# chmod 600 /etc/rsync.passwd
使用rsync須要使用參數--password-file=/etc/rsync.passwd

5.啓動rsync服務,並將rsync加入開機自啓動
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd

6.檢查rsync 873端口是否已處於監聽狀態
[root@backup ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      4758/rsync 

7.Rsync客戶端僅需配置虛擬用戶的密碼,並受權爲600安全權限
# 方式一:適合終端執行指定用戶密碼文件
[root@nfs01 ~]# yum install rsync -y
[root@nfs01 ~]# echo "xly" > /etc/rsync.pass
[root@nfs01 ~]# chmod 600 /etc/rsync.pass

# 方式二:腳本中使用,強烈推薦方式
[root@nfs01 ~]# export RSYNC_PASSWORD=xly

實戰:

實戰一: 客戶端推送backup目錄下全部內容至Rsync服務端安全

[root@nfs01 ~]# export RSYNC_PASSWORD=bgx
[root@nfs01 ~]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup/

實戰二: 客戶端拉取Rsync服務端 backup模塊數據至本地客戶端的 /backup目錄bash

[root@nfs01 ~]# export RSYNC_PASSWORD=bgx
[root@nfs01 ~]#rsync -avz rsync_backup@172.16.1.41::backup /backup/

實戰三: Rsync實現數據無差別同步服務器

#拉取遠端數據:遠端與本地保持一致,遠端沒有本地有會被刪除, 形成客戶端數據丟失
[root@nfs01 ~]# export RSYNC_PASSWORD=bgx
[root@nfs01 ~]# rsync -avz --delete rsync_backup@172.16.1.41::backup/ /data/

#推送數據至遠端:本地與遠端保持一致, 本地沒有遠端會被刪除, 形成服務器端數據丟失
[root@nfs01 ~]# export RSYNC_PASSWORD=bgx
[root@nfs01 ~]# rsync -avz --delete /data/ rsync_backup@172.16.1.41::backup/

實戰四: Rsync的Limit限速

#企業案例: 某DBA使用rsync拉取備份數據時,因爲文件過大致使內部交換機帶寬被沾滿,致使用戶的請求沒法響應
[root@nfs01 ~]# export RSYNC_PASSWORD=bgx
[root@nfs01 ~]# rsync -avz --bwlimit=1 rsync_backup@172.16.1.41::backup/ /data/

=============================================

5.Rsync備份案例

已知3臺服務器主機名分別爲web0一、backup 、nfs主機信息見下表:

主機角色 主機名稱 外網IP(NAT) 內網IP(LAN)
Rsync服務端 backup 10.0.0.41 172.16.1.41
Rsync客戶端 nfs 10.0.0.31 172.16.1.31
WEB客戶端 web01 10.0.0.7 1:172.16.1.7

需求:

客戶端需求
1.客戶端提早準備存放的備份的目錄,目錄規則以下:/backup/nfs_172.16.1.31_2018-09-02
2.客戶端在本地打包備份(系統配置文件、應用配置等)拷貝至/backup/nfs_172.16.1.31_2018-09-02
3.客戶端最後將備份的數據進行推送至備份服務器
4.客戶端天天凌晨1點定時執行該腳本
5.客戶端服務器本地保留最近7天的數據, 避免浪費磁盤空間
服務端需求
1.服務端部署rsync,用於接收客戶端推送過來的備份數據
2.服務端須要天天校驗客戶端推送過來的數據是否完整
3.服務端須要天天校驗的結果通知給管理員
4.服務端僅保留6個月的備份數據,其他的所有刪除
注意:全部服務器的備份目錄必須都爲/backup

建議備份的數據內容以下

#1.開機自啓動配置文件  設備掛載配置文件  本地內網配置文件    (系統配置文件)
/etc/rc.local       /etc/fstab      /etc/hosts              

#2.cron定時任務        firewalld防火牆       腳本目錄      (重要目錄)
/var/spool/cron/    /etc/firewalld     /server/scripts

#3.系統日誌文件
/var/log/   //系統安全日誌、sudo日誌、內核日誌、rsyslog日誌

#4.應用程序服務配置文件 nginx、PHP、mysql、redis.....

客戶端備份:

1.nfs客戶端備份實現思路,腳本天天凌晨01點定時執行一次(打包->標記->推送->保留最近7天的文件)
[root@nfs scripts]# cat /server/scripts/client_rsync_backup.sh 
#!/usr/bin/bash
#1.定義變量
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Host=$(hostname)
Addr=$(ifconfig eth1|awk 'NR==2{print $2}')
Date=$(date +%F)
Dest=${Host}_${Addr}_${Date}
Path=/backup

#2.建立備份目錄
[ -d $Path/$Dest ] || mkdir -p $Path/$Dest

#3.備份對應的文件
cd / && \
[ -f $Path/$Dest/system.tar.gz ] || tar czf $Path/$Dest/system.tar.gz etc/fstab etc/rsyncd.conf && \
[ -f $Path/$Dest/log.tar.gz ] || tar czf $Path/$Dest/log.tar.gz  var/log/messages var/log/secure && \

#4.攜帶md5驗證信息
[ -f $Path/$Dest/flag_$Date ] || md5sum $Path/$Dest/*.tar.gz >$Path/$Dest/flag_$Date

#5.推送本地數據至備份服務器
export RSYNC_PASSWORD=bgx
rsync -avz $Path/ rsync_backup@172.16.1.41::backup

#6.本地保留最近7天的數據
find $Path/ -type d -mtime +7|xargs rm -rf

2.客戶端編寫定時任務,讓備份天天凌晨1點執行

[root@nfs01 ~]# crontab -l
00 01 * * * /bin/bash /server/scripts/backup_rsync.sh &>/dev/null

3.backup服務端校驗客戶端推送數據的完整性, (校驗->存儲校驗結果->將保存的結果經過郵件發送給管理員->保留最近180天的數據)

#1.服務端配置郵件功能
[root@backup /]# yum install mailx -y
[root@backup /]# vim /etc/mail.rc
set from=552408925@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=552408925@qq.com
set smtp-auth-password=#客戶端受權碼
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

#2.服務端校驗、以及郵件通知腳本
[root@backup ~]# mkdir /server/scripts -p

[root@backup ~]# vim /server/scripts/check_backup.sh
#!/usr/bin/bash
#1.定義全局的變量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#2.定義局部變量
Path=/backup
Date=$(date +%F)
#3.查看flag文件,並對該文件進行校驗, 而後將校驗的結果保存至result_時間
find $Path/ -type f -name "flag_$Date"|xargs md5sum -c >$Path/result_${Date}
#4.將校驗的結果發送郵件給管理員
mail -s "Rsync Backup $Date" 123@qq.com <$Path/result_${Date}
#5.刪除超過7天的校驗結果文件, 刪除超過180天的備份數據文件
find $Path/ -type f -name "result*" -mtime +7|xargs rm -f
find $Path/ -type d -mtime +180|xargs rm -rf

4.服務端編寫定時任務腳本
[root@backup backup]# crontab -l
00 05 * * * /bin/bash /server/scripts/check_backup.sh &>/dev/null

5.如何擴展多臺服務器的備份?
[root@nfs ~]# rsync -avz /server 172.16.1.7:/

6.全網備份圖解流程

相關文章
相關標籤/搜索