设为首页 收藏本站
查看: 1088|回复: 1

[经验分享] 【NFS项目实战二】NFS共享数据的时时同步推送备份

[复制链接]

尚未签到

发表于 2017-6-4 09:50:14 | 显示全部楼层 |阅读模式
【NFS项目实战二】NFS共享数据的时时同步推送备份
  标签(空格分隔): Linux服务搭建-陈思齐
  ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处,作者信息和本声明。否则将追究法律责任。http://www.cnblogs.com/chensiqiqi/
  [TOC]

前言

  《项目实战》系列为《linux实战教学笔记》第二阶段内容的同步教学配套实战练习,每个项目循序衔接最终将组成《Linux实战教学笔记》第二阶段核心教学目标10台规模的基础核心服务架构集群。本文上接http://www.cnblogs.com/chensiqiqi/p/6531003.html 项目实战一


企业案例
  公司有两台web服务器一直在对外提供服务,但随着业务的发展用户越来越多,网站的功能也越来越强大,各种图片,视频等占用硬盘空间越来越大。于是,领导将web服务器的数据直接存储到NFS服务器上作为存储使用;并且为了防止NFS服务器发生单点故障,领导希望将web服务器存储的内容实时同步到Rsync备份服务器上。现在由你来计划完成领导的需求。
  具体要求如下:


  • [x] NFS服务器的要求如下:

    • 服务器的共享目录名为/data目录;
    • 权限要求只能内网网段访问且可读可写,时时同步;
    • 为了方便管理人员管理,需要指定NFS虚拟账户为chensiqi,uid=12306,gid=12306
    • 所有访问者的身份都压缩为最低身份
    • 将/data目录里的内容同步时时推送到备份服务器的/data目录里(inotify+rsync)

  • [x] web服务器将NFS共享目录统一挂载到/var/html/www目录下
环境准备
  系统版本
  

[iyunv@nfs01 ~]# cat /etc/redhat-release
  
CentOS>  

  内核参数
  

[iyunv@nfs01 ~]# uname -r  
2.6.32-642.el6.x86_64
  

  主机网络参数设置

主机名
外网网卡
内网网卡
用途
web02
10.0.0.7/24
172.16.1.7/24
B1-apache web服务器
web01
10.0.0.8/24
172.16.1.8/24
B2-nginx web服务器
nfs01
10.0.0.31/24
172.16.1.31/24
C1-NFS存储服务器
backup
10.0.0.41/24
172.16.1.41/24
C2-rsync备份服务器
一,开始部署NFS服务器端nfs共享

第一步:NFS软件包安装
  yum -y install nfs-utils rpcbind

第二步:创建uid=12306,gid=12306的用户chensiqi
  

[iyunv@nfs01 ~]# useradd -u 12306 -s /sbin/nologin -M chensiqi
  
[iyunv@nfs01 ~]#>  
uid=12306(chensiqi) gid=12306(chensiqi) 组=12306(chensiqi)
  

第三步:修改/etc/exports配置文件
  

[iyunv@nfs01 ~]# echo "/data 172.16.1.0/24(rw,sync,all_squash,anonuid=12306,anongid=12306)" >> /etc/exports  
[iyunv@nfs01 ~]# cat /etc/exports
  
/data 172.16.1.0/24(rw,rsync,all_squash,anonuid=12306,anongid=12306)
  

第四步:启动NFS相关服务
  先启动rpcbind服务;再启动nfs服务
  

[iyunv@nfs01 ~]# /etc/init.d/rpcbind start  
正在启动 rpcbind:                                         [确定]
  
[iyunv@nfs01 ~]# /etc/init.d/nfs start
  
启动 NFS 服务:                                            [确定]
  
关掉 NFS 配额:                                            [确定]
  
启动 NFS mountd:                                          [确定]
  
启动 NFS 守护进程:                                        [确定]

  
Starting RPC>  
[iyunv@nfs01 ~]#
  

  

第五步:设置共享目录/data的属主和属组为指定用户
  

[iyunv@nfs01 ~]# chown -R chensiqi.chensiqi /data  
[iyunv@nfs01 ~]# ll -d /data
  
drwxr-xr-x. 2 chensiqi chensiqi 4096 3月  14 00:14 /data
  

第六步:进行本地挂载测试
  

[iyunv@nfs01 ~]# showmount -e  
Export list for nfs01:
  
