1. 程式人生 > >全網備份案例

全網備份案例

centos 備份

50臺集群全網數據備份項目方案

1、需要備份的文件或目錄(原則上,只要是運維人員寫入或更改的數據,都需要備份):

/var/spool/cron/root、/etc/rc.local、/etc/sysconfig/iptables、/var/www/html、/app/logs

2、為了規範化,每臺web服務器進行本地備份時都備份到/backup目錄下

3、每臺web服務器進行本地備份時,都備到/backup下以本機ip地址命名的目錄中

4、打的tarball文件名中需要包含執行當天的日期

5、統一存儲備份數據的服務器通過rsync daemon方式提供存儲備份數據的目錄/backup

6、由於web服務器本地的存儲空間有限,需要將超過7天的備份數據刪除

7、為了方便的知道每次備份是否成功,我們需要做如下操作:

在每臺web服務器上檢查備份是否成功

在存儲備份數據的服務器上檢查備份是否推送成功,並發送郵件至管理員郵箱

8、由於備份服務器空間有限,需要刪除超過180天的備份數據,但每周六的備份數據需要永久保留

實施步驟

1、在rsync備份服務器上,配置rsync服務,客戶端實現推送(backup服務器)

2、在客戶端nfs服務器上,實現打包、推送、刪除、定時任務推送(前端業務服務器,例如:web服務器)

打包

在客戶端上打包以下目錄到backup目錄下面:

#要打包鏈接文件必須加上h,才能將鏈接的源文件打包

cd /

tar zcvfh /backup/backup_$(date +%F).tar/gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs

推送

rsync -avz /backup/ [email protected]::backup --password-file=/etc/rsync.password

刪除

find /backup/ -type f -name "*.tar.gz" -mtime+7 #先查找,條件指定越多,越不容易刪錯

find /backup/ -type f -name "*.tar.gz" -mtime+7|xargs rm -f

編寫腳本

在命令測試成功後,寫入服務器上統一存放腳本的目錄下

mkdir -p /server/scripts

cd /server/scripts/

vim bak.sh 填寫如下內容:

#每條命令後面跟 &&\表示前面的命令執行成功,再執行下一條,因為要做定時任務,所以把v參數去掉

#因為要推送的客服端有多臺,為了要分清哪些文件是屬於哪臺機的,所以要獲得本機的IP地址來命名文件。

IP=$(ifconfig eth1|awk -F "[ :]+" 'NR==2 {print $4}')

Path=/backup

#這一個判斷將要保留的周六的文件特殊命名,以便在備份服務器上永久保留

if [ $(date +%w) -eq 0 ];then

#每天00點備份,實際上文件內容是備份的前一天的。

Time="week_$(date +%F_%w -d "-1day")"

else

#實際工作當中沒有這麽嚴格,都是以日期命名,在每天晚上的23點多一些就開始備份

