因公司近期业务要求需要搭建一套服务具体要求如下图:
1、基本备份要求
已知 3 台服务器主机名分别为A(web01)、B(backup) 、C(nfs01)
要求: 每天晚上 0 00 点整在 b Web 服务器 A A 上 打包 备份系统配置文件、网站程序目录及访
问日志并通过 c rsync 命令推送备份服务器 B B 上备份保留(备份思路可以是先在本地按日期
打包,然后再推到备份服务器 B 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 天,因为太多硬盘会满)
6) 备份服务器 B B 上, , 保留 每周一的所有数据副本,其它 要保留 6 6 个月 的 数据副本。
7)备份服务器 B 上要按照备份数据服务器的IP 为目录保存备份,备份的文件按照时间名字
保存。
特别提示:本题在工作中是网站生产环境全网备份项目方案的一个小型模拟,很有意义。
2、本项目的整个备份逻辑结构如下图:
特别说明:
1)工作中领导很可能不会告诉你如何去做,只会提需求,例如:小崔,WEB 服务器很重要,
请你把数据在别的服务器备份一份(定期的备份)。
2)逻辑架构图更不可能是领导给你画,而是你理解了领导的意思,然后自己想出备份的方
案,最后,在实施前你做的一个图纸而已。
3、需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果
信息发给系统管理员邮箱中。
(三)网站集群后端 NFS 共享存储搭建及优化解决方案
1、配置 NFS 服务:
要求:
1)在 NFS 服务端 C(nfs01)上共享/data/w_shared及/data/r_shared 两个文件目录,允许从 NFS
客户端 A(web01)、B(backup)上分别挂载共享目录后可实现从 A(web01)、B(backup)上只读
/data/r_shared,可写/data/w_shared。
2)NFS 客户端 A(web01)上的挂载点为/data/b_w(写),/data/b_r(读),
NFS 客户端 B(backup)上的挂载点为/data/w_你的名字英文(写),/data/r_你名字英文
(读)。
3)从NFS客户端B(backup)上的NFS可写挂载点目录创建任意文件,从NFS客户端A(web01)
上可以删除这个创建的文件,反之也可以。
4)问答题:如何优化 NFS 服务?
2、本项目的整个备份逻辑结构如下图(红色虚线部分):
(四)解决网站集群后端 NFS 共享存储单点实现实时数据同步
1、实时数据同步要求:
当用户通过 web 服务器将数据写入到 NFS 服务器 C(nfs01)时,同时复制到备份服务器
B(backup)
cat >/etc/rsyncd.conf <<EOF
#Rsync server
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 = 172.16.1.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#####################################
[backup]
comment = by oldboy 28qi liangye
path = /backup
[nfsbackup]
Path = /nfsbackup
EOF
useradd-s /sbin/nologin -M rsync
mkdir/backup
mkdir/nfsbackup
chown�R rsync.rsync /nfsbackup
chown-R rsync.rsync /backup
echo"rsync_backup:oldboy" >/etc/rsync.password
chmod600 /etc/rsync.password
rsync --daemon
lsof-i:873
echo"/usr/bin/rsync --daemon" >>/etc/rc.local
echo "oldboy">/etc/rsync.password
chmod 600 /etc/rsync.password
mkdir /backup
touch /backup/stu{1..5}
rsync -avz /backup/[email protected]::backup --password-file=/etc/rsync.password
cd / &&\
ip=`ifconfig eth1|awk -F "[: ]+"'NR==2{print $4}'`
mkdir /backup/$ip -p
tar zcfh /backup/$ip/bak_$(date+%F_%w).tar.gz var/www/html app/logs var/spool/cron/root etc/rc.local etc/sysconfig/iptables server/scripts &&\
find /backup/$ip -type f -name"*$(date +%F_%w).tar.gz"|xargs md5sum >/backup/$ip/flag_$(date+%F_%w).txt &&\
rsync -av /backup/[email protected]::backup/ --password-file=/etc/rsync.password
find /backup/$ip -type f -mtime +7 -name"*.tar.gz"|xargs rm �fr
LANG=en
flag_num=/tmp/check_$(date +%F).txt
find /backup/ -type f -name"flag_$(date +%F_%w).txt"|xargs md5sum -c|grep FAILED&>$flag_num
if [ `cat $flag_num|wc -l` -gt 0 ];then
mail -s "$(date +%F\ %T) backup is fail!!" [email protected]<$flag_num
else
echo "backup is ok"|mail -s "$(date +%F\ %T) backup issuccessful" [email protected]
fi
#find /backup/172.16.1.31/ -type f -mtime -7 \! -name "bak*_6.tar.gz"|xargs rm �fr
set [email protected] smtp=smtp.163.comsmtp-auth-user=15855557337 smtp-auth-password=cai1234 smtp-auth=login
yum install nfs-utils rpcbind �y
mkdir /data/w_share -p
mkdir /data/r_share -p
echo "/data/w_share172.16.1.0/24(rw,sync)">>/etc/exports
echo "/data/r_share 172.16.1.0/24(ro,sync)">>/etc/exports
chown -R nfsnobody:nfsnobody /data&&\
chown -R nfsnobody:nfsnobody /data/r_share/
chown -R nfsnobody:nfsnobody /data/w_share
/etc/init.d/rpcbind restart
/etc/init.d/rpcbind restart
/etc/init.d/nfs restart
/etc/init.d/nfs restart
yum install nfs-utils rpcbind-y
/etc/init.d/rpcbind restart
/etc/init.d/rpcbind restart
/etc/init.d/nfs restart
/etc/init.d/nfs restart
showmount -e 172.16.1.31
mkdir /data/w_caizhiliang �p
mkdir /data/r_caizhiliang �p
mount -t nfs 172.16.1.31:/data/w_share /data/w_caizhiliang
mount -t nfs172.16.1.31:/data/r_share /data/r_caizhiliang
echo"/usr/bin/mount -t nfs 172.16.1.31:/data/r_share /data/r_caizhiliang” >> /etc/rc.loca
echo"/usr/bin/mount -t nfs 172.16.1.31:/data/w_share /data/w_caizhiliang” >> /etc/rc.loca
yum install nfs-utils rpcbind -y
/etc/init.d/rpcbind restart
/etc/init.d/rpcbind restart
/etc/init.d/nfs restart
/etc/init.d/nfs restart
showmount -e 172.16.1.31
mkdir /data/d_w �p
mkdir /data/d_r �p
mount -t nfs 172.16.1.31:/data/w_share /data/d_w
mount -t nfs 172.16.1.31:/data/r_share /data/d_r
echo "/usr/bin/mount -t nfs 172.16.1.31: /data/r_share /data/d_r”>> /etc/rc.loca
echo "/usr/bin/mount -t nfs 172.16.1.31: /data/w_share /data/d_w”>> /etc/rc.loca
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo&&\
yum install inotify-tools �y
实时备份脚本
#!/bin/bash
Path=/data
Ip=172.16.1.41
/usr/bin/inotifywait -mrq --format '%w%f' -e close_write,delete $Path \
|while read file
do
if [ -f $file ];then
rsync -az $file --delete rsync_backup@$Ip::nfsbackup --password-file=/etc/rsync.password
else
cd $Path &&\
rsync -az ./ --delete rsync_backup@$Ip::nfsbackup --password-file=/etc/rsync.password
fi
done
chkconfig --add syncd
chkconfig syncd on
vim /etc/init.d/syncd
vim /etc/init.d/rsyncd
[root@nfs01 scripts]# cat /etc/init.d/syncd
#!/bin/bash
#chkconfig: 2345 38 46
################################################
. /etc/init.d/functions
if [ $# -ne 1 ];then
usage: $0 {start|stop}
exit 1
fi
case "$1" in
start)
/bin/bash /server/scripts/shishibeifen.sh&
echo $$ >/var/run/inotify.pid
if [ `ps -ef|grep inotify|wc -l` -gt 2 ];then
action "inotify service is started" /bin/true
else
action "inotif yservice is started" /bin/false
fi
;;
stop)
kill -9 `cat /var/run/inotify.pid` >/dev/null 2>&1
pkill inotifywait
sleep 2
if [ `ps -ef|grep inotify|grep -v grep|wc -l` -eq 0 ];then
action "inotify service is stopped" /bin/true
else
action "inotify service is stopped" /bin/false
fi
;;
*)
usage: $0 {start|stop}
exit 1
esac