【NFS项目实战二】NFS共享数据的时时同步推送备份
【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共享数据的时时同步推送备份的更多相关文章
- miniFTP项目实战二
项目简介: 在Linux环境下用C语言开发的Vsftpd的简化版本,拥有部分Vsftpd功能和相同的FTP协议,系统的主要架构采用多进程模型,每当有一个新的客户连接到达,主进程就会派生出一个ftp服务 ...
- 设备数据通过Azure Functions 推送到 Power BI 数据大屏进行展示(2.Azure Functions实战)
本案例适用于开发者入门理解Azure Functions/ IoT Hub / Service Bus / Power BI等几款产品. 主要实战的内容为: 将设备遥测数据上传到物联网中心, 将遥测数 ...
- rsync 系统用户/虚拟用户 备份web服务器数据及无交互定时推送备份
一.服务环境 (1),WEBserver(192.168.10.130) : BACKserver(192.168.10.129) (2),BACKserver服务器部署,安装所需软件,并启动 (3) ...
- Laravel 中使用 swoole 项目实战开发案例二 (后端主动分场景给界面推送消息)
推荐阅读:Laravel 中使用 swoole 项目实战开发案例一 (建立 swoole 和前端通信) 需求分析 我们假设有一个需求,我在后端点击按钮 1,首页弹出 “后端触发了按钮 1”.后端点了 ...
- java推送数据到app--极光推送
之前项目有用到需要把数据推送到app端 采用的是极光推送 特此把工具类和pom.xml需要的jar整理如下 pom.xml需要jar如下 <!-- 极光推送 --> <depende ...
- 设备数据通过Azure Functions 推送到 Power BI 数据大屏进行展示(1.准备工作)
本案例适用于开发者入门理解Azure Functions/ IoT Hub / Service Bus / Power BI等几款产品. 主要实战的内容为: 将设备遥测数据上传到物联网中心, 将遥测数 ...
- Python 项目实践二(生成数据)第二篇之随机漫步
接着上节继续学习,在本节中,我们将使用Python来生成随机漫步数据,再使用matplotlib以引人瞩目的方式将这些数据呈现出来.随机漫步是这样行走得到的路径:每次行走都完全是随机的,没有明确的方向 ...
- Python 项目实践二(生成数据)第二篇
接着上节继续学习,在本节中,我们将使用Python来生成随机漫步数据,再使用matplotlib以引人瞩目的方式将这些数据呈现出来.随机漫步是这样行走得到的路径:每次行走都完全是随机的,没有明确的方向 ...
- PHP之MVC项目实战(二)
本文主要包括以下内容 GD库图片操作 利用GD库实现验证码 文件上传 缩略图 水印 GD库图片操作 <?php $img = imagecreatetruecolor(500, 300); // ...
随机推荐
- IOS苹果手机上 iframe 滚动失效条问题,局部滚动开启弹性滚动!
html:bo<div class="scroll-wrapper"> <iframe src=""></iframe> & ...
- 如何利用jquery 实现表格数据的搜索功能
在表格的操作中,常常会遇到通过关键字来搜索结果,这个功能用jquery的filter实现非常简单. 我以一个小例子说明: <table> <thead> <tr cols ...
- iOS多线程——GCD与NSOperation总结
很长时间以来,我个人(可能还有很多同学),对多线程编程都存在一些误解.一个很明显的表现是,很多人有这样的看法: 新开一个线程,能提高速度,避免阻塞主线程 毕竟多线程嘛,几个线程一起跑任务,速度快,还不 ...
- OC基础了解篇
.h文件存放声明 .m文件存放实现(支持c语言和OC的混编) .mm文件存放实现 (支持OC就和C++的混编) 异常处理,很少被用到/** *#import功能与#include功能一样就是包含文件 ...
- 雷锋推到雷峰塔,Java implements Javascript。
最近遇到这么一个问题,如何让用户在软件中自定义函数. 举个例子,使用Java做一个小的监控系统,用户A希望CPU超过90%的时候报警,B用户希望内存超过90%的时候报警,C用户希望CPU超过90%或者 ...
- ArcGIS 网络分析[1] 介绍与博文目录【更新中】
网络分析是个热点,理论上是属于计算机图形学和数据结构的,GIS以此为基础做出应用. 以下列举本人在学习中遇到的网络分析问题与经验总结. 平台:Windows 10操作系统,ArcGIS for Des ...
- .net core中加载lua脚本的类库: MoonSharp
前言 MoonSharp是一个支持C#调用lua脚本的类库,支持.net, .net core, mono, unity,因此在.net core中也能够使用,而且加载和调用lua也很方便简单: 官网 ...
- SourceTree 将本地已有的git项目推送到远程git仓库
1.在远程git仓库创建对应的项目: 2.用命令行生成本地的ssh key; 3.把公钥粘贴远程仓库对应的位置: 4.SourceTree 设置远程仓库的地址: 5.把本地对应的分支推送到远程仓库: ...
- uml视频系列(二)——uml的概述
在与uml进行了第一次的接触后,就被uml的博学多才给迷住了,uml居然可以做这么多的东西.才思敏捷的uml是设计软件的好帮手. 你还在为自己的类图不会设计而感到无助吗?你还在为你的对象不好确定而感到 ...
- php单例模式与工厂模式
单例模式:单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的. 所有的单例模式至少拥有以下三种公共元素:1. 它们必须拥有一个构造函数,并且必须被标记 ...