需求:mysql
天天晚上01點整在 Web 服務器上打包備份(系統配置文件、日誌文件、其餘目錄),並經過rsync命令推送備份服務器backup上備份保留
nginx
角色 web |
外網IP(NAT) redis |
內網IP(LAN) sql |
主機名vim |
WEB服務器安全 |
eth0:10.0.0.7bash |
eth1:172.16.1.7服務器 |
web01測試 |
NFS存儲服務器 |
eth0:10.0.0.31 |
eth1:172.16.1.31 |
nfs01 |
Rsync備份服務器 |
eth0:10.0.0.41 |
eth1:172.16.1.41 |
backup |
備份思路:
全部服務器在本地按日期打包, 而後再推到備份服務器backup上
具體要求以下:
1)全部服務器的備份目錄必須都爲/backup
2)備份的系統配置文件包括但不限於:
1.配置文件
//開機自啓動配置文件 設備掛載配置文件 本地內網配置文件
/etc/rc.local /etc/fstab /etc/hosts
2.重要目錄
//cron定時任務 firewalld防火牆 腳本目錄
/var/spool/cron/ /etc/firewalld /server/scripts
//3.系統日誌文件
/var/log/ //系統安全日誌、sudo日誌、內核日誌、rsyslog日誌
//4.應用程序配置文件 rsync、nginx、PHP、mysql、redis.....
//本身思考下還有什麼須要備份的?
5)全部服務器推送數據, 以主機名_IP地址_當前時間做爲目錄, 全部的備份數據存放至該目錄下 /backup/nfs-server_172.16.1.31_2018-09-02/
/backup/nfs-server_172.16.1.31_2018-09-03/
/backup/nfs-server_172.16.1.31_2018-09-04/
3)全部服務器本地保留最近7天的數據, 避免浪費磁盤空間
4)Rsync備份服務器上,其它要保留6個月的數據副本。
/backup/nfs-server_172.16.1.31_2018-09-02/
/backup/nfs-server_172.16.1.31_2018-09-03/
/backup/nfs-server_172.16.1.31_2018-09-04/
/backup/web-server_172.16.1.31_2018-09-02/
/backup/web-server_172.16.1.31_2018-09-03/
/backup/web-server_172.16.1.31_2018-09-04/
6)確保備份的數據完整,在備份服務器上對備份的數據進行檢查,把備份的成功及失敗結果信息發給系統管理員郵箱中。
7)真實工做中除了服務器之間備份, 可能還會須要異地備份,這個地方請你們思考如何異地備份。
rsync 基本搭建省略。。。
主機名:hostname
IP地址:ifconfig eth1|awk 'NR==2{print $2}'
日期:date +%F
[root@nfs01 ~]# echo $(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F)
nfs01_172.16.1.31_2018-09-03
方式一:
[root@nfs01 ~]# cat /etc/rsync.passwd redhat [root@nfs01 ~]# ll /etc/rsync.passwd -rw------- 1 root root 7 Sep 3 10:42 /etc/rsync.passwd [root@nfs01 ~]#rsync -avz /root/anaconda-ks.cfg rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd
方式二:
[root@nfs01 ~]#export RSYNC_PASSWORD=redhat [root@nfs01 ~]#rsync -avz /backup/ rsync_backup@172.16.1.41::backup
[root@nfs01 ~]# cat /server/scripts/client_rsync_backup.sh #!/usr/bin/bash Host=$(hostname) Addr=$(ifconfig eth1|awk 'NR==2{print $2}') Date=$(date +%F) Dest=${Host}_${Addr}_${Date} Path=/backup #!/usr/bin/bash Host=$(hostname) Addr=$(ifconfig eth1|awk 'NR==2{print $2}') Date=$(date +%F) Dest=${Host}_${Addr}_${Date} Path=/backup #1.建立目錄 mkdir -p $Path/$Dest #2.備份文件 #system /usr/bin/cp -rp /etc/fstab /etc/hosts $Path/$Dest #dir /usr/bin/cp -rp /etc/firewalld /server/scripts $Path/$Dest #conf /usr/bin/cp -rp /etc/rsyncd.conf $Path/$Dest #3.推送數據 export RSYNC_PASSWORD=redhat rsync -avz /backup/ rsync_backup@172.16.1.41::backup |
[root@nfs01 backup]# for i in {0..30};do date -s 2018/08/$i;sh /server/scripts/client_rsync_backup.sh ;done
備份文件 |
打包 |
flag標記 |
rsync推送 |
校驗flag |
郵件通知 |
散文件 |
-> 打包 |
->標籤 |
->運輸 |
->校驗 |
->通知 |
打包:tar
標籤:MD5
校驗:肯定數據正確
[root@nfs01 backup]# md5sum nfs01_172.16.1.31_2018-09-03/syste.tar.gz >flag [root@nfs01 backup]# cat flag fe032643312dee71136b39bcb0e28e01 nfs01_172.16.1.31_2018-09-03/syste.tar.gz
[root@nfs01 backup]# md5sum -c flag nfs01_172.16.1.31_2018-09-03/syste.tar.gz: OK
[root@nfs01 backup]# echo '123' >nfs01_172.16.1.31_2018-09-03/syste.tar.gz [root@nfs01 backup]# md5sum -c flag nfs01_172.16.1.31_2018-09-03/syste.tar.gz: FAILED md5sum: WARNING: 1 computed checksum did NOT match
[root@nfs01 backup]# md5sum nfs01_172.16.1.31_2018-09-03/*.tar.gz 3efeb6d2be0422043b6323bfa8bdc9f4 nfs01_172.16.1.31_2018-09-03/conf.tar.gz 9e06a9b698416f28b29d2890a6c39232 nfs01_172.16.1.31_2018-09-03/dir.tar.gz ba1f2511fc30423bdbb183fe33f3dd0f nfs01_172.16.1.31_2018-09-03/syste.tar.gz
[root@nfs01 backup]# for i in {0..30};do date -s 2018/08/$i;sh /server/scripts/client_rsync_backup.sh ;done
[root@nfs01 ~]# md5sum -c /backup/*/flag*
[root@nfs01 ~]# find /backup/ -type f -name "flag_$(date +%F)"|xargs md5sum -c /backup/nfs01_172.16.1.31_2018-08-30/conf.tar.gz: OK /backup/nfs01_172.16.1.31_2018-08-30/dir.tar.gz: OK /backup/nfs01_172.16.1.31_2018-08-30/syste.tar.gz: OK
[root@nfs01 ~]# find /backup/ -type d -mtime +7
[root@nfs01 ~]# find /backup/ -type d -mtime +7 -exec rm -rf {} \;
[root@nfs01 ~]# vim /server/scripts/client_rsync_backup_md5.sh
#!/usr/bin/bash Host=$(hostname) Addr=$(ifconfig eth1|awk 'NR==2{print $2}') Date=$(date +%F) Dest=${Host}_${Addr}_${Date} Path=/backup #1.建立目錄 [ -d $Path/$Dest ]||mkdir -p $Path/$Dest #2.備份文件 cd / && \ #system [ -f $Path/$Dest/syste.tar.gz ] || tar czf $Path/$Dest/syste.tar.gz etc/fstab etc/hosts && \ #dir [ -f $Path/$Dest/dir.tar.gz ] || tar czf $Path/$Dest/dir.tar.gz etc/firewalld server/scripts && \ #conf [ -f $Path/$Dest/conf.tar.gz ] || tar czf $Path/$Dest/conf.tar.gz etc/rsyncd.conf && \ [ -f $Path/$Dest/flag_$Date ] || md5sum $Path/$Dest/*.tar.gz >$Path/$Dest/flag_$Date #3.推送數據 export RSYNC_PASSWORD=redhat rsync -avz $Path/ rsync_backup@172.16.1.41::backup [ -d $Path/$Dest]||/usr/bin/cp -rp /etc/rsyncd.conf $Path/$Dest &&\ #4.保留本地最近7天的數據 find $Path/ -type d -mtime +7 -exec rm -rf {} \; |
[root@nfs01 ~]# crontab -l 00 01 * * * /bin/bash /server/scripts/client_rsync_backup_md5.sh &>/dev/null
[root@backup ~]# yum install mailx -y
[root@backup /]# vim /etc/mail.rc
set bsdcompat
set from=xxxxx@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=xxxxx@qq.com #管理員郵箱
set smtp-auth-password=xxxxx #客戶端受權碼
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
腳本
[root@backup ~]# mkdir -p /server/scripts/
[root@backup ~]# cat /server/scripts/check_backup.sh
#/usr/bin/bash Path=/backup Date=$(date +%F) #1.校驗數據 find $Path -type f -name "flag_$Date"|xargs md5sum -c >$Path/result_$Date #2.通知管理員 mail -s "Rsync_backup $(date +%F)" 572891887@qq.com <$Path/result_$Date #3.保留最近6個月的數據 #flag mtime 3day find $Path/ -type f -name "result*" -mtime +3 -exec rm -f {} \; #date mtime 180day find $Path/ -type d -mtime +180|xargs rm -rf
|
定時任務
服務端編寫定時任務腳本
[root@backup backup]# crontab -l
00 05 * * * /bin/bash /server/scripts/check_backup.sh &>/dev/null