Time=$($(date +%F -d "-1day") #或者做完某個操作後備份。

fi

#這樣不是很好,每次運行該腳本會創建這樣的目錄?以後自己寫腳本

mkdir $Path/$IP/ -p

cd / &&\

#該例核心是打包完成後,給打包的文件創建md5sum指紋寫入到標記文件當中,推送的時候,一起推送過去。在服務器上/backup目錄,每臺機IP命名的目錄,存放每臺機的備份

tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs &&\

#touch /backup/flag_$(date +%F).log &&\

#打完包後,在本地的目錄裏面創建一個flag標誌,將來在備份服務器上,看是否有這個標誌,來判斷是否備份成功

#光打標記還不夠,還需要為該標誌文件做一個指紋,使用md5sum命令來完成。

#md5sum 可以為所有的文件做指紋標識,包括二進制文件,每一個文件的md5sum標記是不一樣的。

#所以下面直接使用md5sum為打包的文件做指紋,並記錄在標記文件中,將來在備份的服務器上,再使用md5sum為該文件做標記,與標記文件中的內容一樣

#就說明在該文件在傳輸過程當中沒有被篡改。

md5sum $Path/$IP/backup_$Time.tar.gz >/backup/flag_$(date +%F).log &&\

rsync -avz /backup/ [email protected]::backup --password-file=/etc/rsync.password &&\

find /backup/ -type f -mtime +7 \(-name "*.log" -o -name "*.tar.gz" \)|xargs rm -f

#find命令默認多條件是and,所以這裏使用 -o 或者

保存退出,測試腳本,測試OK後,可以創建定時任務用於每天都執行。

創建定時任務

crontab -e

00 00 * * * /bin/sh /server/scripts/bak.sh >/dev/null 2>&1

crontab -l #查看

在rsync備份服務器上,做檢查,發郵件給管理員

1、保留每周6的文件,可以在客戶端的腳本當中,將每周6的文件特殊命名。

2、刪除的時候文件名裏有-6這個數字,就保留。

在備份服務器上創建腳本文件,所以服務器腳本存放的路徑都要統一

mkdir -p /server/script

cd /server/script

vim del_date.sh #寫入以下內容

find /backup/ -type f -mtime +180 ! -name "*week*_6*"|xargs rm -f

保存退出,刪除就解決了

檢查數據完整

#比較標誌文件裏的md5值,一樣,就會輸出ok字樣:

md5sum -c /backup/172.16.4.31/flag_week_2016-04-30.log

通過查找文件來比對,錯誤和成功的信息都寫入結果文件裏面:

find /backup/ -type f -name "$(date +%F -d "+1day" )*.log" | xargs md5sum -c >>$(date +%F)_result.log 2>&1

將保存的結果發郵件:

mail -s "標題" 發給誰 <內容來源於哪

mail -s "$(date +%F) bak result" [email protected]<$Path/$(date +%F)_result.log

這樣的結果比較粗焅,可以將成功的記錄底紋變成綠的,不成功的文字底紋變成紅的,再發送出去。

輸出顏色文字

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

使用echo 顯示輸出文字的顏色

-e 啟用轉義符

ctrl 用\033來表示

前景色用數字3來引導:編號31-37

背景色用數字4來引導:編號41-47

字體格式,使用一位數字來表示

echo -e "\033[ 字體;前景色;背景色m要修飾的內容\033[0m"

echo -e "\033[31m顯示的內容\033[0m"

後面的\033[0m表示顏色標記結束

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

然後將命令整理,放在腳本裏,再創建計劃任務,每天都檢查備份是否成功

發送郵件

linux發郵件2種常見客戶端命令:

1、mail命令語法(推薦)

mail -s "標題" 郵件地址 <文件

mail -s "oldboy" [email protected]< /etc/hosts

2、echo "正文" | mail -s "標題" [email protected]

mailq #查看郵件發送隊列

郵件服務發送的端口: smtp 25 接收:pop3 110

linux沒有配置郵件服務器與DNS解析之前,通過命令發的郵件,會被當做垃圾郵件給屏蔽了,所以只有在正式的郵件服務器才這樣發郵件

解決辦法:

配置mail使用外部SMTP發郵件

通過修改配置文件可以使用外部SMTP服務器,可以達到不使用sendmail/postfix等內部郵件服務;

而用外部的smtp服務器送郵件到目的地,使用外部郵箱的時候,郵箱要將 smtp授權開啟,使用第三方客戶端發郵件smtp授權後,可以看到郵件下面的smtp地址

修改/etc/mail.rc文件,在最後一行加入

set [email protected] smtp=smtp.qq.com smtp-auth-user=308944299 smtp-auth-password=郵箱第三方授權密碼 smtp-auth=login

說明:

from是發送的郵件地址

smtp是發送的外部smtp服務器地址

smtp-auth-user是外部smtp服務器認證的用戶名

smtp-auth-password是外部smtp服務器認證的用戶密碼

awk '{print ["這裏輸入什麽打印的就是什麽"] $1}'


全網備份案例