目 录
老男孩教育 linux 运维就业班第八和九关(周)课后学习效果能力上机大考察
1.4 解决网站集群后端 NFS 共享存储单点实现实时数据同步
1.4.2 配置nfs和backup服务器实时同步(rsync+inotify)
老男孩教育linux 运维就业班第八和九关(周)课后学习效果能力上机大考察
(我们不生产企业项目方案,我们只是企业项目方案的搬运工)
(共 3 道题,每题 33.3 分共 100 分)
1)16:00 开考,闭卷考察时间 90 分钟!务必还原快照,模拟企业工作中搭建环境。
2)交卷时间 17:30 分钟,保留环境,举手找到技术班主任、或指定导师检查后记录成绩。
3)考试完毕后整个部署过程需要记录笔记提交作业保留。
1.1 逻辑图
1.2 50 台集群服务器全网数据备份解决方案
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 为目录保存备份,备份的文件按照时间名字 保存。
特别提示:本题在工作中是网站生产环境全网备份项目方案的一个小型模拟,很有意义。
2、本项目的整个备份逻辑结构如下图:
特别说明:
1)工作中领导很可能不会告诉你如何去做,只会提需求,例如:小崔,WEB 服务器很重要,请你把数据在别的服务器备份一份(定期的备份)。
2)逻辑架构图更不可能是领导给你画,而是你理解了领导的意思,然后自己想出备份的方 案,最后,在实施前你做的一个图纸而已。
3、需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果
信息发给系统管理员邮箱中。
1.2.1 一、搭建rsync备份服务器
在backup服务器上操作(服务端)
1、检查rsync是否安装
[root@backup ~]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
2、创建用户rsync
[root@backup ~]# useradd rsync -s /sbin/nologin –M
[root@backup ~]# id rsync
uid=501(rsync) gid=501(rsync) 组=501(rsync)
3、创建/etc/rsyncd.conf
[root@backup backup]# cat /etc/rsyncd.conf
#!/bin/sh
uid = rsync
gid = rsync
userchroot = no
read only = false
[backup]
path = /backup
auth users = rsync_backup
secrets file = /etc/rsync.password
完整配置文件
##rsyncd.conf start##
uid=rsync #配置uid
gid=rsync #配置gid
use chroot = no #安全机制,可不配
max connections = 200 #最大连接数
timeout = 300 #超时时间
pid file = /var/run/rsyncd.pid #pid文件
lock file = /var/run/rsync.lock #锁文件
log file = /var/log/rsyncd.log #日志文件
[backup] #模块名
path = /backup #路径
ignore errors #忽略错误
read only = false #可写
list = false #不允许列表
hosts allow = 10.0.0.0/24 #允许主机
hosts deny = 0.0.0.0/32 #拒绝主机
auth users = rsync_backup #用户名
secrets file = /etc/rsync.password #密码文件
4、创建/backup/目录并授权权限
[root@backup ~]# mkdir /backup/
[root@backup ~]# chown -R rsync.rsync /backup/
[root@backup ~]# ls -ld /backup/
drwxr-xr-x 2 rsync rsync 4096 6月 1 12:42 /backup/
5、设置用户名和密码文件/etc/rsync.password
[root@backup ~]# echo "rsync_backup:oldboy" >/etc/rsync.password
[root@backup ~]# chmod 600 /etc/rsync.password
[root@backup ~]# ll /etc/rsync.password
-rw------- 1 root root 20 6月 1 12:43 /etc/rsync.password
[root@backup ~]# cat /etc/rsync.password
rsync_backup:oldboy
6、启动rsync服务
[root@backup ~]# rsync --daemon
[root@backup ~]# lsof -i :873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 1962 root 3u IPv4 12587 0t0 TCP *:rsync (LISTEN)
rsync 1962 root 5u IPv6 12588 0t0 TCP *:rsync (LISTEN)
在web01上做操作(客户端)
1、创建/backup/目录
[root@web01 ~]# mkdir /backup
[root@web01 ~]# ls -ld /backup/
drwxr-xr-x 2 root root 4096 6月 1 12:46 /backup/
2、创建密码文件/etc/rsync.password
[root@web01 ~]# echo "oldboy" >/etc/rsync.password
[root@web01 ~]# cat /etc/rsync.password
oldboy
3、给rsync.password密码文件授于600权限
[root@web01 ~]# chmod 600 /etc/rsync.password
[root@web01 ~]# ll /etc/rsync.password
-rw------- 1 root root 7 6月 1 12:46 /etc/rsync.password
4、使用rsync进行推拉数据
推:
[root@web01 ~]# cd /backup/
[root@web01 backup]# ls
[root@web01 backup]# touch {a..z}
[root@web01 backup]# ls
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@web01 backup]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
./
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
sent 1121 bytes received 505 bytes 3252.00 bytes/sec
total size is 0 speedup is 0.00
拉:
[root@web01 backup]# rsync -avz rsync_backup@172.16.1.41::backup /backup/ --password-file=/etc/rsync.password
receiving incremental file list
./
1
10
2
3
4
5
6
7
8
9
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
sent 751 bytes received 1724 bytes 4950.00 bytes/sec
total size is 0 speedup is 0.00
[root@web01 backup]# ls
1 10 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z
1.2.2 二、web01本地测试
[root@web01 backup]# cd /
[root@web01 /]# mkdir /var/html/www/ -p
[root@web01 /]# mkdir /app/logs -p
[root@web01 /]# touch /var/html/www/html{1..10}.log
[root@web01 /]# touch /app/logs/java{a..h}.txt
[root@web01 /]# tar zcfh /backup/conf_$(date +%F).tar.gz etc/rc.local etc/sysconfig/iptables var/spool/cron/root
[root@web01 /]# ls /backup/
conf_2016-06-01.tar.gz
[root@web01 /]# tar zcf /backup/log_$(date +%F).tar.gz var/html/www/ app/logs/
[root@web01 /]# ls /backup/
conf_2016-06-01.tar.gz log_2016-06-01.tar.gz
[root@web01 /]# tar zcf /backup/sh_$(date +%F).tar.gz server/scirpts/
[root@web01 /]# ls /backup/
conf_2016-06-01.tar.gz log_2016-06-01.tar.gz sh_2016-06-01.tar.gz
1.2.3 web01本地脚本
[root@web01 scirpts]# cat bak.sh
#!/bin/sh
LANG=en
if [ `date +%w` -eq 1 ];then
DATE="$(date +%F)_mon"
else
DATE=$(date +%F)
fi
IP=$(ifconfig eth0|awk -F "[ :]+" ‘NR==2{print $4}‘)
Path="/backup/$IP"
[ ! -d $Path ] && mkdir $Path -p
#tar
cd / &&\
tar zcfh $Path/conf_${DATE}.tar.gz etc/rc.local etc/sysconfig/iptables var/spool/cron/root
tar zcf $Path/log_${DATE}.tar.gz var/html/www/ app/logs/
tar zcf $Path/sh_${DATE}.tar.gz server/scirpts/
#flag
find /backup/ -type f -name "*.tar.gz"|xargs md5sum >$Path/flag_${DATE}_${IP}
#rsync
rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
#del before 7day
find $Path/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f
1.2.4 本地定时任务
[root@web01 scirpts]# crontab -l
#bak to 41
00 00 * * * /bin/sh /server/scirpts/bak.sh >/dev/null 2>&1
1.2.5 backup服务器上脚本
cat check.sh
#!/bin/sh
find /backup/ -type f -name "flag*"|xargs md5sum -c >/opt/flag_mail_$(date +%F).txt
mail -s "web服务器备份$(date +%F) to 王凯" wangkaiok30@163.com </opt/flag_mail_$(date +%F).txt
find /backup/ -type f ! -name "*_mon.tar.gz" -mtime +180|xargs rm -f
配置/etc/mail.rc,切换到最后,插入如下内容:
set from=wangkaiok30@163.com smtp=smtp.163.com smtp-auth-user=wangkaiok30 smtp-auth-password=wk123 smtp-auth=login
1.2.6 backup定时任务
[root@backup scirpts]# crontab -l
00 08 * * * /bin/sh /server/scirpts/check.sh >/dev/null 2>&1
1.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、本项目的整个备份逻辑结构如下图(红色虚线部分):
1.3.1 实战
#1、安装软件
yum install nfs-utils rpcbind -y
rpm -qa nfs-utils rpcbind
#2、启动服务(注意先后顺序)
/etc/init.d/rpcbind start
rpcinfo -p localhost
/etc/init.d/nfs start
rpcinfo -p localhost
#3、设置开机自启动
chkconfig nfs on
chkconfig rpcbind on
#4、配置nfs服务
[root@nfs01 data]# mkdir /data/w_shared -p
[root@nfs01 data]# mkdir /data/r_shared -p
[root@nfs01 data]# ls
r_shared w_shared
cat >>/etc/exports <<EOF
####/data/w_shared
/data/w_shared 172.16.1.0/24(rw,sync)
####/data/r_shared
/data/r_shared 172.16.1.0/24(ro,sync)
EOF
#(查看nfs默认使用的用户以及共享的参数cat /var/lib/nfs/etab)
chown -R nfsnobody.nfsnobody /data/
ls -ld /data/
#5、重新加载服务(优雅重启)
/etc/init.d/nfs reload =====exportfs -r
#6、检查或测试挂载
showmount -e localhost
####客户端(nfs)
#1、安装软件
yum install nfs-utils rpcbind -y
rpm -qa nfs-utils rpcbind
#2、启动rpcbind
/etc/init.d/rpcbind start
#3、配置开机自启动
chkconfig rpcbind on
#4、测试服务端共享情况
showmount -e 172.16.1.31
#5、挂载
[root@backup /]# mkdir /data/w_wangkai -p
[root@backup /]# mkdir /data/r_wangkai -p
[root@backup /]# ls /data/
r_wangkai w_wangkai
[root@backup /]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data/r_shared 172.16.1.0/24
/data/w_shared 172.16.1.0/24
[root@backup /]# mount -t nfs 172.16.1.31:/data/w_shared /data/w_wangkai/
[root@backup /]# mount -t nfs 172.16.1.31:/data/r_shared /data/r_wangkai/
[root@backup /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.6G 1.5G 6.8G 18% /
tmpfs 242M 0 242M 0% /dev/shm
/dev/sda1 190M 36M 145M 20% /boot
172.16.1.31:/data/w_shared
8.6G 1.5G 6.8G 18% /data/w_wangkai
172.16.1.31:/data/r_shared
8.6G 1.5G 6.8G 18% /data/r_wangkai
#6、backup测试读,写
[root@backup data]# cd r_wangkai/
[root@backup r_wangkai]# ls
oldboy oldgirl20 oldgirl21 oldgirl22 oldgirl23 oldgirl24 oldgirl25 oldgirl26 oldgirl27 oldgirl28 oldgirl29 oldgirl30
[root@backup r_wangkai]# rm -f oldgirl*
rm: 无法删除"oldgirl20": 只读文件系统
rm: 无法删除"oldgirl21": 只读文件系统
rm: 无法删除"oldgirl22": 只读文件系统
rm: 无法删除"oldgirl23": 只读文件系统
rm: 无法删除"oldgirl24": 只读文件系统
rm: 无法删除"oldgirl25": 只读文件系统
rm: 无法删除"oldgirl26": 只读文件系统
rm: 无法删除"oldgirl27": 只读文件系统
rm: 无法删除"oldgirl28": 只读文件系统
rm: 无法删除"oldgirl29": 只读文件系统
rm: 无法删除"oldgirl30": 只读文件系统
[root@backup r_wangkai]# cd ..
[root@backup data]# cd
r_wangkai/ w_wangkai/
[root@backup data]# cd w_wangkai/
[root@backup w_wangkai]# ls
l u v w x y z
[root@backup w_wangkai]# touch {1..10}
[root@backup w_wangkai]# ls
1 10 2 3 4 5 6 7 8 9 l u v w x y z
####Web01测试读,写
[root@web01 b_r]# ls
oldboy oldgirl20 oldgirl21 oldgirl22 oldgirl23 oldgirl24 oldgirl25 oldgirl26 oldgirl27 oldgirl28 oldgirl29 oldgirl30
[root@web01 b_r]# rm -f oldgirl*
rm: 无法删除"oldgirl20": 只读文件系统
rm: 无法删除"oldgirl21": 只读文件系统
rm: 无法删除"oldgirl22": 只读文件系统
rm: 无法删除"oldgirl23": 只读文件系统
rm: 无法删除"oldgirl24": 只读文件系统
rm: 无法删除"oldgirl25": 只读文件系统
rm: 无法删除"oldgirl26": 只读文件系统
rm: 无法删除"oldgirl27": 只读文件系统
rm: 无法删除"oldgirl28": 只读文件系统
rm: 无法删除"oldgirl29": 只读文件系统
rm: 无法删除"oldgirl30": 只读文件系统
[root@web01 b_r]# cd ..
[root@web01 data]# ls
b_r b_w
[root@web01 data]# cd b_w/
[root@web01 b_w]# ls
1 10 2 3 4 5 6 7 8 9 l u v w x y z
[root@web01 b_w]# rm -f {4..9}
[root@web01 b_w]# ls
1 10 2 3 l u v w x y z
1.4 解决网站集群后端 NFS 共享存储单点实现实时数据同步
1、实时数据同步要求:
当用户通过 web 服务器将数据写入到 NFS 服务器 C(nfs01)时,同时复制到备份服务器
B(backup)
2、逻辑图如下:
1.4.1 实战
1.4.2 配置nfs和backup服务器实时同步(rsync+inotify)
1.4.3 Rsync脚本配置变动
[root@backup backup]# cat /etc/rsyncd.conf
##rsyncd.conf start##
uid=rsync
gid=rsync
use chroot = no
max connections = 200
timeout = 300
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 = 10.0.0.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup by wangkai"
path = /backup
[data]
path = /data
1.4.4 部署inotify
#1、使用EPEL yum源(也可编译安装)
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
#2、安装inotify-tools安装包
yum install inotify-tools -y
#3、监控测试
inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f‘ -e close_write,delete /backup
#4、写脚本进行监控
[root@nfs01 scripts]# cat inotify_data.sh
#!/bin/sh
/usr/bin/inotifywait -mrq --format ‘%w%f‘ -e create,close_write,delete /data \
|while read file
do
cd /data &&
rsync -az /data/ --delete rsync_backup@172.16.1.41::data \
--password-file=/etc/rsync.password
done
现backup变换角色,需先把挂载点卸载掉
最后测试结果
用户写入数据,先写加web01的/data/目录中,由web01通过nfs文件系统,从而到达nfs中的/data/目录,然后nfs和backup服务器做实时同步,使数据到达backup服务器的/data目录中。Rsync做了多个模块的实例。
[root@web01 b_w]# touch yonghu{1..10}
[root@web01 b_w]# ls
yonghu1 yonghu10 yonghu2 yonghu3 yonghu4 yonghu5 yonghu6 yonghu7 yonghu8 yonghu9
[root@nfs01 w_shared]# ls
yonghu1 yonghu10 yonghu2 yonghu3 yonghu4 yonghu5 yonghu6 yonghu7 yonghu8 yonghu9
[root@backup w_shared]# ls
yonghu1 yonghu10 yonghu2 yonghu3 yonghu4 yonghu5 yonghu6 yonghu7 yonghu8 yonghu9
附件列表