Linux架构之NFS共享存储1
第35章 NFS共享存储
35.1 NFS基本概述
NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。 常见的文件服务器有NFS、GFS(gluster fs)、FastDFS NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中, 如果是大型网站,会用到更复杂的分布式文件系统FastDFS、glusterfs、HDFS、ceph。
35.1.1 为什么要使用共享存储
1.实现多台服务器之间数据共享
2.实现多台服务器之间数据一致
35.1.2 NFS应用场景
实际应用中,共享存储是重要的组成部分。如果没有共享存储,网站就变成了单点的架构
应用场景1——集群没有共享存储
1、A用户上传图片经过负载均衡,负载均衡将上传请求调度至WEB1服务器上。
2、B用户访问A用户上传的图片,此时B用户被负载均衡调度至WEB2上,因为WEB2上没有这张图片,所以B用户无法看到A用户传的图片。


应用场景2——集群有共享存储
1、A用户上传图片无论被负载均衡调度至WEB1还是WEB2, 最终数据都被写入至共享存储。
2、B用户访问A用户上传图片时,无论调度至WEB1还是WEB2,最终都会上共享存储访问对应的文件,这样就可以访问到资源了。


35.1.3 NFS实现原理
1、假如访问的是NFS客户端,先调用不同的函数(例如Read()函数,读功能、Write()函数,写功能、Create()函数,创建功能、Remove()函数、删除功能、Rename()函数,重命名功能)对数据进行处理。
2、调用完函数后,首先NFS客户端会建立TCP连接,通过TCP/IP的方式传递给NFS服务端,连上远端的服务器。
3、接着NFS服务端接收到请求后,NFS服务器会做3步系列操作(环环相扣,先映射端口,然后验证是否能登录服务器,最后验证文件使用权限),如下: 首先,调用portmap进程进行端口映射。
接着,调用Rpc.nfsd进程来验证NFS客户端是否拥有对应的权限连接NFS服务端。
最后,调用Rpc.mount进程来验证客户端是否拥有对应的文件使用权限;
4、idmap进程实现用户映射和压缩
5、最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件。


