rsync的實際應用

需求:mysql

天天晚上01點整在 Web 服務器上打包備份(系統配置文件、日誌文件、其餘目錄),並經過rsync命令推送備份服務器backup上備份保留

nginx

一:環境準備

角色   web

外網IP(NAT)  redis

內網IP(LAN)  sql

主機名vim

WEB服務器安全

  eth0:10.0.0.7bash

 eth1:172.16.1.7服務器

       web01測試

NFS存儲服務器

 eth0:10.0.0.31

 eth1:172.16.1.31

       nfs01

Rsync備份服務器

 eth0:10.0.0.41

 eth1:172.16.1.41

     backup

二:需求思路

備份思路:
全部服務器在本地按日期打包, 而後再推到備份服務器backup上


具體要求以下:
1)全部服務器的備份目錄必須都爲/backup

2)備份的系統配置文件包括但不限於:
1.配置文件
//開機自啓動配置文件  設備掛載配置文件  本地內網配置文件
/etc/rc.local       	/etc/fstab      /etc/hosts              

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

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

//4.應用程序配置文件 rsync、nginx、PHP、mysql、redis.....
//本身思考下還有什麼須要備份的?


5)全部服務器推送數據, 以主機名_IP地址_當前時間做爲目錄, 全部的備份數據存放至該目錄下 /backup/nfs-server_172.16.1.31_2018-09-02/
/backup/nfs-server_172.16.1.31_2018-09-03/
/backup/nfs-server_172.16.1.31_2018-09-04/

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


4)Rsync備份服務器上,其它要保留6個月的數據副本。 
/backup/nfs-server_172.16.1.31_2018-09-02/
/backup/nfs-server_172.16.1.31_2018-09-03/
/backup/nfs-server_172.16.1.31_2018-09-04/
/backup/web-server_172.16.1.31_2018-09-02/
/backup/web-server_172.16.1.31_2018-09-03/
/backup/web-server_172.16.1.31_2018-09-04/

6)確保備份的數據完整,在備份服務器上對備份的數據進行檢查,把備份的成功及失敗結果信息發給系統管理員郵箱中。
7)真實工做中除了服務器之間備份, 可能還會須要異地備份,這個地方請你們思考如何異地備份。

三:細節實現-最簡潔的腳本【客戶端】

rsync 基本搭建省略。。。

1:如何拼接出對應的目錄

主機名:hostname

IP地址:ifconfig eth1|awk 'NR==2{print $2}'

日期:date +%F

[root@nfs01 ~]# echo $(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F)

nfs01_172.16.1.31_2018-09-03

2:考慮備份的文件以及推送

 

 

 

3:考慮推送數據時的密碼問題:

方式一:

[root@nfs01 ~]# cat /etc/rsync.passwd 

redhat

[root@nfs01 ~]# ll /etc/rsync.passwd 

-rw------- 1 root root 7 Sep  3 10:42 /etc/rsync.passwd

[root@nfs01 ~]#rsync -avz /root/anaconda-ks.cfg  rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd

  

方式二:

[root@nfs01 ~]#export RSYNC_PASSWORD=redhat

[root@nfs01 ~]#rsync -avz /backup/ rsync_backup@172.16.1.41::backup

  

4:暫時腳本是這樣:

[root@nfs01 ~]# cat /server/scripts/client_rsync_backup.sh 

#!/usr/bin/bash

 

Host=$(hostname)

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

Date=$(date +%F)

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

Path=/backup

 

#!/usr/bin/bash

 

Host=$(hostname)

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

Date=$(date +%F)

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

Path=/backup

 

#1.建立目錄

mkdir -p $Path/$Dest

 

#2.備份文件

                #system

/usr/bin/cp -rp /etc/fstab /etc/hosts $Path/$Dest

                #dir

/usr/bin/cp -rp /etc/firewalld /server/scripts $Path/$Dest

                #conf

/usr/bin/cp -rp /etc/rsyncd.conf $Path/$Dest

 

#3.推送數據

export RSYNC_PASSWORD=redhat

rsync -avz /backup/ rsync_backup@172.16.1.41::backup

 

5:批量建立前一個月的數據

[root@nfs01 backup]# for i in {0..30};do date -s 2018/08/$i;sh /server/scripts/client_rsync_backup.sh ;done

 

四:實現完整功能【客戶端】

1:數據流過程

備份文件

    打包

   flag標記

rsync推送

 校驗flag

   郵件通知

散文件

 -> 打包

 ->標籤

 ->運輸

  ->校驗

  ->通知

 

打包:tar

標籤:MD5

校驗:肯定數據正確

 

2:如何加標籤--服務端如何校驗

加標籤

[root@nfs01 backup]# md5sum nfs01_172.16.1.31_2018-09-03/syste.tar.gz >flag

[root@nfs01 backup]# cat flag

fe032643312dee71136b39bcb0e28e01  nfs01_172.16.1.31_2018-09-03/syste.tar.gz

