因公司近期业务要求需要搭建一套服务具体要求如下图:
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)
做全网备份首先做rsync服务
服务端backup搭建命令
cat >/etc/rsyncd.conf < #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 chkconfig --add syncd chkconfig syncd on vim /etc/init.d/syncd vim /etc/init.d/rsyncd [root@nfs01 scripts]# cat /etc/init.d/syncd 客服端nfs wed01 搭建命令
全网备份wed客服端脚本
全网备份服务端backup脚本
因为我们要受到服务端的邮件所以要在/etc/mail.rc 下面添加配置文件
2.配置 NFS 服务
Nfs服务端搭建命令
nfs挂载wed01客服端搭建命令
nfsg挂载backup客服端搭建命令
实时备份inotify安装
在NFS服务器上安装
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实时备份开机自启命令
#!/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