【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. Eclipse安装git

    用Eclipse开发,如果需要团队协作,git作为分布式版本管理工具就是个比较好的选择.下面简单介绍一下git插件的安装方法: 1.Help -- install new software 打开插件安 ...

  2. 【转】OSX键盘快捷键

    OS X 键盘快捷键 了解有关常见 OS X 键盘快捷键的信息.键盘快捷键是通过按下键盘上的组合键来调用 OS X 功能的一种方式. 若要使用键盘快捷键或按键组合,您可以同时按修饰键和字符键.例如,同 ...

  3. JS中常见排序算法详解

    本文将详细介绍在JavaScript中算法的用法,配合动图生动形象的让你以最快的方法学习算法的原理以及在需求场景中的用途. 有句话怎么说来着: 雷锋推倒雷峰塔,Java implements Java ...

  4. 消费创富会开发模式系统App

    消费创富会系统定制开发,消费创富会网页开发模式,消费创富会开发软件,消费创富会系统APP开发,消费创富会平台模式开发,专业开发微信商城分销.公排.全返.分红.互助等模式定制开发,APP.网页版.微信端 ...

  5. canvas动态小球重叠效果

    前面的话 在javascript运动系列中,详细介绍了各种运动,其中就包括碰壁运动.但是,如果用canvas去实现,却是另一种思路.本文将详细介绍canvas动态小球重叠效果 效果展示 静态小球 首先 ...

  6. .Net程序员学用Oracle系列(12):增删改查

    1.插入语句 1.1.INSERT 1.2.INSERT ALL 2.删除语句 2.1.DELETE 2.2.TRUNCATE 3.更新语句 3.1.UPDATE 3.2.带子查询的 UPDATE 3 ...

  7. vs基础:无法断点调试dll项目 无法命中

    调试vs时,经常会出现,你设置了dll项目的一些断点,可f5之后,这些断点无效.时代定制的程序组的童鞋告诉你解决方法:在解决方案上右键“属性”,点击左侧树“配置属性”-->“配置”,右侧项目列表 ...

  8. 【canvas系列】用canvas实现一个colorpicker

    每个浏览器都有自己的特点,比如今天要做的colorpicker就是,一千个浏览器,一千个哈姆雷特,一千个colorpicker.今天canvas系列就用canvas做一个colorpicker. ** ...

  9. 远程推送-----iOS

    前言 说一下我了解的推送 正文 APNs--------Apple Push Notification service 1 远程推送的大概流程及其原理 我们的设备联网时(无论是蜂窝联网还是Wi-Fi联 ...

  10. java泛型简单学习

    一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: //import java.util.List; public class GenericTest { public st ...