1 專案備份環境
已知3臺伺服器主機名分別為web01、backup、nfs01,主機資訊見下表:
伺服器說明 | 外網IP | 內網IP | 主機名稱 |
---|---|---|---|
web伺服器 | 10.0.0.7/24 | 172.16.1.7/24 | web01 |
nfs儲存伺服器 | 10.0.0.31/24 | 172.16.1.31/24 | nfs01 |
rsync備份伺服器 | 10.0.0.41/24 | 172.16.1.41/24 | backup |
2 專案備份要求
具體要求如下:
(1)所有伺服器的備份目錄必須都為/backup。
(2)要備份的系統配置檔案包括但不限於:
a.定時任務服務的配置檔案(/var/spool/cron/root)(適合web和nfs伺服器)。
b.開機自啟動的配置檔案(/etc/rc.local)(適合web和nfs伺服器)。
c.日常指令碼的目錄 (/server/scripts)(適合web和nfs伺服器)。
d.防火牆iptables或firewalld配置檔案(/etc/sysconfig/iptables或 /etc/firewalld)(適合web和nfs伺服器)。
e.自己思考下還有什麼需要備份呢?
(3)Web伺服器站點目錄假定為(/var/html/www)(適合web伺服器)。
(4)Web伺服器A訪問日誌路徑假定為(/app/logs)(適合web伺服器)。
(5)Web伺服器保留打包後的7天的備份資料即可(本地留存不能多於7天,因為太多硬碟會滿)
(6)備份伺服器上,保留最近6個月的備份資料,同時保留6個月之前每週一的所有資料
(7)備份伺服器上要按照備份資料伺服器的內網IP為目錄儲存備份,備份的檔案按照時間名字儲存。
(8)需要確保備份的資料儘量完整正確,在備份伺服器上對備份的資料進行檢查,把備份的成功及失敗結果資訊發給系統管理員郵箱中
(9)搭建NFS儲存實現web伺服器網站圖片、附件共享
(10)NFS儲存資料實時備份
(1)每天晚上00點整在web伺服器上打包備份系統配置檔案、網站程式目錄及訪問日誌並通過rsync命令推送備份伺服器backup上備份保留。
(2)每天晚上00點整在nfs伺服器上打包備份系統配置檔案,並通過rsync命令推送備份伺服器backup上備份保留。
思路:
備份思路可以是先在本地按日期打包,然後再推到備份伺服器backup上,備份完成後要進入解壓檔案,檢視一下是否有內容,nfs儲存伺服器同web伺服器,實際工作中就是全部的伺服器。
3 專案備份邏輯架構圖
4 專案實施配置
(1)首先三臺伺服器的備份目錄都要為backup
mkdir /backup #web01,nfs01,backup伺服器都要建立backup
(2)要備份的系統配置檔案包括但不限於
a.定時任務服務的配置檔案(/var/spool/cron/root)(適合web和nfs伺服器)。
b.開機自啟動的配置檔案(/etc/rc.local)(適合web和nfs伺服器)。
c.日常指令碼的目錄 (/server/scripts)(適合web和nfs伺服器)。
d.防火牆iptables或firewalld配置檔案(/etc/sysconfig/iptables或 /etc/firewalld)(適合web和nfs伺服器)。
(3)Web伺服器站點目錄假定為(/var/html/www)(適合web伺服器)。
[root@web01 ~]# mkdir /var/html/www -p
(4)Web伺服器A訪問日誌路徑假定為(/app/logs)(適合web伺服器)。
[root@web01 ~]# mkdir /app/logs -p
(5)Web伺服器保留打包後的7天的備份資料。
find /backup -type f -mtime +7 -name "*.tar.gz"|xargs rm 2>/dev/null
2>/dev/null:如果沒有7天之前的資料會產生錯誤報告資訊,因此將錯誤資訊追加到/dev/null,不會產生錯誤資訊。
(6)備份伺服器上,保留最近6個月的備份資料,同時保留6個月之前每週一的所有資料。
find /backup -type f -mtime +180 -name "*.tar.gz"|xargs rm
# 方法一:在檔名稱中顯示星期資訊
# data+%A/date +%w
find /backup/ -type f -name "*.tar.gz" -mtime +180 ! -name "*星期1.tar.gz"|xargs rm 2>/dev/null
# 方法二:將週一資料單獨儲存
# 今天是週一
mkdir /backup/week01
rsync -avz /backup/week01 rsync_backup@172.16.1.41::backup/week01/
find /backup/ -path "/backup/week01" -prune -o -type f -name "*.tar.gz" -print |xargs rm
(7)備份伺服器上要按照備份資料伺服器的內網IP為目錄儲存備份,備份的檔案按照時間名字儲存。
[root@backup ~]# mkdir /backup/172.16.1.7 172.16.1.31
(8)需要確保備份的資料儘量完整正確,在備份伺服器上對備份的資料進行檢查,把備份的成功及失敗結果資訊發給系統管理員郵箱中
rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
md5sum /backup/172.16.1.31/system_backup_2019-07-18_星期4.tar.gz >/backup/172.16.1.31/finger.txt
#### md5值追加給finger.txt(指紋檔案)
md5sum -c finger.txt ### 自動對比md5值
vim /etc/mail.rc
set from=1396344xxxx@163.com smtp=smtp.163.com
set smtp-auth-user=1396344xxxx@163.com smtp-auth-password=ichn123456 smtp-auth=login
# 將這兩條命令新增到最後一行
systemctl restart postfix.service # 重啟郵件
echo "linux ichn62"|mail -s "test_mail" 7880xxxx@qq.com # 測試郵件是否能傳送
mail -s "test_mail" 7880xxxx@qq.com </etc/hosts # 測試郵件是否能傳送
整理以上命令編寫指令碼
mkdir /server/scripts/ #建立指令碼目錄
[root@web01 scripts]#vi system_backup.sh
#!/bin/bash
Dir_info="/backup"
IP_info="$(hostname -i)"
# 建立本地備份目錄
mkdir -p $Dir_info/$IP_info
# 建立本地備份壓縮檔案,備份站點目錄和日誌目錄
cd /
tar zchf $Dir_info/$IP_info/system_backup_$(date +%F_星期%w).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables
tar zchf $Dir_info/$IP_info/web_backup_$(date +%F_星期%w).tar.gz ./var/html/www/
tar zchf $Dir_info/$IP_info/web_log_$(date +%F_星期%w).tar.gz ./app/logs/
# 生成資料指紋資訊
find $Dir_info/$IP_info/ -type f -name "*.tar.gz" -mtime -1|xargs md5sum >$Dir_info/$IP_info/finger.txt
# 傳輸備份資料
rsync -az $Dir_info/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
# 刪除七天以前備份資料
find $Dir_info -type f -mtime +7 -name "*.tar.gz"|xargs rm 2>/dev/null
mkdir /server/scripts/ #建立指令碼目錄
[root@nfs01 scripts]#vi system_backup.sh
#!/bin/bash
Dir_info="/backup"
IP_info="$(hostname -i)"
# 建立本地備份目錄
mkdir -p $Dir_info/$IP_info
# 建立本地備份壓縮檔案
cd /
tar zchf $Dir_info/$IP_info/system_backup_$(date +%F_星期%w).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables
# 生成資料指紋資訊
find $Dir_info/$IP_info/ -type f -name "*.tar.gz" -mtime -1|xargs md5sum >$Dir_info/$IP_info/finger.txt
# 傳輸備份資料
rsync -az $Dir_info/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
# 刪除七天以前備份資料
find $Dir_info -type f -mtime +7 -name "*.tar.gz"|xargs rm 2>/dev/null
mkdir /server/scripts/ #建立指令碼目錄
[root@backup scripts]#vi backup_check.sh
[root@backup scripts]#cat backup_check.sh
#!/bin/bash
#驗證資料完整性
find /backup/ -type f -name "finger.txt"|xargs md5sum -c &>/tmp/check_info.txt
#傳送郵件資訊通知
mail -s "backup_check_info" 1138108293@qq.com </tmp/check_info.txt
#刪除6個月之前資料
find /backup/ -type f -name "*.tar.gz" -mtime +180 ! -name "*星期1.tar.gz"|xargs rm 2>/dev/null
編寫定時任務
WEB服務端:
[root@web01 /]#crontab -e
00 00 * * * /bin/sh /server/scripts/system_backup.sh &>/dev/null
NFS客戶端:
[root@nfs01 /]#crontab -e
00 00 * * * /bin/sh /server/scripts/system_backup.sh &>/dev/null
backup服務端:
[root@backup /]#crontab -e
0 6 * * * /bin/sh /server/scripts/backup_check.sh &>/dev/null
可以修改系統時間來驗證指令碼,定時是否成功。