/data 172.16.1.0/24
  
[iyunv@nfs01 ~]# hostname -I
  
10.0.0.31 172.16.1.31
  
[iyunv@nfs01 ~]# mount 172.16.1.31:/data /mnt
  
[iyunv@nfs01 ~]# ll -d /mnt
  
drwxr-xr-x. 2 chensiqi chensiqi 4096 3月  14 00:14 /mnt
  
[iyunv@nfs01 ~]# df
  
Filesystem           1K-blocks    Used Available Use% Mounted on
  
/dev/mapper/VolGroup-lv_root
  18003272 4154188  12927896  25% /
  
tmpfs                   502068       0    502068   0% /dev/shm
  
/dev/sda1               487652   34856    427196   8% /boot
  
172.16.1.31:/data     18003328 4154240  12928000  25% /mnt
  

第七步:设置rpcbind和nfs服务开机启动
  

[iyunv@nfs01 ~]# tail -3 /etc/rc.local  
#start up nfs service by chensiqi at 20170315
  
/etc/init.d/rpcbind start
  
/etc/init.d/nfs start
  
[iyunv@nfs01 ~]#
  

  

二,开始部署web端NFS客户端共享挂载
  配置web01服务器:

第一步:nfs客户端需要安装nfs-utils软件包
  yum -y install nfs-utils

第二步:挂载共享目录
  

[iyunv@web01 ~]# showmount -e nfs01  
Export list for nfs01:
  
/data 172.16.1.0/24
  
[iyunv@web01 ~]# mkdir -p /var/html/www
  
[iyunv@web01 ~]# showmount -e nfs01
  
Export list for nfs01:
  
/data 172.16.1.0/24
  
[iyunv@web01 ~]# mount 172.16.1.31:/data /var/html/www
  
[iyunv@web01 ~]# df
  
Filesystem           1K-blocks    Used Available Use% Mounted on
  
/dev/mapper/VolGroup-lv_root
  18003272 4815804  12266280  29% /
  
tmpfs                   502068       0    502068   0% /dev/shm
  
/dev/sda1               487652   34856    427196   8% /boot
  
172.16.1.31:/data     18003328 4154240  12928000  25% /mnt
  
172.16.1.31:/data     18003328 4154240  12928000  25% /var/html/www
  

第三步:测试写入数据
  

[iyunv@web01 ~]# cd /var/html/www  
[iyunv@web01 www]# ll
  
总用量 4
  
-rw-r--r--. 1 chensiqi chensiqi 0 3月  15 19:27 csfdsf
  
-rw-rw-r--. 1 chensiqi chensiqi 0 3月  14 00:14 test2
  
-rw-rw-r--. 1 chensiqi chensiqi 4 3月  14 00:14 test.txt
  
[iyunv@web01 www]# touch 11111
  
[iyunv@web01 www]# ll
  
总用量 4
  
-rw-r--r--. 1 chensiqi chensiqi 0 3月  15 19:34 11111
  
-rw-r--r--. 1 chensiqi chensiqi 0 3月  15 19:27 csfdsf
  
-rw-rw-r--. 1 chensiqi chensiqi 0 3月  14 00:14 test2
  
-rw-rw-r--. 1 chensiqi chensiqi 4 3月  14 00:14 test.txt
  

第四步:配置开机自动挂载
  

[iyunv@web01 www]# tail -1 /etc/rc.local  
mount -t nfs -o nodev,noexec,nosuid,rw  172.16.1.31:/data /var/html/www
  

  配置web02服务器:
  配置方式同web01服务器

三,配置Rsync备份服务器

  注意:由于在项目实战一全网备份里里已经配置过了,所以此处只需要修改一下配置文件


第一步:在配置文件/etc/rsyncd.conf里添加nfsbackup新模块
  在配置文件里添加如下内容
  

[nfsbackup]  
# 使用目录
  
path = /data/
  
# 有错误时忽略
  
ignore errors
  
# 可读可写(true或false)
  
read only = false
  
# 阻止远程列表(不让通过远程方式看服务端有啥)
  
list = false
  
# 允许IP
  
hosts allow = 172.16.1.0/24
  
# 禁止IP
  
hosts deny = 0.0.0.0/32
  
# 虚拟用户
  
auth users = rsync_backup
  
# 存放用户和密码的文件
  
secrets file = /etc/rsync.password
  

