歡迎大家訪問我的博客:blog.54newpower.top
綜合架構備份項目
0.環境準備
主機名 | 描述 | 外網IP | 內網IP |
nfs01 | 存儲服務器 | 10.0.0.31/24 | 172.16.1.31/24 |
web01 | web服務器 | 10.0.0.10/24 | 172.16.1.10/24 |
backup | 備份服務器 | 10.0.0.41/24 | 172.16.1.41/24 |
0.1前提:
備份服務端已經部署好rsync守護進程,web01和nfs01需要部署好rsync的認證密碼信息,確保rsync服務能夠正常運行
0.2驗證:
確保backup服務端已經開啓rsync服務,併產看端口信息:
[root@backup ~]#systemctl status rsyncd
● rsyncd.service - fast remote file copy program daemon
Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2020-05-02 08:23:36 CST; 12h ago
Main PID: 838 (rsync)
CGroup: /system.slice/rsyncd.service
└─838 /usr/bin/rsync --daemon --no-detach
May 02 08:23:36 backup systemd[1]: Started fast remote file copy program daemon.
May 02 08:23:36 backup systemd[1]: Starting fast remote file copy program daemon...
[root@backup ~]#netstat -lntup
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 838/rsync
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1343/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1430/master
tcp6 0 0 :::873 :::* LISTEN 838/rsync
tcp6 0 0 :::22 :::* LISTEN 1343/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1430/master
檢查web01和nfs01是否已經配置好rsync服務認證密碼,檢查數據是否可以正常同步到backup的backup模塊;在web01和nfs01服務器分別創建/backup目錄,用於備份時的本地目錄,並且在其中創建名爲主機名的文本文件用於驗證與backup服務之間可以正常同步數據:
[root@nfs01 ~]#rsync -avz /backup/ rsync_backup@backup::backup --password-file=/etc/rsync.password
sending incremental file list
./
sent 69 bytes received 27 bytes 192.00 bytes/sec
total size is 0 speedup is 0.00
[root@web01 ~]#rsync -avz /backup/ rsync_backup@backup::backup --password-file=/etc/rsync.password
sending incremental file list
sent 62 bytes received 20 bytes 164.00 bytes/sec
total size is 0 speedup is 0.00
[root@backup /backup]#ls -l
total 4
-rw-r--r-- 1 rsync rsync 371 Apr 19 10:04 hosts
-rw-r--r-- 1 rsync rsync 0 May 2 21:04 nfs01
1.項目要求
1.1具體要求如下:
(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.2要求總結
(1)每天晚上00點整在web服務器上打包備份系統配置文件、網站程序目錄及訪問日誌並通過rsync命令推送備份服務器backup上備份保留。
(2)每天晚上00點整在nfs服務器上打包備份系統配置文件,並通過rsync命令推送備份服務器backup上備份保留。
思路:
備份思路可以是先在本地按日期打包,然後再推到備份服務器backup上,備份完成後要進入解壓文件,查看一下是否有內容,nfs存儲服務器同web服務器,實際工作中就是全部的服務器。
這些要求都是運維自己寫出來的,實際工作中,老大可能就說一句,把服務器數據備份下。
2.準備測試環境
具體思路:
根據項目的要求,自己創建出必要的文件及其目錄:具體包括網站的站點目錄/var/html/www,訪問日誌/app/logs,並且包含不同時間的文件(修改系統時間創建所需要的文件或者是目錄,注意,之前創建了定時任務:每個五分鐘自動同步一次時間,現在可以先關閉,等到創建完成所需文件後,在將時間修正即可)
在web01站點目錄下存放站點的源碼文件(用wordpress安裝包代替),日誌目錄下拷貝一些日誌文件過來;nfs01創建一個/data目錄,並往裏寫入一些數據;在打包的時候,注意打包幾份不同日期的壓縮文件,並且文件名中要包含要打包的文件名稱和打包的時間;
先把命令一條條的執行,在逐步的彙總完善,最終編寫成一個簡單的腳本,在配合定時任務,最終實現整體的功能
3.web01應完成的工作
項目用到的一些數據準備過程比較容易,拷貝一些數據即可,由此省略;直接開始打包備份的操作
系統文件的打包備份:
打包完成的文件格式:文件名稱backup_2020-04-13星期\tar.gz
cd /
tar zchf /backup/system_backup_$(date +%F_%A).tar.gz ./var/spool/cron/root ./etc/rc.local ./etc/sysconfig
設置不同的系統時間,多次執行,創建出不同時間的備份數據
cd / && tar zchf /backup/www_log_backup_$(date +%F_%A).tar.gz ./app/logs
cd / && tar zchf /backup/www_backup_$(date +%F_%A).tar.gz ./var/html/www
打包完成之後的文件:
[root@web01 /]#ls -l /backup/
total 65936
-rw-r--r-- 1 root root 48009 Mar 30 2019 system_backup_2019-03-30_Saturday.tar.gz
-rw-r--r-- 1 root root 48009 Apr 1 2019 system_backup_2019-04-01_Monday.tar.gz
-rw-r--r-- 1 root root 48009 Apr 30 2019 system_backup_2019-04-30_Tuesday.tar.gz
-rw-r--r-- 1 root root 48009 Apr 30 00:00 system_backup_2020-04-30_Thursday.tar.gz
-rw-r--r-- 1 root root 48009 May 1 00:00 system_backup_2020-05-01_Friday.tar.gz
-rw-r--r-- 1 root root 48009 May 2 23:05 system_backup_2020-05-02_Saturday.tar.gz
-rw-r--r-- 1 root root 33476258 May 2 23:14 www_backup_2020-05-02_Saturday.tar.gz
-rw-r--r-- 1 root root 33745422 May 2 23:16 www_log_backup_2020-05-02_Saturday.tar.gz
生成打包文件的指紋信息
md5sum www_backup_2020-05-02_Saturday.tar.gz >$(hostname)_$(hostname -i)_$(date +%F).finger
刪除7天之前的數據文件
find /backup -type f -mtime +7|xargs rm
推送數據
rsync -avz /backup/ [email protected]::backup --password-file=/etc/rsync.password
整合命令並且編寫腳本
#!/bin/bash
##定義一些變量
backup_dir="/backup"
host_name="$(hostname)_$(hostname -i)"
# 創建本地備份目錄
[ -e $backup_dir/$host_name ] || mkdir -p $backup_dir/$host_name
# 創建本地備份壓縮文件,備份站點目錄和日誌目錄
cd / &&
tar zchf $backup_dir/$host_name/system_backup_$(date +%F_%A).tar.gz ./var/spool/cron/root ./etc/rc.local ./etc/sysconfig
tar zchf $backup_dir/$host_name/www_log_backup_$(date +%F_%A).tar.gz ./app/logs
tar zchf $backup_dir/$host_name/www_backup_$(date +%F_%A).tar.gz ./var/html/www
#生成文件指紋信息
find $backup_dir/$host_name/ -type f -mtime -1 ! -name "*.finger" |xargs md5sum >$backup_dir/$host_name/$(date +%F).finger
# 傳輸備份數據
rsync -az $backup_dir/$host_name/ [email protected]::backup/$host_name --password-file=/etc/rsync.password
# 刪除七天以前備份數據
find $backup_dir -type f -mtime +7|xargs rm 2>/dev/null
添加定時腳本
#list02 date_backup editor w****** time 2020-05-03
* 2 * * * /bin/bash /server/scripts/data_backup.sh >/dev/null
4.nfs01應完成的工作
系統文件的打包備份:
打包完成的文件格式:文件名稱backup_2020-04-13星期\tar.gz
cd /
tar zchf /backup/system_backup_$(date +%F_%A).tar.gz ./var/spool/cron/root ./etc/rc.local ./etc/sysconfig
設置不同的系統時間,多次執行,創建出不同時間的備份數據
tar zchf /backup/data_backup_$(date +%F_%A).tar.gz ./data
打包完成之後的文件:
[root@nfs01 /]#ls -l /backup/
total 8
-rw-r--r-- 1 root root 111 May 2 23:17 data_backup_2020-05-02_Saturday.tar.gz
-rw-r--r-- 1 root root 45 May 2 23:14 www_backup_2020-05-02_Saturday.tar.gz
生成打包文件的指紋信息
md5sum data_backup_2020-05-02_Saturday.tar.gz >$(hostname)_$(hostname -i)_$(date +%F).finger
刪除7天之前的數據文件
find /backup -type f -mtime +7|xargs rm
推送數據
rsync -avz /backup/ [email protected]::backup --password-file=/etc/rsync.password
整合命令並且編寫腳本
#!/bin/bash
##定義一些變量
backup_dir="/backup"
host_name="$(hostname)_$(hostname -i)"
# 創建本地備份目錄
[ -e $backup_dir/$host_name ] || mkdir -p $backup_dir/$host_name
# 創建本地備份壓縮文件,備份站點目錄和日誌目錄
cd / &&
tar zchf $backup_dir/$host_name/system_backup_$(date +%F_%A).tar.gz ./var/spool/cron/root ./etc/rc.local ./etc/sysconfig
tar zchf $backup_dir/$host_name/data_$(date +%F_%A).tar.gz ./data
#生成文件指紋信息
find $backup_dir/$host_name/ -type f -mtime -1 ! -name "*.finger" |xargs md5sum >$backup_dir/$host_name/$(date +%F).finger
# 傳輸備份數據
rsync -az $backup_dir/$host_name/ [email protected]::backup/$host_name --password-file=/etc/rsync.password
# 刪除七天以前備份數據
find $backup_dir -type f -mtime +7|xargs rm 2>/dev/null
添加定時腳本
crontab -e
#添加以下內容
#list02 date_backup editor w****** time 2020-05-03
* 2 * * * /bin/bash /server/scripts/data_backup.sh >/dev/null
5.backup服務端完成的工作
驗證數據的完整性
find /backup/ -type f -name "*.finger"|xargs md5sum -c &>/tmp/check_info.txt
刪除半年之前(180天)的備份數據
find /backup/ -type f -name "*.tar.gz" -mtime +180 ! -name "*Monday.tar.gz"|xargs rm 2>/dev/null
發送數據完整性的結果到指定郵箱
mail -s "backup_check_info" w******@126.com </tmp/check_info.txt
整合命令並編寫腳本
#!/bin/bash
#驗證數據完整性
find /backup/ -type f -mtime -1 -name "*.finger"|xargs md5sum -c &>/backup/$(date +%F).finger.check
#發送驗證結果到指定郵箱
mail -s "backup_check_results" w******@126.com </backup/$(date +%F).finger.check
#刪除180天之前的備份文件
find /backup/ -type f -mtime +180 ! -name "*Monday.tar.gz"|xargs rm 2>/dev/null
添加定時腳本
crontab -e
#添加以下內容
#list02 data_backup_check editor wangsonghu time 2020-05-03
1 2 * * * /bin/bash /server/scripts/data_backup_check.sh >/dev/null
附加:
郵箱的配置:
vim /etc/mail.rc
#添加以下內容,需要登錄郵箱獲取授權碼
set from=w******@126.com smtp=smtp.126.com
set smtp-auth-user=w******@126.com smtp-auth-password=******* smtp-auth=login
#重啓郵箱服務
systemctl restart postfix.service
注意
編寫的腳本要添加執行權限,腳本內容要有註釋信息,定時任務也要有註釋,並且定時任務要經過測試!