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

标签(空格分隔): Linux服务搭建-陈思齐

---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处,作者信息和本声明。否则将追究法律责任。http://www.cnblogs.com/chensiqiqi/


目录

前言

《项目实战》系列为《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目录下

环境准备

系统版本

[root@nfs01 ~]# cat /etc/redhat-release
CentOS release 6.8 (Final)

内核参数

[root@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

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

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

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

第四步:启动NFS相关服务

先启动rpcbind服务;再启动nfs服务

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

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

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

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

[root@nfs01 ~]# showmount -e
Export list for nfs01:
/data 172.16.1.0/24
[root@nfs01 ~]# hostname -I
10.0.0.31 172.16.1.31
[root@nfs01 ~]# mount 172.16.1.31:/data /mnt
[root@nfs01 ~]# ll -d /mnt
drwxr-xr-x. 2 chensiqi chensiqi 4096 3月 14 00:14 /mnt
[root@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服务开机启动

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

二,开始部署web端NFS客户端共享挂载

配置web01服务器:

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

yum -y install nfs-utils

第二步:挂载共享目录

[root@web01 ~]# showmount -e nfs01
Export list for nfs01:
/data 172.16.1.0/24
[root@web01 ~]# mkdir -p /var/html/www
[root@web01 ~]# showmount -e nfs01
Export list for nfs01:
/data 172.16.1.0/24
[root@web01 ~]# mount 172.16.1.31:/data /var/html/www
[root@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

第三步:测试写入数据

[root@web01 ~]# cd /var/html/www
[root@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
[root@web01 www]# touch 11111
[root@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

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

[root@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启动脚本

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

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

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

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

[root@backup ~]# echo ". /etc/init.d/rsyncd start" >> /etc/rc.local
[root@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

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

第二步:进行rsync + inotify时时推送测试

开两个shell窗口

在第一个窗口输入如下内容:
[root@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

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

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

第五步:进行同步测试

NFS存储服务器:进行如下操作

[root@nfs01 ~]# cd /data
[root@nfs01 data]# ll
总用量 4
-rw-r--r--. 1 root root 4 3月 15 21:02 aaa
[root@nfs01 data]# touch chensiqi #创建
[root@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
[root@nfs01 data]# echo 1111 >> chensiqi #修改
[root@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
[root@nfs01 data]# rm -rf aaa #删除

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

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

【NFS项目实战二】NFS共享数据的时时同步推送备份的更多相关文章

  1. miniFTP项目实战二

    项目简介: 在Linux环境下用C语言开发的Vsftpd的简化版本,拥有部分Vsftpd功能和相同的FTP协议,系统的主要架构采用多进程模型,每当有一个新的客户连接到达,主进程就会派生出一个ftp服务 ...

  2. 设备数据通过Azure Functions 推送到 Power BI 数据大屏进行展示(2.Azure Functions实战)

    本案例适用于开发者入门理解Azure Functions/ IoT Hub / Service Bus / Power BI等几款产品. 主要实战的内容为: 将设备遥测数据上传到物联网中心, 将遥测数 ...

  3. rsync 系统用户/虚拟用户 备份web服务器数据及无交互定时推送备份

    一.服务环境 (1),WEBserver(192.168.10.130) : BACKserver(192.168.10.129) (2),BACKserver服务器部署,安装所需软件,并启动 (3) ...

  4. Laravel 中使用 swoole 项目实战开发案例二 (后端主动分场景给界面推送消息)

    推荐阅读:Laravel 中使用 swoole 项目实战开发案例一 (建立 swoole 和前端通信)​ 需求分析 我们假设有一个需求,我在后端点击按钮 1,首页弹出 “后端触发了按钮 1”.后端点了 ...

  5. java推送数据到app--极光推送

    之前项目有用到需要把数据推送到app端 采用的是极光推送 特此把工具类和pom.xml需要的jar整理如下 pom.xml需要jar如下 <!-- 极光推送 --> <depende ...

  6. 设备数据通过Azure Functions 推送到 Power BI 数据大屏进行展示(1.准备工作)

    本案例适用于开发者入门理解Azure Functions/ IoT Hub / Service Bus / Power BI等几款产品. 主要实战的内容为: 将设备遥测数据上传到物联网中心, 将遥测数 ...

  7. Python 项目实践二(生成数据)第二篇之随机漫步

    接着上节继续学习,在本节中,我们将使用Python来生成随机漫步数据,再使用matplotlib以引人瞩目的方式将这些数据呈现出来.随机漫步是这样行走得到的路径:每次行走都完全是随机的,没有明确的方向 ...

  8. Python 项目实践二(生成数据)第二篇

    接着上节继续学习,在本节中,我们将使用Python来生成随机漫步数据,再使用matplotlib以引人瞩目的方式将这些数据呈现出来.随机漫步是这样行走得到的路径:每次行走都完全是随机的,没有明确的方向 ...

  9. PHP之MVC项目实战(二)

    本文主要包括以下内容 GD库图片操作 利用GD库实现验证码 文件上传 缩略图 水印 GD库图片操作 <?php $img = imagecreatetruecolor(500, 300); // ...

随机推荐

  1. V8 Javascript 引擎设计理念

    Netscape Navigator 在 90 在年代中期对 JavaScript 进行了集成,这让网页开发人员对 HTML 页面中诸如 form .frame 和 image 之类的元素的访问变得非 ...

  2. doubango地址配置

    转自:http://wiki.sip2sip.info/projects/sip2sip/wiki/SipDeviceConfiguration SIP Device Configuration Th ...

  3. NodeJS异步I/O解析

    在现在的项目开发中,任何一个大型项目绝对不是简简单单的采用一个种语言和一种框架,因为每种语言和框架各有优势,与其死守一个,不与取各家之所长,依次得到一个高性能.搞扩展的产品. 对于一个.NET开发者, ...

  4. [PCB设计] 4、BAT脚本处理AD生成的GERBER文件为生产文件

    1.生产资料概述 为了资料保密和传输方便,交给PCB厂商打样的资料一般以Gerber和钻孔文件为主,换句话说,只要有前面说的两种文件,就能制作出你想要的PCB了. 一般来说,交给PCB厂商的Gerbe ...

  5. 支付宝 Android 版使用的开源组件

    支付宝 Android 版使用的开源组件 前言: 花了点时间整理了 支付宝 Android 客户端使用的开源组件,给需要的同学.在你不知道用什么开源框架的时候可以作下参考,毕竟支付宝是阿里的重量级产品 ...

  6. ECMAScript 6 笔记(三)

    ES6中的基本扩展 一.函数的扩展 1. 函数参数的默认值 ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面. function log(x, y = 'World') { console ...

  7. [个人翻译]GitHub指导文件(GitHub Guides[Hello World])

    [个人翻译]GitHub指导文件(GitHub Guides[Hello World]) Mirage_j个人翻译,欢迎转载,最好标明出处http://www.cnblogs.com/mirageJ/ ...

  8. js面试题-2

    // 1.截取字符串 var aa = "abcd"; console.log(aa.substr(,)); var str = "qweda"; consol ...

  9. 测试指南(适用于Feature/promotion/bug)

    1.提前了解需求,在需求的业务基础和开发的架构基础上分析测试关键点,给出测试策略,甚至需要准备测试数据: 2.分析需求时不要受开发影响,要有自己的分析和判断,包括测试范围,测试时间: 3.在开始测试之 ...

  10. 论SNAPSHOT包的危害性

    先介绍一下背景:我们应用是一个标准的spring+webx工程,博主在一次项目发布前为了再次测试一下自己的代码,将分支部署到日常环境中,但是项目启动的时候报错: 第一眼看到这个堆栈后有点懵逼 第一是上 ...