第1章 50台集群服务器全网备份解决方案
1.1基本备份要求
已知3台服务器主机名分别为A(web01)、B(backup) 、C(nfs01)
要求:每天晚上00 点整在Web服务器A上打包备份系统配置文件、网站程序目录及访
问日志并通过rsync命令推送备份服务器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 上,保留每周一的所有数据副本,其它要保留 6个月的数据副本。
7)备份服务器B上要按照备份数据服务器的IP为目录保存备份,备份的文件按照时间名字保存
===========================================================================================1.1.1准备环境:
1.1.1.1 #服务端环境:
rpm -qa rsync
yum install rsync -y
useradd -s /sbin/nologin -M rsync
id rsync
vim /etc/rsyncd.conf
echo "rsync_backup:oldboy">/etc/rsync.password
chmod 600 /etc/rsync.password
mkdir /backup -p
chown -R rsync.rsync /backup
rsync --daemon
ps -ef|grep rsync|grep -v grep
1.1.1.2 #客户端环境:
echo "oldboy" >/etc/rsync.password
chmod 600 /etc/rsync.password
mkdir /backup -p
==================================客户端推送脚本===========================================
#!/bin/sh
ip=$(ifconfig eth0|awk -F "[: ]+"‘NR==2{print $4}‘)
path="/backup"
[ ! -d ${path}/$ip ] && mkdir -p${path}/$ip &> /dev/null
DATE=`date +%u -d "-1day"`
if [ $DATE -eq 1 ];then
DATE=${DATE}_MON
fi
#tar
cd / && \
tar zcf /$path/$ip/conf_${DATE}.tar.gzvar/spool/cron/root etc/rc.local server/scripts etc/sysconfig/iptables&&\
tar zcf /$path/$ip/www_${DATE}.tar.gzvar/html/www && \
tar zcf /$path/$ip/logs_${DATE}.tar.gzapp/logs && \
#md5sum
find $path -type f -name"*.tar.gz"|xargs md5sum >/$path/$ip/bak_${DATE}.flag
#rsync
rsync -az /$path/[email protected]::backup --password-file=/etc/rsync.password
#delete
find $path/$ip -type f -mtime +7|xargs rm-f
=====================================服务端脚本============================================
#!/bin/sh
ip=$(ifconfig eth1|awk -F "[: ]+"‘NR==2{print $4}‘)
path="/backup"
[ ! -d ${path}/$ip ] && mkdir -p${path}/$ip &> /dev/null
DATE=`date +%u -d "-1day"`
if [ $DATE -eq 1 ];then
DATE=${DATE}_MON
fi
find /backup/ -type f -name"bak_*.flag"|xargs md5sum -c >/$path/$ip/mail.${DATE}.log
mail -s "backup web_${DATE}-lm"[email protected] <$path/$ip/mail.${DATE}.log
find $path -type f ! -name"*MON*" -mtime +180|xargs rm -f
第2章 网站集群后端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 服务
- 硬件:sas/ssd磁盘,买多块,硬件raid,指定raid5或raid10.网卡吞吐量要大,至少千兆(多块bond)
- NFS服务器端配置:/data 10.0.0.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534)
- NFS客户端挂载优化配置命令:
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,rsize=131072,wsize=13107210.0.0.31:/data/ /mnt ←兼顾安全性能
- 对NFS 服务的所有服务器内核进行优化时,执行如下命令:
cat >>/etc/sysctl.conf<<EOF
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
EOF
sysctl -p
- 如果卸载的时候提示“umount: /mnt: device is busy”,需要退出挂载目录再进行卸载,如果是NFS Server宕机了,则需要强制卸载,可执行umount -lf /mnt
- 大型网站NFS网站文件系统的替代软件为分布式文件系统Moosefs(nfs)、GlusterFS(大文件)、FastNFS。
NFS系统应用的优缺点说
====================================服务端环境=============================================
yum install nfs-utils rpcbind -y
mkdir /data/w_shared -p
mkdir /data/r_shared -p
chown -R nfsnobody.nfsnobody /data/
/etc/init.d/rpcbind start
/etc/init.d/nfs start
vim /etc/exports
/data/r_shared 172.16.1.0/24(ro,sync,all_squash)
/data/w_shared172.16.1.0/24(rw,sync,all_squash)
====================================客户端挂载=============================================
[backup]
mount -t nfs 172.16.1.31:/data/r_shared/data/r_luoming/
mount -t nfs 172.16.1.31:/data/w_shared/data/w_luoming/
[web01]
mount -t nfs 172.16.1.31:/data/r_shared/data/b_r
mount -t nfs 172.16.1.31:/data/w_shared/data/b_w
操作示例:
[[email protected] b_w]# pwd
/data/b_w
[[email protected] b_w]# touch oldboy{1..5}.txt
[[email protected] b_w]# ls
oldboy1.txt oldboy2.txt oldboy3.txt oldboy4.txt oldboy5.txt
[[email protected] w_shared]# pwd
/data/w_shared
[[email protected] w_shared]# ls
oldboy1.txt oldboy2.txt oldboy3.txt oldboy4.txt oldboy5.txt
[[email protected] w_luoming]# pwd
/data/w_luoming
[[email protected] w_luoming]# ls
oldboy1.txt oldboy2.txt oldboy3.txt oldboy4.txt oldboy5.txt
[[email protected] b_r]# touch 123.txt
touch: cannot touch `123.txt‘: Read-onlyfile system ---只读
第3章 解决网站集群后端NFS共享存储单点实现实时数据同步
1、实时数据同步要求:
当用户通过 web 服务器将数据写入到 NFS 服务器C(nfs01)时,同时复制到备份服务器B(backup)
nfs服务端配置文件:
[[email protected] data]# cat /etc/exports
#share /data by lm at 20161228
/data 172.16.1.0/24(rw,sync,all_squash)
共享目录:
[[email protected] data]# ll -d /data/
drwxr-xr-x 4 nfsnobody nfsnobody 266240 Jan 7 20:52 /data/
nfs服务端脚本:
vim /server/scripts/inotify.sh
#!/bin/sh
Path=/data
Ip=172.16.1.41
/usr/bin/inotifywait -mrq --format ‘%w%f‘ -ecreate,delete,close_write /data/ |while read line
do
if [ -f$line ];then
rsync-az $line --delete [email protected]$Ip::nfsbackup--password-file=/etc/rsync.password
else
cd $Path&& \
rsync-az /data/ --delete [email protected]$Ip::nfsbackup--password-file=/etc/rsync.password
fi
done
web客户端挂载:
[[email protected] mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 6.9G 1.5G 5.1G 23%/
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 33M 147M 19% /boot
172.16.1.31:/data 6.9G 1.6G 4.9G 25% /mnt
创建文件:
[[email protected] mnt]# touch lidao.txt
nfs服务端查看:
[[email protected] data]# ll lidao.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jan 7 20:58 lidao.txt
查看backup备份服务器:
[[email protected] nfsbackup]# ll lidao.txt
-rw-r--r-- 1 rsync rsync 0 Jan 7 20:58 lidao.txt