需求: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