驗證標籤

[root@nfs01 backup]# md5sum -c flag

nfs01_172.16.1.31_2018-09-03/syste.tar.gz: OK

測試:

[root@nfs01 backup]# echo '123' >nfs01_172.16.1.31_2018-09-03/syste.tar.gz

[root@nfs01 backup]# md5sum -c flag

nfs01_172.16.1.31_2018-09-03/syste.tar.gz: FAILED

md5sum: WARNING: 1 computed checksum did NOT match

一堆數據怎麼加標籤?

[root@nfs01 backup]# md5sum nfs01_172.16.1.31_2018-09-03/*.tar.gz

3efeb6d2be0422043b6323bfa8bdc9f4  nfs01_172.16.1.31_2018-09-03/conf.tar.gz

9e06a9b698416f28b29d2890a6c39232  nfs01_172.16.1.31_2018-09-03/dir.tar.gz

ba1f2511fc30423bdbb183fe33f3dd0f  nfs01_172.16.1.31_2018-09-03/syste.tar.gz

3:增長和校驗大量數據

[root@nfs01 backup]# for i in {0..30};do date -s 2018/08/$i;sh /server/scripts/client_rsync_backup.sh ;done

 

 

如何大規模校驗?

[root@nfs01 ~]# md5sum -c /backup/*/flag*

 

 

如何基於當天校驗?

[root@nfs01 ~]# find /backup/ -type f -name "flag_$(date +%F)"|xargs md5sum -c

/backup/nfs01_172.16.1.31_2018-08-30/conf.tar.gz: OK

/backup/nfs01_172.16.1.31_2018-08-30/dir.tar.gz: OK

/backup/nfs01_172.16.1.31_2018-08-30/syste.tar.gz: OK

4:保留最近7天的數據

[root@nfs01 ~]# find /backup/ -type d  -mtime +7

 

[root@nfs01 ~]# find /backup/ -type d  -mtime +7 -exec rm -rf {} \;

5:最終客戶端腳本:

[root@nfs01 ~]# vim /server/scripts/client_rsync_backup_md5.sh

#!/usr/bin/bash

 

Host=$(hostname)

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

Date=$(date +%F)

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

Path=/backup

 

#1.建立目錄

[ -d $Path/$Dest ]||mkdir -p $Path/$Dest

 

#2.備份文件

cd / && \

#system

[ -f $Path/$Dest/syste.tar.gz ] || tar czf $Path/$Dest/syste.tar.gz etc/fstab etc/hosts && \

                #dir

[ -f $Path/$Dest/dir.tar.gz ] || tar czf $Path/$Dest/dir.tar.gz etc/firewalld server/scripts && \

                #conf

[ -f $Path/$Dest/conf.tar.gz ] || tar czf $Path/$Dest/conf.tar.gz etc/rsyncd.conf && \

[ -f $Path/$Dest/flag_$Date ] || md5sum $Path/$Dest/*.tar.gz >$Path/$Dest/flag_$Date

#3.推送數據

export RSYNC_PASSWORD=redhat

rsync -avz $Path/ rsync_backup@172.16.1.41::backup

[ -d $Path/$Dest]||/usr/bin/cp -rp /etc/rsyncd.conf $Path/$Dest &&\

 

#4.保留本地最近7天的數據

find $Path/ -type d -mtime +7 -exec rm -rf {} \;

 

五:編寫定時任務【客戶端】

[root@nfs01 ~]# crontab -l

00 01 * * * /bin/bash /server/scripts/client_rsync_backup_md5.sh &>/dev/null

 

六:服務端須要定時校驗,校驗完成須要發郵件通知管理員

 

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

[root@backup /]# vim /etc/mail.rc

set bsdcompat

set from=xxxxx@qq.com

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

 

set smtp-auth-user=xxxxx@qq.com  #管理員郵箱

set smtp-auth-password=xxxxx  #客戶端受權碼

set smtp-auth=login

set ssl-verify=ignore

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

 

 

 

 

 

腳本

[root@backup ~]# mkdir -p /server/scripts/

[root@backup ~]# cat /server/scripts/check_backup.sh

 

#/usr/bin/bash

Path=/backup

Date=$(date +%F)

 

#1.校驗數據

find $Path -type f -name "flag_$Date"|xargs md5sum -c >$Path/result_$Date

 

#2.通知管理員

mail -s "Rsync_backup $(date +%F)" 572891887@qq.com <$Path/result_$Date

 

#3.保留最近6個月的數據

#flag mtime 3day

find $Path/ -type f -name "result*" -mtime +3 -exec rm -f {} \;

#date mtime 180day

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

  

定時任務

      服務端編寫定時任務腳本

      [root@backup backup]# crontab -l

       00 05 * * * /bin/bash /server/scripts/check_backup.sh &>/dev/null

相關文章
相關標籤/搜索