中小规模群集架构实战
前方Web Server的数据存放在NFS server,NFS Server定时监控数据,数据变动时自动同步至rsync服务器上,在rsync服务器上存放着 Web Server的数据文件、以及各服务器的配置文件。Web Server的数据均在NFS、rsync。
上机实战
某公司里有一台Web服务器,里面的数据很重要,如果硬盘坏了,数据会丢失,现在领导要求把数据备份,这样Web服务器数据丢失可以进行恢复。
需求:
每天晚上00点整在Web服务器A上打包备份系统配置文件、网站程序目录及访问日志并通过rsync命令推送到服务器B上备份保留(备份思路可以是现在本地按日志打包,然后再推到备份服务器B上)。
问题一、实现把Web服务器A数据备份到服务器B
具体要求:
1) Web服务器A和备份服务器B的备份目录必须都为/backup
2) 系统配置文件包括但不限于:
a) 定时任务服务的配置文件(/var/spool/cron/root)
b) 开机自启动的配置文件(/etc/rc.local)
c) 日常脚本的目录(/server/scripts)
d) 防火墙iptables的配置文件(/etc/sysconfig/iptables)
e) 思考还有什么需要备份
3) Web服务器站点目录假定为(/var/html/www)
4) Web服务器A访问日志路径假定为(/app/logs)
5) Web服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满),备份服务器B上要保留6个月的数据副本。
6) 备份服务器B上要按照备份数据服务器的IP为目录保存,打包的文件按照时间名字保存。
实现:
1.B服务器配置rsync服务端
uid=rsync
gid=rsync
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 192.168.24.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#############################
[backup]
comment = backup server
path=/backup
创建rsync用户 傀儡账号 没有家目录
useradd rsync -s /sbin/nologin -M
创建/backup目录
Mkdir /backup
创建rsync.password密码文件
Echo "rsync_backup:oldboy">/etc/rsync.password
Chmod 600 /etc/rsync.password
Rsync -daemon 开启测试能否正常工作
Rsync -daemon
加入开机自启动
echo "rsync --daemon">>/etc/rc.local
检查能否传输
rsync -avz /tmp/backup/ rsync_backup@192.168.24.32::backup
2.测试备份文件
a) 定时任务服务的配置文件(/var/spool/cron/root)
b) 开机自启动的配置文件(/etc/rc.local)
c) 日常脚本的目录(/server/scripts)
d) 防火墙iptables的配置文件(/etc/sysconfig/iptables)
e) 思考还有什么需要备份
7) Web服务器站点目录假定为(/var/html/www)
8) Web服务器A访问日志路径假定为(/app/logs)
把a-d打包,把7,8分别打包7,8有可能数据很大所以要单独打包
mkdir /backup/"`ifconfig ens192|awk -F '[ :]+' 'NR==2 {print $3}'`_$(date +%F)"
cp /etc/rc.local /backup/192.168.24.21_2019-11-14/rc.local_$(date +%F)
其他的文件以这种格式复制
%文件名_%日期
写成sh脚本:
[root@lnmp01 /]# vi backup.sh
IP=$(ifconfig ens192|awk -F '[ :]+' 'NR==2 {print $3}')
Path="/backup/$IP."
[ ! -d /backup/$IP ] && mkdir /backup/$IP -p
#!/bin/sh
tar zcf $Path/www_$(date +%F).tar.gz /var/html/www/
tar zcf $Path/conf_$(date +%F).tar.gz /var/spool/cron/root /etc/rc.local /etc/sysconfig/iptables /server/scrips
tar zcf $Path/log_$(date +%F).tar.gz /app/logs/
#backup to server
rsync -avz /backup rsync_backup@192.168.24.32::backup --password-file=/etc/rsync.password
#del
find /backup -type f -name "*.tar.gz" -mtime +7|xargs rm -f
制定定时任务:
[root@lnmp01 backup]# crontab -l
#####
00 00 * * * /bin/sh /server/scrips/backup.sh &> /dev/null
在服务端制定保留6个月的数据的定时任务
[root@localhost ~]# vi /server/scrips/backupdel.sh
/bin/find /backup -type f -name "*.tar.gz" -mtime +180|xargs rm -f
[root@localhost ~]# crontab -e
no crontab for root - using an empty one
#####
00 00 * * * /bin/sh /server/scrips/backupdel.sh
通过添加md5校验值确定文件完整性
[root@lnmp01 backup]# find /backup/ -type f -name "*$(date +%F).tar.gz"|xargs md5sum > /backup/flag_$(date +%F)
使用-c参数测试文件是否完整
[root@lnmp01 backup]# md5sum -c flag_2019-11-19