服務器數據備份解決方案


http://www.linuxidc.com/Linux/2017-01/139887.htm

 
 

第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 linuxidc 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:linuxidc 
[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  
linuxidc 
[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/  rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password    
sending incremental file list 
./ 

10 








說明客戶端推送成功

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/ rsync_backup@172.16.1.41::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/ rsync_backup@172.16.1.41::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 from=njlc_jsbcmq@linuxidc.com 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" linuxidc@linuxidc.com 
就可以收到郵件了 
  
[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~"  linuxidc@linuxidc.com </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  
項目完成

RSync實現文件備份同步詳解   http://www.linuxidc.com/Linux/2014-09/106967.htm

利用inotifywait監控主機文件和目錄 http://www.linuxidc.com/Linux/2013-03/81075.htm

利用inotify+rsync實現Linux文件批量更新 http://www.linuxidc.com/Linux/2012-01/52132.htm

inotify-tools+rsync實時同步文件安裝和配置 http://www.linuxidc.com/Linux/2012-06/63624.htm

rsync同步完整配置 http://www.linuxidc.com/Linux/2013-06/85781.htm

CentOS 6.5下Rsync遠程同步 http://www.linuxidc.com/Linux/2014-05/101084.htm

Linux文件夾對比並提取的差分文件技巧-rsync的妙用 http://www.linuxidc.com/Linux/2016-02/128307.htm

Rsync 的詳細介紹請點這里
Rsync 的下載地址請點這里

本文永久更新鏈接地址http://www.linuxidc.com/Linux/2017-01/139887.htm

linux


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM