【Rsync項目實戰一】備份全網服務器數據


【Rsync項目實戰】備份全網服務器數據

標簽(空格分隔): Linux服務搭建-陳思齊

---本教學筆記是本人學習和工作生涯中的摘記整理而成,此為初稿(尚有諸多不完善之處),為原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章原始出處,作者信息和本聲明。否則將追究法律責任。http://www.cnblogs.com/chensiqiqi/



【企業案例】

某公司里有一台NFS服務器,里面的數據很重要,但是如果硬盤壞了,數據就會丟失,現在領導要求你把數據在其他 機器上做一個周期性定時備份。要求如下:

每天晚上00點整在NFS服務器nfs01上打包備份網站程序目錄等並通過rsync命令推送到備份服務器backup上備份保存(備份思路 可以是先在本地按IP地址+日期打包,然后再利用rsync推送到備份服務器上)。NFS存儲服務器同Web服務器,實際工作中就是全部的服務器。

具體要求如下:

  • [x] NFS服務器nfs01和備份服務器backup的備份目錄必須都為/backup
  • [x] 要備份的系統配置文件包括但不限於:
    - 定時任務服務的配置文件(/var/spool/cron/root)
    - 開機自啟動的配置文件(/etc/rc.local)
    - 日常腳本的目錄(/server/scripts)
    - 防火牆iptables的配置文件(/etc/sysconfig/iptables)
    - 自己思考下還有什么需要備份呢
  • [x] Web服務器站點目錄假定為(/var/html/www)
  • [x] Web服務器A訪問日志路徑假定為(/app/logs)
  • [x] Web服務器保留打包后的7天的備份數據即可(本地留存不能多於7天,因為太多硬盤會滿)
  • [x] 備份服務器上,保留每周一的所有數據副本,其它要保留6個月的數據副本
  • [x] 備份服務器上要按照備份數據服務器的內網IP為目錄保存備份,備份的文件按照時間名字保存。
  • [x] 需要確保備份的數據盡量完整正確,在備份服務器上對備份的數據進行檢查,把備份的成功及失敗結果信息發送給系統管理員郵箱中。

1.1 環境部署

操作系統

[root@backup ~]# cat /etc/redhat-release 
CentOS release 6.8 (Final)

內核版本

[root@backup ~]# uname -r
2.6.32-642.el6.x86_64

主機網絡參數設置:

主機名 網卡eth0 網卡eth1 用途
backup 10.0.0.41 172.16.1.41 rsync服務端
nfs01 10.0.0.31 172.16.1.31 NFS存儲服務器客戶端
web01 10.0.0.8/24 172.16.1.8/24 nginx web服務器

1.2 開始部署backup服務器:Rsync服務端過程:

1)確認軟件是否安裝:

[root@backup ~]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64

2)配置rsyncd.conf配置文件

#rsync_config____start
#created by chensiqi 22:00 2017-3-6
#blog:http://www.cnblogs.com/chensiqiqi/
##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/rsync.lock
# 日志文件位置
log file = /var/log/rsyncd.log
###################################
[backup]
# 使用目錄
path = /backup/
# 有錯誤時忽略
ignore errors
# 可讀可寫(true或false)
read only = false
# 阻止遠程列表(不讓通過遠程方式看服務端有啥)
list = false
# 允許IP
hosts allow = 172.16.1.0/24
# 禁止IP
hosts deny = 0.0.0.0/32
# 虛擬用戶
auth users = rsync_backup
# 存放用戶和密碼的文件
secrets file = /etc/rsync.password

##rsync_config____end##

3)創建rsync賬戶及共享目錄並修改目錄屬主為rsync

[root@backup ~]# useradd -M -s /sbin/nologin rsync
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync /backup

4)啟動服務:rsync --daemon

[root@backup ~]# rsync --daemon
[root@backup ~]# ss -antup | grep rsync
tcp    LISTEN     0      5                     :::873                  :::*      users:(("rsync",1851,5))
tcp    LISTEN     0      5                      *:873                   *:*      users:(("rsync",1851,4))

5)制作服務啟動腳本/etc/init.d/rsyncd

#!/bin/bash
#author:Mr.chen
# chkconfig:35 13 91
# description:This is Rsync service management shell script
# Source function library
. /etc/rc.d/init.d/functions

start(){
	rsync --daemon
	if [ $? -eq 0 -a `ps -ef|grep -v grep|grep rsync|wc -l` -gt 0 ];then 
		action "Starting Rsync:" /bin/true
		sleep 1
	else
		action "Starting Rsync:" /bin/false
	sleep 1 
	fi
}

stop(){
	pkill rsync;sleep 1;pkill rsync
	if [ `ps -ef|grep -v grep|grep "rsync --daemon"|wc -l` -lt 1 ];then
		action "Stopping Rsync: " /bin/true
		sleep 1
	else
		action "Stopping Rsync:" /bin/true
		sleep 1
	fi
}

case "$1" in
	start)
		start;
		;; 
	stop)
		stop;
		;;
 	restart|reload)
  		stop;
        start;
		;; 
	*)
		echo $"Usage: $0 {start|stop|restart|reload}"
 		;;
esac

6)啟動腳本放到/etc/init.d目錄下,增加x執行權限並添加開機啟動

[root@backup ~]# chmod +x /etc/init.d/rsyncd
[root@backup ~]# /etc/init.d/rsyncd stop
已終止
[root@backup ~]# /etc/init.d/rsyncd start
Starting Rsync:                                            [確定]
[root@backup ~]# chkconfig rsyncd on
[root@backup ~]# chkconfig --list | grep rsync
rsyncd         	0:關閉	1:關閉	2:啟用	3:啟用	4:啟用	5:啟用	6:關閉

7)創建rsync虛擬賬戶名和密碼,並賦予密碼文件600權限

[root@backup ~]# echo "rsync_backup:123456" > /etc/rsync.password
[root@backup ~]# cat /etc/rsync.password
rsync_backup:123456
[root@backup ~]# chmod 600 /etc/rsync.password
[root@backup ~]# ll /etc/rsync.password
-rw-------. 1 root root 20 3月   7 20:54 /etc/rsync.password

8)配置Rsync服務器端檢查腳本

#!/bin/bash
# 全網服務器備份解決方案_rsync服務器端檢查腳本
# author:Mr.chen
# 2017-3-8

. /etc/init.d/functions
Path=/backup
fileName="md5sum.txt"
# 一共有幾台客戶端在推送數據
rsync_ClientNum=2

/etc/init.d/postfix status &>/dev/null || /etc/init.d/postfix start


if [ `find $Path/ -type f -name "md5sum*" | wc -l` -eq $rsync_ClientNum ];then
	for filepath in `find $Path/ -type f -name "md5sum*"`
	do
		/usr/bin/md5sum -c $filepath
		if [ $? -eq 0 ];then
			action "${filepath}備份正常!" /bin/true
			rm -rf $filepath
		else
			action "${filepath}備份異常!" /bin/false
			echo "${filepath}備份異常!" | mail -s "$(date +%F)備份檢查告警" xxxxxxxx@qq.com
		fi
	done
else
	echo “Rsync客戶端推送不完整!”
	echo "Rsync推送不完整" | mail -s "$(date +%F)備份推送告警" xxxxxxxxx@qq.com
fi

# 找出超過180天的不是周1的備份文件並刪除
find $Path/ ! -name "*_2.tar.gz" -mtime +180 -type f | xargs rm -rf

9)將腳本掛定時任務

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

backup服務器Rsync服務端至此配置完畢

1.3 開始部署nfs01服務器:Rsync客戶端過程:

1)只需要創建密碼文件(只包含密碼即可),並賦予密碼文件600權限

[root@nfs01 ~]# echo "123456" > /etc/rsync.password
[root@nfs01 ~]# chmod 600 /etc/rsync.password

2)創建共享目錄backup
[root@nfs01 ~]# mkdir /backup

3)在客戶端進行推送測試

[root@nfs01 ~]# cd /backup
[root@nfs01 backup]# touch {1..5}
[root@nfs01 backup]# ls
1  2  3  4  5
[root@nfs01 backup]# rsync -avzP /backup/ rsync_backup@192.168.197.132::backup --password-file=/etc/rsync.password 
sending incremental file list
./
1
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=4/6)
2
           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=3/6)
3
           0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=2/6)
4
           0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=1/6)
5
           0 100%    0.00kB/s    0:00:00 (xfer#5, to-check=0/6)

sent 239 bytes  received 106 bytes  230.00 bytes/sec
total size is 0  speedup is 0.00

4)nfs01服務器打包腳本實現

#!/bin/bash
# 全網服務器備份解決方案_rsync客戶端打包腳本
# author:Mr.chen
# 2017-3-7

Path=/backup
backup_Server=172.16.1.41
local_IP=`/sbin/ifconfig eth1|awk -F"[ :]+" 'NR==2{print $4}'`
Dir=${local_IP}_$(date +%F_%w)


mkdir -p $Path/$Dir
[ -f /var/spool/cron/root ] && cp -rp /var/spool/cron/root $Path/$Dir/
[ -f /etc/rc.d/rc.local ] && cp -rp /etc/rc.d/rc.local $Path/$Dir/
[ -d /server/scripts ] && cp -rp /server/scripts $Path/$Dir/
[ -d /var/html/www ] && cp -rp /var/html/www $Path/$Dir/
[ -d /app/logs ] && cp -rp /app/logs $Path/$Dir/
[ -f /etc/sysconfig/iptables ] && cp -rp /etc/sysconfig/iptables $Path/$Dir/
cd $Path

tar -zcf $Path/${Dir}.tar.gz $Dir

rm -rf $Path/$Dir
# 創建md5sum驗證信息
/usr/bin/md5sum $Path/${Dir}.tar.gz > $Path/md5sum_$(local_IP).txt

# 推送打包的文件到備份服務器
rsync -az $Path/ rsync_backup@${backupServer}::backup --password-file=/etc/rsync.password
# 找出超過7天的備份並刪除
find $Path/ -name "${local_IP}*" -type f -mtime +7 | xargs rm -rf

5)將腳本掛定時任務

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

NFS服務器Rsync客戶端至此配置完畢


免責聲明!

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



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