第1章 項目準備工作
1.1 基本備份要求
已知3臺服務器主機名分別爲:web01,backup,nfs01,主機信息如下表:
服務器說明 | 外網IP | 內網IP | 主機名 |
Nginx web服務器 | 10.0.0.8/24 | 172.16.1.8/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 |
需求:每天晚上0點整在web服務器上打包備份系統配置文件,網站程序目錄及訪問日誌通過rsync命令推送備份服務器backup上備份保留。
具體要求如下:
1)web服務器和備份服務器的備份目錄都必須爲/backup
2)要備份的系統配置文件包括但不限餘:
a.定時任務服務的配置文件(/var/spool/cron/root)
b.開機自啓動的配置文件(/etc/rc.local)
c.日常腳本的目錄(/server/scripts)
d.防火牆iptables的配置文件(/etc/sysconfig/iptables)
3)web服務器站點目錄爲(/var/html/www)
4)Web服務器A訪問日誌的路徑爲(/app/logs)
5)Web服務器保留打包後的7天的備份數據即可(本地留存不能多於7天,因爲太多硬盤會滿)
6)備份服務器上,保留最近7天的備份數據,同時保留6個月內每週一的所有數據。
7)備份服務器上要安裝備份數據服務器的內網IP爲目錄保存備份,備份的文件安裝時間名字保存。
8)需要確保備份的數據儘量完整爭取,在備份服務器上對備份的數據進行檢查,把備份的成功及失敗結果信息發給系統管理員的郵箱中。
1.2 簡單邏輯圖
1.3 解題思路
1)搭建backup服務器。
a.搭建rsync服務
2)搭建web服務器。
1.驗證rsync服務能否推送成功。
2.開發腳本,實現打包,備份,推送,校驗,刪除。
3.配置定時任務定時推送,每天0點定時推送。
3)搭建backup服務器。
1.實現校驗,刪除,報警。
2.配置定時任務每天6點定時執行。
4)搭建nfs服務器。
1.驗證rsync服務能否推送成功。
2.開發腳本,實現打包,備份,推送,校驗,刪除。
3.配置定時任務定時推送,每天0點定時推送。
第2章 項目實施
2.1 搭建backup服務器。
2.1.1 rsync的默認配置文件是/etc/rsyncd.conf,配置文件默認是空的,需要自己編輯
[root@backup ~]# cat /etc/rsyncd.conf #rsync_config_____________________________start #created by oldboy 15:01 2007-6-5 ##rsyncd.conf start## uid = rsync gid = rsync use chroot = no max connections = 200 timeout = 300 pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock log file = /var/log/rsyncd.log ignore errors read only = false list = false hosts allow = 172.16.1.0/24 #hosts deny = 0.0.0.0/32 auth users = rsync_backup secrets file = /etc/rsync.password [backup] path = /backup [nfsbackup] path = /nfsbackup [luo] path = /luo ignore errors read only = false list = false hosts allow = 172.16.1.0/24 #hosts deny = 0.0.0.0/32 auth users = tang secrets file = /etc/tang #rsync_config________________________end
2.1.2 添加用戶rsync
[root@backup ~]# useradd rsync -s /sbin/nologin -M [root@backup ~]# cat /etc/passwd|grep rsync rsync:x:501:501::/home/rsync:/sbin/nologin
爲什麼用虛擬用戶?
應答:文件和進程都要滿足屬主的要求,文件和進程的存在一定是需要用戶的,也是爲了安全問題。
2.1.3 根目錄下添加backup目錄
[root@backup ~]# mkdir -p /backup/ [root@backup ~]# chown -R rsync.rsync /backup/ [root@backup ~]# ls -ld /backup/ drwxr-xr-x 3 rsync rsync 20480 1月 18 09:51 /backup/
2.1.4 創建rsync的密碼配置文件,默認也是空的
[root@backup ~]# cat /etc/rsync.password rsync_backup:oldboy [root@backup ~]# chmod 600 /etc/rsync.password [root@backup ~]# ls -l /etc/rsync.password -rw-------. 1 root root 20 11月 29 01:14 /etc/rsync.password
2.1.5 開啓服務並開機自啓動
[root@backup ~]# tail -1 /etc/rc.local /usr/bin/rsync --daemon
2.1.6 服務器端測試
[root@backup ~]# ps -ef|grep rsync|grep -v grep root 23049 1 0 Jan15 ? 00:00:00 rsync --daemon root@backup ~]# lsof -i:rsync COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsync 23049 root 3u IPv4 56971 0t0 TCP *:rsync (LISTEN) rsync 23049 root 5u IPv6 56972 0t0 TCP *:rsync (LISTEN) [root@backup ~]# netstat -lntup|grep rsync tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 23049/rsync tcp 0 0 :::873 :::* LISTEN 23049/rsync [root@backup ~]# telnet 172.16.1.41 873 Trying 172.16.1.41... Connected to 172.16.1.41. Escape character is '^]'. @RSYNCD: 30.0 說明服務器端配置沒有問題
2.2 驗證rsync服務能否推送成功。
2.2.1 客戶端配置
[root@web01 ~]# cat /etc/rsync.password oldboy [root@web01 ~]# ls -ld /etc/rsync.password -rw------- 1 root root 7 1月 18 16:01 /etc/rsync.password
2.2.2 客戶端推送
[root@web01 backup]# rsync -avz /backup/ [email protected]::backup/ --password-file=/etc/rsync.password sending incremental file list ./ 1 10 2 3 4 5 6 7 8 9 說明客戶端推送成功
2.2.3 Web服務器實現打包,備份,推送,刪除。
2.2.3.1 命令行備份
[root@web01 backup]# mkdir /var/html/www -p [root@web01 scripts]# mkdir /app/logs -p [root@web01 /]# tar zcvfh /backup/sys_config_$(date +%F).tar.gz ./var/spool/cron/root ./server/scripts/ ./etc/rc.local ./var/spool/cron/root ./server/scripts/ ./server/scripts/bak.sh ./etc/rc.local [root@web01 /]# tar zcvfh /backup/webdata_config_$(date +%F).tar.gz ./var/html/www/ ./var/html/www/ ./var/html/www/4 ./var/html/www/7 ./var/html/www/5 ./var/html/www/6 ./var/html/www/2 ./var/html/www/8 ./var/html/www/3 ./var/html/www/10 ./var/html/www/1 ./var/html/www/9 [root@web01 /]# tar zcvfh /backup/access_log_config_$(date +%F).tar.gz ./app/logs/ ./app/logs/ ./app/logs/f ./app/logs/c ./app/logs/a ./app/logs/d ./app/logs/e ./app/logs/b ./app/logs/g
2.2.3.2 推送:
[root@web01 backup]# rsync -avz /backup/ [email protected]::backup/ --password-file=/etc/rsync.password
2.2.3.3 刪除:
[root@web01 backup]# find /backup/ -type f -mtime +7|xargs rm -rf
2.2.3.4 全部放到腳本里:
cat /server/scripts/bak.sh #!/bin/sh export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin IP=$(ifconfig eth1|awk -F "[ :]+" 'NR==2{print $4}') Bak_Path=/backup mkdir $Bak_Path/$IP -p if [ $(date +%w) -eq 2 ];then date="$(date +%F -d "-1day")_week1" else date="$(date +%F -d "-1day")" fi cd / &&\ tar zcfh $Bak_Path/$IP/sys_config_${date}.tar.gz ./var/spool/cron ./etc/rc.local ./server/sc ripts &&\ tar zcf $Bak_Path/$IP/webdata_${date}.tar.gz var/html/www/ &&\ tar zcf $Bak_Path/$IP/access_log_${date}.tar.gz app/logs/ &&\ find $Bak_Path -type f -name "*.tar.gz"|xargs md5sum >$Bak_Path/$IP/flag_${date} &&\ rsync -az $Bak_Path/ [email protected]::backup/ --password-file=/etc/rsync.password &&\ ###delete data before 7days ago by chen at 20170118 find $Bak_Path -type f -mtime +7|xargs rm -f ~
2.2.3.5 每天00點定時任務推送
[root@web01 backup]# crontab -l 00 00 * * * /bin/sh /server/scripts/bak.sh >/dev/null 2>&1 完成客戶端的定時任務推送工作
第3章 backup服務器實現校驗,刪除,報警
首先我們測試下如果實現服務器報警
[root@backup ~]# tail -1 /etc/mail.rc set [email protected] smtp=smtp.163.com smtp-auth-user=njlc_jsbcmq smtp-auth-password=hgg7454196ls smtp-auth=login [root@backup ~]# echo "31qqi zuzi bang"|mail -s "nihao" [email protected] 就可以收到郵件了 [root@backup scripts]# cat checkbak.sh #!/bin/bash export if [ $(date +%w) -eq 2 ];then date="$(date +%F -d "-1day")_week1" else date="$(date +%F -d "-1day")" fi find /backup/ -name "flag_${date}*"|xargs md5sum -c &>>/tmp/mail_$(date +%F).log find /backup/ -type f -name "*.tar.gz" -a ! -name "*week1*" -mtime +1|xargs rm -f mail -s "backup ~date~" [email protected] </tmp/mail_$(date +%F).log \cp /tmp/mail_$(date +%F).log /tmp/mail_$(date +%F).log.ori >/tmp/mail_$(date +%F).log 做定時任務,每天上午6點發送郵箱 [root@backup scripts]# crontab -l * * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1 * * * * * /bin/bash /server/scripts/checkbak.sh >/dev/null 2>&1 項目完成