35.2 NFS共享实战
35.2.1环境准备
| 主机名 | 角色 | 外网IP | 内网IP |
|---|---|---|---|
| backup | nfs的客户端 | 10.0.0.41 | 172.16.1.41 |
| nfs | nfs的服务端 | 10.0.0.31 | 172.16.1.31 |
| web01 | nfs的客户端 | 10.0.0.7 | 172.16.1.7 |
35.2.2 服务端nfs01 关闭防火墙和selinux防火墙
#1.关闭Firewalld防火墙
[root@nfs ~]# systemctl disable firewalld
[root@nfs ~]# systemctl stop firewalld
#2.关闭selinux防火墙
[root@nfs ~]# sed -ri '#^SELINUX=#cSELINUX=Disabled' /etc/selinux/config
[root@nfs ~]# setenforce 0
35.2.3 服务端nfs01 安装rpcbind服务,服务端和客户端都要安装
#服务端nfs安装rpcbind服务
[root@nfs ~]# yum -y install nfs-utils rpcbind
#客户端web01安装rpcbind服务
[root@web01 ~]# yum -y install nfs-utils rpcbind
#客户端backup安装rpcbind服务
[root@backup ~]# yum -y install nfs-utils rpcbind
35.2.4 服务端nfs01 启动rpcbind
#服务端nfs启动rpcbind
[root@nfs01 ~]# systemctl start rpcbind
#客户端web01启动rpcbind
[root@web01 ~]# systemctl start rpcbind
#客户端backup启动rpcbind
[root@backup ~]# systemctl start rpcbind
35.2.5 服务端nfs01 开机自启rpcbind
#服务端nfs设置开机自启rpcbind
[root@nfs01 ~]# systemctl start rpcbind
#客户端web01设置开机自启rpcbind
[root@web01 ~]# systemctl start rpcbind
#客户端backup设置开机自启rpcbind
[root@backup ~]# systemctl start rpcbind
35.2.6 服务端nfs01 检查
[root@web01 ~]ll /etc/systemd/system/multi-user.target.wants/
[root@backup ~]# ll /etc/systemd/system/multi-user.target.wants/
[root@nfs01 ~]# ll /etc/systemd/system/multi-user.target.wants/
#检测端口和进程
[root@nfs ~]# ps -ef | grep rpc
rpc 9152 1 0 21:42 ? 00:00:00 /sbin/rpcbind -w
root 9173 8900 0 21:42 pts/0 00:00:00 grep --color=auto rpc
35.2.7 服务端nfs01 配置服务端配置文件
#统一客户端与服务端的用户
#服务端
[root@nfs01 ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
#服务端,创建/data目录
[root@nfs ~]# mkdir /data
#服务端,创建www用户和组(所有客户端)
[root@nfs ~]# groupadd www -g 666
[root@nfs ~]# useradd www -u 666 -g 666
#服务端,授权/data目录给www用户
[root@nfs ~]# chown -R www.www /data
#服务端,启动rpcbind服务和重启rpcbind nfs-server服务
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl restart rpcbind nfs-server
35.2.8 部署客户端 web01
#创建目录
[root@web01 ~]# mkdir wxg1
35.2.9 客户端web01,查看可挂载点
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
35.2.10 客户端web01,挂载共享目录
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /root/wxg1
#测试
[root@web01 ~]# echo 123 > wxg1/1.txt
#可以看到nfs服务端上已存在1.txt文件
[root@nfs ~]# ll /data
total 4
-rw-r--r-- 1 www www 4 Aug 6 22:06 1.txt
35.2.11 客户端backup,测试--文件共享
#两台客户端安装httpd服务
[root@web01 ~]# yum install -y httpd php
[root@backup ~]# yum install -y httpd php
#启动httpd服务
[root@backup ~]# systemctl start httpd
[root@backup ~]# rpm -ql httpd #查看httpd相关目录在哪儿
[root@backup ~]# cd /var/www/html #进入html目录
#接下来步骤是把目标压缩包上传至Linux系统(直接拖进去,此处省略具体命令)
#由于系统中没有unzip解压命令软件包,需要事先下载安装
[root@backup html]# yum install -y unzip
[root@backup html]# unzip windows-提交作业代码.zip #解压目标压缩包
[root@backup html]# systemctl start httpd #启动httpd服务
#修改配置文件
[root@backup html]# vim upload_file.php
修改保存路径,
vim [root@backup html]# vim upload_file.php
$wen="/var/www/html/tupian"; :wq 保存退出
[root@backup html]# systemctl restart httpd #重启httpd服务
#创建目录并授权
[root@backup html]# mkdir tupian
#修改httpd的配置文件
vim /etc/httpd/conf/httpd.conf
User www
Group www
[root@backup html]# systemctl restart httpd
[root@backup html]# mount -t nfs 172.16.1.31:/data /var/www/html/tupian
#创建www用户和组(客户端)
[root@backup html]# groupadd www -g 666
[root@backup html]# useradd www -u 666 -g 666
#重新授权
[root@backup html]# chown -R www.www /var/www/html/tupian
#重启httpd服务
[root@backup html]# systemctl restart httpd
打开浏览器,输入10.0.0.41,可以看到考试文件上传页面,上传一个文件
#检测是否成功
---客户端backup
[root@backup html]# ll tupian/
total 24
-rw-r--r-- 1 www www 19505 Aug 6 22:36 1_a1_a3.jpg
-rw-r--r-- 1 www www 4 Aug 6 22:06 1.txt
---服务端
[root@nfs ~]# ll /data
total 24
-rw-r--r-- 1 www www 19505 Aug 6 22:36 1_a1_a3.jpg
-rw-r--r-- 1 www www 4 Aug 6 22:06 1.txt
#另一台客户端web01重复上述操作
#启动httpd服务
[root@web01 ~]# systemctl start httpd
[root@web01 ~]# rpm -ql httpd #查看httpd相关目录在哪儿
[root@web01 ~]# cd /var/www/html #进入html目录
#接下来步骤是把目标压缩包上传至Linux系统(直接拖进去,此处省略具体命令)
#由于系统中没有unzip解压命令软件包,需要事先下载安装
[root@web01 html]# yum install -y unzip
[root@web01 html]# unzip windows-提交作业代码.zip
#解压目标压缩包
[root@web01 html]# systemctl start httpd #启动httpd服务
#修改配置文件
[root@web01 html]# vim upload_file.php
修改保存路径,
[root@web01 html]# vim upload_file.php
$wen="/var/www/html/tupian"; :wq 保存退出
[root@web01 html]# systemctl restart httpd #重启httpd服务
#创建目录并授权
[root@web01 html]# mkdir tupian
#修改httpd的配置文件
vim /etc/httpd/conf/httpd.conf
User www
Group www
[root@web01 html]# systemctl restart httpd
[root@web01 html]# mount -t nfs 172.16.1.31:/data /var/www/html/tupian
#创建www用户和组(客户端)
[root@web01 html]# groupadd www -g 666
[root@web01 html]# useradd www -u 666 -g 666
#重新授权
[root@web01 html]# chown -R www.www /var/www/html/tupian
#重启httpd服务
[root@web01 html]# systemctl restart httpd
打开浏览器,输入10.0.0.7,可以看到考试文件上传页面,上传一个文件

#检测是否成功
---客户端backup
[root@backup html]# ll tupian/
total 24
-rw-r--r-- 1 www www 19505 Aug 6 22:36 1_a1_a3.jpg
-rw-r--r-- 1 www www 4 Aug 6 22:06 1.txt
---服务端
[root@nfs ~]# ll /data
total 24
-rw-r--r-- 1 www www 19505 Aug 6 22:36 1_a1_a3.jpg
-rw-r--r-- 1 www www 4 Aug 6 22:06 1.txt
然后在浏览器输入网址,可以看到上传的图片,表明目录是共享的。






Linux架构之NFS共享存储1的更多相关文章
- 使用URLOS在linux系统中极速部署NFS共享存储服务
如何在linux系统里搭建NFS服务?其实我们只需要安装一个URLOS面板,然后就能在3分钟内将NFS服务部署完成.近日,URLOS在应用市场中上架了一款NFS应用,它可以让我们的节点主机在3分钟内极 ...
- Linux之nginx反向代理+三台web+nfs共享存储实现集群配置
作业四:nginx反向代理+三台web+nfs共享存储实现集群配置 在各个web服务器上挂载nfs [root@localhost nginx]# mount -t nfs 192.168.152.1 ...
- 生产场景NFS共享存储优化及实战
生产场景NFS共享存储优化: 1.硬件:sas/ssd磁盘,买多块,raid0/raid10,网卡好 2.NFS服务器端优化加all_squash,async /backup/NFS 192.168. ...
- Linux下搭建iSCSI共享存储的方法 Linux-IO Target 方式CentOS7-1810下实现
iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速 ...
- Linux下搭建iSCSI共享存储的方法 Linux-IO Target 方式 Debian9.5下实现
iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速 ...
- NFS 共享存储实战
目录 NFS 共享存储实战 一.NFS概述 二.NFS部署 部署NFS客户端backup和web01 统一web.nfs.backup的用户权限 代码部署步骤 三.NFS配置详解 NFS存储小结 四. ...
- 基于NFS共享存储实现KVM虚拟机动态迁移
基于NFS共享存储实现KVM虚拟机动态迁移 一:配置环境 二:安装相关的依赖包 三:实现NFS共享存储 四:KVM机配置相同的步骤 五:安装KVM01安装虚拟机 六:实现迁移 实验初始配置:所有主机 ...
- NFS 共享存储
目录 环境准备 NFS服务端 NFS客户端 部署时常见报错 httpd服务 NFS 共享存储的坑 环境准备 主机名 WanIP(Wide Area Network) LanIP(Local Area ...
- 负载均衡LVS之DR(附:NFS共享存储) 五分钟搭建手册
一:DR-模式 调度器Ip:192.168.1.254 服务器ip:192.168.1.1/192.168.1.2 VIP:192.168.1.10 ——配置负载均衡调度器: 关闭重定向响应配置: V ...
随机推荐
- 特征提取算法(4)——LoG特征提取算法
目录 1.介绍 2.LoG原理 3.数学原理 4.模板性质 1.介绍 LoG(DoG是一阶边缘提取)是二阶拉普拉斯-高斯边缘提取算法,先高斯滤波然后拉普拉斯边缘提取. Laplace算子对通过图像进行 ...
- [LOJ2289][THUWC2017]在美妙的数学王国中畅游:Link-Cut Tree+泰勒展开
分析 又有毒瘤出题人把数学题出在树上了. 根据泰勒展开,有: \[e^x=1+\frac{1}{1!}x+\frac{1}{2!}x^2+\frac{1}{3!}x^3+...\] \[sin(x)= ...
- Vim 编辑器学习笔记
参考资料: 世界上最牛的编辑器: Vim 1
- EasyUI combotree 设置节点折叠和叶子节点循环展开的BUG
树实体 public class Combotree { public string id { get; set; } public string text { get; set; } public ...
- Linux内核调试方法总结之Call Trace
内核态call trace 内核态有三种出错情况,分别是bug, oops和panic. bug属于轻微错误,比如在spin_lock期间调用了sleep,导致潜在的死锁问题,等等. oops代表某一 ...
- nginx proxy_pass 和 proxy_redirect
proxy_pass:充当代理服务器,转发请求proxy_redirect:修改301或者302转发过程中的Location.默认值为proxy_redirect default. 例:locatio ...
- UI自动化之三种等待
UI自动化中常用三种等待 目录 1.强制等待 2.隐式等待 3.显示等待 1.强制等待 执行到某一条语句后,然后sleep(3),等待3秒后,才会继续执行后面的语句 2.隐式等待 隐式等待只需要声明一 ...
- 16/7/7_PHP-构造\解析函数
昨天又问老师问题,老师还是强调要用博客之类记录下每天的学习的习惯. 我个人的想法是一些知识点不用笔记一下 在脑海的理解不是太深.但是老师都这么说了我老师乖乖的记录下今天的学习的一些知识.心得.技巧等等 ...
- uni-app-在开启小程序在微信开发工具打开时,打开失败,解决方法:手动打开
这是我自学ui-app的第一张记录内容,问题都是我在实际开发中遇到的问题 1.微信开发工具打开失败,提示是: 接着我的流程就是打开上面提到的链接,进入页面:https://developers.wei ...
- 基于nginx实现二维码下载安装apk文件
将apk文件置于nginx目录下 <!--进入nginx安装路径--> /usr/local/nginx <!--新建放apk的目录--> mkdir -p resources ...