第二步:启动rsync服务
  方法一:如果没有编写rsync启动脚本
  

[iyunv@backup ~]# rsync --daemon  
[iyunv@backup ~]# ss -antup | grep rsync
  
tcp    LISTEN     0      5                     :::873                  :::*      users:(("rsync",7098,5))
  
tcp    LISTEN     0      5                      *:873                   *:*      users:(("rsync",7098,4))
  

  方法二:如果已经编写了启动脚本
  

[iyunv@backup ~]# /etc/init.d/rsyncd start  
Starting Rsync:                                            [确定]
  
[iyunv@backup ~]# ss -antup | grep rsync
  
tcp    LISTEN     0      5                     :::873                  :::*      users:(("rsync",7098,5))
  
tcp    LISTEN     0      5                      *:873                   *:*      users:(("rsync",7098,4))
  

第三步:rsync服务加入开机启动
  

[iyunv@backup ~]# echo ". /etc/init.d/rsyncd start" >> /etc/rc.local  
[iyunv@backup ~]# tail -1 /etc/rc.local
  
. /etc/init.d/rsyncd start
  

四,在NFS服务端配置inotify事件监控工具

第一步:安装inotify事件监控工具
  此工具需要安装epel源
  
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
  

[iyunv@nfs01 ~]# yum -y install inotify-tools  

第二步:进行rsync + inotify时时推送测试
  开两个shell窗口
  

在第一个窗口输入如下内容:  
[iyunv@nfs01 ~]# inotifywait -mrq --format '%w%f' -e delete,close_write,create /data
  
输入后,shell处于阻塞状态(时时监控)
  

  
在另一个窗口的/data目录进行创建,修改,删除测试:
  
此时我们可以发现当前处于阻塞状态的shell窗口会记录所有目录发生改变的情况
  

  
命令说明:
  
inotifywait:监控命令
  
-m:持续不断的进行监控(处于阻塞状态)
  
-r:递归监控,监控目录及目录的所有子目录
  
-q:只输出简单的监控信息
  
--format:指定监控数据输出的格式
  
-e:指定监控的事件类型
  
delete:删除事件
  
close_write:文件写入的关闭事件(其实就是监控修改文件)
  
create:创建事件
  

第三步:编写inotify + inotify 时时同步推送脚本
#!/bin/bash  

  
Path=/data
  
backup_Server=172.16.1.41
  

  

  
/usr/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete /data | while read line
  
do
  if [ -f $line ];then
  rsync -az $line --delete rsync_backup@$backup_Server::nfsbackup --password-file=/etc/rsync.password
  else
  cd $Path &&\
  rsync -az ./ --delete rsync_backup@$backup_Server::nfsbackup --password-file=/etc/rsync.password
  fi
  
done

第四步:脚本加入开机(后台)启动
  

[iyunv@nfs01 ~]# echo "sh /server/scripts/inotify.sh &" >> /etc/rc.local  

  

第五步:进行同步测试
  NFS存储服务器:进行如下操作
  

[iyunv@nfs01 ~]# cd /data  
[iyunv@nfs01 data]# ll
  
总用量 4
  
-rw-r--r--. 1 root root 4 3月  15 21:02 aaa
  
[iyunv@nfs01 data]# touch chensiqi  #创建
  
[iyunv@nfs01 data]# ll
  
总用量 4
  
-rw-r--r--. 1 root root 4 3月  15 21:02 aaa
  
-rw-r--r--. 1 root root 0 3月  15 21:16 chensiqi
  
[iyunv@nfs01 data]# echo 1111 >> chensiqi #修改
  
[iyunv@nfs01 data]# ll
  
总用量 8
  
-rw-r--r--. 1 root root 4 3月  15 21:02 aaa
  
-rw-r--r--. 1 root root 5 3月  15 21:17 chensiqi
  
[iyunv@nfs01 data]# rm -rf aaa  #删除
  

  rsync备份服务器:查看目录同步效果
  

[iyunv@backup ~]# cd /data  
[iyunv@backup data]# ll
  
总用量 4
  
-rw-r--r--. 1 rsync rsync 5 3月  15 2017 chensiqi
  
[iyunv@backup data]# cat chensiqi
  
1111
  
[iyunv@backup data]#
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-383385-1-1.html 上篇帖子: Hadoop单机和伪分布式安装 下篇帖子: 在Dubbo中使用高效的Java序列化(Kryo和FST)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表