1.NFS基本概述

共享存储,文件服务器

NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS,ceph

为什么要使用共享存储

1.实现多台服务器之间数据共享

2.实现多台服务器之间数据一致

2.NFS应用场景

集群没有共享存储的情况

1.A用户上传图片经过负载均衡,负载均衡将上传请求调度至WEB1服务器上。

2.B用户访问A用户上传的图片,此时B用户被负载均衡调度至WEB2上,因为WEB2上没有这张图片,所以B用户无法看到A用户传的图片。

集群有共享存储

1.A用户上传图片无论被负载均衡调度至WEB1还是WEB2, 最终数据都被写入至共享存储

2.B用户访问A用户上传图片时,无论调度至WEB1还是WEB2,最终都会上共享存储访问对应的文件,这样就可以访问到资源了

3.NFS的工作原理

1.用户进程访问NFS客户端,使用不同的函数对数据进行处理

2.NFS客户端通过TCP/IP的方式传递给NFS服务端。

3.NFS服务端接收到请求后,会先调用portmap进程进行端口映射。

4.nfsd进程用于判断NFS客户端是否拥有权限连接NFS服务端。

5.Rpc.mount进程判断客户端是否有对应的权限进行验证。

6.idmap进程实现用户映射和压缩7.最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件。

注意: rpc是一个远程过程调用,那么使用nfs必须有rpc服务

注意: rpc是一个远程过程调用,那么使用nfs必须有rpc服务

4.NFS部署

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

注意: 不要忘记关闭防火墙, 以免默认的防火墙策略禁止正常的NFS共享服务

2)关闭防火墙和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

3)安装nfs服务端

yum -y install nfs-utils rpcbind

4)启动rpcbind

#启动rpcbind
[root@nfs01 ~]# systemctl start rpcbind #添加开机自启
[root@nfs01 ~]# systemctl enable rpcbind

5)检测端口和进程

[root@nfs01 ~]# ps -ef|grep rpc
rpc       11746      1  0 01:12 ?        00:00:00 /sbin/rpcbind -w
root      11750  11421  0 01:15 pts/1    00:00:00 grep --color=auto rpc[root@nfs01 ~]# netstat -lntup|grep 111
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd  tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd  udp        0      0 0.0.0.0:111             0.0.0.0:*                           1/systemd udp6       0      0 :::111                  :::*                                1/systemd 

6)编辑配置文件

NFS服务程序的配置文件为/etc/exports,需要严格按照共享目录的路径 允许访问的NFS客户端(共享权限参数)格式书写,定义要共享的目录与相应的权限将nfs服务端的/data目录共享给172.16.1.0/24网段内的所有主机
1) 所有客户端主机都拥有读写权限
2) 在将数据写入到NFS服务器的硬盘中后才会结束操作,最大限度保证数据不丢失
3) 将所有用户映射为本地的用户(www)#NFS客户端地址与权限之间没有空格
[root@nfs01 ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

6.1创建/data目录,www用户和组

#在NFS服务器上建立用于NFS文件共享的目录,并设置对应权限
[root@nfs01 ~]# mkdir /data
[root@nfs01 ~]# groupadd www -g 666
[root@nfs01 ~]# useradd www -u 666 -g 666
[root@nfs01 ~]# chown -R www.www /data
[root@nfs01 ~]# ll -d /data/
drwxr-xr-x 3 www www 53 Sep  3 02:08 /data/#NFS共享目录会记录至/var/lib/nfs/etab,如果该目录不存在共享信息,请检查/etc/exports是否配置错误

6.2启动NFS、RPCBIND

[root@nfs01 ~]# systemctl restart rpcbind nfs-server#加入开机自启
[root@nfs ~]# systemctl enable rpcbind nfs-server#检测端口
[root@nfs ~]# netstat -lntup#检测文件
[root@nfs ~]# cat /var/lib/nfs/etab

7)部署NFS客户端

#安装客户端,仅启动rpc服务
[root@web01 ~]# yum install -y rpcbind nfs-utils
[root@backup ~]# yum install -y rpcbind nfs-utils

8)启动rpcbind

#只启动rpcbind
[root@web01 ~]# systemctl start rpcbind
[root@backup ~]# systemctl start rpcbind #添加开机自启
[root@web01 ~]# systemctl enable rpcbind
[root@backup ~]# systemctl enable rpcbind

9)查看可挂载点

#客户端使用showmount -e查看远程服务器rpc提供的可挂载nfs信息
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24

10)挂载目录

#使用mount命令并结合-t参数, 指定要挂载的文件系统的类型, 并在命令后面写上服务器的IP地址, 以及服务器上的共享目录, 最后需要写上要挂载到本地系统(客户端)的目录。
[root@backup ~]# mount -t nfs 172.16.1.31:/data /backup#查看挂载信息(mount也可以查看)
[root@backup ~]# df –h#挂载成功后可以进行增删改操作
#如果希望NFS文件共享服务能一直有效,则需要将其写入到fstab文件中
#如果不希望使用NFS共享, 可进行卸载

10.1挂载成功后可以进行增删改操作

#使用客户端往nfs存储写入
[root@web01 ~]# echo "nfs-client" > /backup/test.txt #检查nfs服务端是否存在客户端创建的新文件
[root@nfs ~]# cat /data/test.txt
nfs-client

10.2开机挂载

如果希望NFS文件共享服务能一直有效,则需要将其写入到fstab文件中

#编辑fstab文件
[root@web01 ~]##  vim /etc/fstab
172.16.1.31:/data /backup nfs defaults 0 0#验证fstab是否写正确
[root@web01 ~]#  mount -a

10.3卸载nfs

如果不希望使用NFS共享, 可进行卸载

[root@web01 ~]# umount /backup #注意:卸载的时候如果提示”umount.nfs: /backup: device is busy”
#1.切换至其他目录, 然后在进行卸载。
#2.NFS Server宕机, 强制卸载umount -lf /backup

10.4增加安全性

在企业工作场景,通常情况NFS服务器共享的只是普通静态数据(图片、附件、视频),不需要执行suid、exec等权限,挂载的这个文件系统只能作为数据存取之用,无法执行程序,对于客户端来讲增加了安全性。例如: 很多木马篡改站点文件都是由上传入口上传的程序到存储目录。然后执行的。

#通过mount -o指定挂载参数,禁止使用suid,exec,增加安全性能
[root@web01 ~]# mount -t nfs -o nosuid,noexec,nodev 172.16.1.31:/data /backup

10.5增加性能

有时也需要考虑性能相关参数[可选]

#通过mount -o指定挂载参数,禁止更新目录及文件时间戳挂载
[root@web01 ~]# mount -t nfs -o noatime,nodiratime 172.16.1.31:/data /backup

11)部署代码,设置web、backup的用户权限

#安装服务,httpd(apache)和php
[root@web01 ~]# yum install -y httpd php #建议:将客户端也创建一个uid为666,gid为666,统一身份,避免后续出现权限不足的情况
#创建www用户和组
[root@backup ~]# groupadd www -g 666
[root@backup ~]# useradd www -u 666 -g 666
[root@backup ~]# id www
uid=666(www) gid=666(www) groups=666(www)

1.修改httpd的配置文件

[root@web01 ~]# vim /etc/httpd/conf/httpd.conf
修改:
User www
Group www#启动服务
[root@web01 ~]# systemctl restart httpd
#查看
[root@web01 ~]# ps -ef|grep httpd

2.查找httpd的站点目录

[root@web01 ~]# rpm -ql httpd|grep html
[root@web01 ~]# cd /var/www/html
[root@web01 html]# rz windows-提交作业代码.zip
[root@web01 html]# yum install -y unzip
[root@web01 html]# unzip windows-提交作业代码.zip

3.修改上传目录

#修改上传目录
[root@web01 html]# vim /var/www/html/upload_file.php
$wen="/var/www/html/tupian";#创建目录并授权
[root@web01 html]# mkdir tupian
[root@web01 html]# chown -R www.www tupian/#挂载共享存储
[root@web01 html]# mount -t nfs 172.16.1.31:/data /var/www/html/tupian

4.重启服务

[root@web01 ~]# systemctl restart httpd

可进行上传

5.NFS配置详解

执行man exports命令,然后切换到文件结尾,可以快速查看如下样例格式:

nfs共享参数 参数作用
rw* 读写权限
ro 只读权限
root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用)
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用)
all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用)
no_all_squash 无论NFS客户端使用什么账户访问,都不进行压缩
sync* 同时将数据写入到内存与硬盘中,保证不丢失数据
async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
anonuid* 配置all_squash使用,指定NFS的用户UID,必须存在系统
anongid* 配置all_squash使用,指定NFS的用户UID,必须存在系统

验证ro权限实践

1) 服务端修改rw为ro参数

[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(ro,sync,all_squash)
[root@nfs ~]# systemctl restart nfs-server

2) 客户端验证

[root@nfs-client ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@nfs-client ~]# df -h
Filesystem         Size  Used Avail Use% Mounted on
172.16.1.31:/data   98G  1.7G   97G   2% /mnt# 发现无法正常写入文件
[root@backup mnt]# touch file
touch: cannot touch ‘file’: Read-only file system

验证all_squash、anonuid、anongid权限

1) NFS服务端配置

[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

2) 服务端需要创建对应的用户

[root@nfs ~]# groupadd -g 666 www
[root@nfs ~]# useradd -u 666 -g 666 www
[root@nfs ~]# id www
uid=666(www) gid=666(www) groups=666(www)

3) 重载nfs-server

[root@nfs ~]# systemctl restart nfs-server
[root@nfs ~]# cat /var/lib/nfs/etab
/data   172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,secure,root_squash,all_squash)

4) 授权共享目录为www

[root@nfs ~]# chown -R www.www /data/
[root@nfs ~]# ll -d /data/
drwxr-xr-x 3 www www 53 Sep  3 02:08 /data/

5) 客户端验证

[root@backup ~]# umount /mnt/
[root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt

6) 客户端查看到的文件,身份是666

[root@backup ~]# ll /mnt/
drwxr-xr-x 2 666 666 6 Sep  3 02:08 rsync_dir
-rw-r--r-- 1 666 666 0 Sep  3 02:08 rsync_file

7) 客户端依旧能往/mnt目录下写文件

[root@backup mnt]# touch fff
[root@backup mnt]# mkdir 111
[root@backup mnt]# ll
drwxr-xr-x 2 666 666 6 Sep  3 03:05 111
-rw-r--r-- 1 666 666 0 Sep  3 03:05 fff

8) 建议:将客户端也创建一个uid为666,gid为666,统一身份,避免后续出现权限不足的情况

[root@backup mnt]# groupadd -g 666 www
[root@backup mnt]# useradd -g 666 -u 666 www
[root@backup mnt]# id www
uid=666(www) gid=666(www) groups=666(www)

9) 最后检查文件的身份

[root@backup mnt]# ll /mnt/
total 4
drwxr-xr-x 2 www www 6 Sep  3 03:05 111
-rw-r--r-- 1 www www 0 Sep  3 03:05 fff

6.NFS存储小结

1.NFS存储优点
1)NFS文件系统简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求。2)NFS文件系统内存放的数据都在文件系统之上,所有数据都是能看得见。

2.NFS存储局限
1)存在单点故障, 如果构建高可用维护麻烦web->nfs()->backup2)NFS数据明文, 并不对数据做任何校验。3)客户端挂载NFS服务没有密码验证, 安全性一般(内网使用)

3.NFS应用建议
1)生产场景应将静态数据尽可能往前端推, 减少后端存储压力2)必须将存储里的静态资源通过CDN缓存jpg\png\mp4\avi\css\js3)如果没有缓存或架构本身历史遗留问题太大, 在多存储也无用

转载于:https://www.cnblogs.com/chenmiao531759321/p/11415106.html

3.NFS 共享存储相关推荐

  1. Linux YUM扩展NFS共享存储服务(配置图解)

    NFS共享存储服务 一.YUM 1.YUM (Yellow dog Updater Modified) 2.软件仓库的提供方法 3.RPM软件包的来源 4.构建CentOS 7 软件仓库 5.在软件仓 ...

  2. Linux架构之NFS共享存储1

    第35章 NFS共享存储 35.1 NFS基本概述 NFS是Network File System的缩写及网络文件系统.NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录. 常见的文件 ...

  3. 基于NFS共享存储实现kvm虚拟主机动态迁移

    所有主机关闭防火墙与selinux [root@localhost ~]# iptables -F [root@localhost ~]# systemctl stop firewalld [root ...

  4. centos 7.6 ——NFS共享存储服务

    NFS共享存储服务 文章目录 NFS共享存储服务 nfs 原理 一.实验准备 三.实验步骤 服务端192.168.75.137配置 客户机192.168.75.134配置 查看服务端文件 注意 FTP ...

  5. NFS共享存储(用于内网) httpd协议 nginx 两种上传方式 区别

    文章目录 NFS共享存储(用于内网) 什么是NFS 为什么使用NFS 常见的数据存储方式 NFS的作用 测试:nginx页面展示 NFS原理 NFS配置详解 开机自动挂载 案例(nginx上传) ba ...

  6. NFS共享存储服务介绍与案例详细配置过程

    目录 1,什么是NFS? 2,NFS工作原理 3,使用NFS发布共享资源 4,NFS 挂载原理 5,NFS服务所需软件及主要配置文件 安装NFS服务,需要安装两个软件,分别是: 6, NFS的相关文件 ...

  7. Openfiler的安装+ISCSI和NFS共享存储的基础配置

    Openfiler是一个操作系统,是一款商业化的的开源NAS/SAN解决方案,同时也是一款存储管理实用程序,提供了基于文件的网络附加存储和基于块的存储区域网络功能:具体功能不在此处阐述.Openfil ...

  8. NFS共享存储服务(详细图文讲解)

    NFS共享存储服务(详细图文讲解) 文章目录 一.概述 (一)NFS(Network File System)网络文件系统 (二).NFS文件共享服务的搭建 1.具体操作步骤 在服务器上操作: 在客户 ...

  9. Linux网络系列--YUM仓库部署与NFS服务(YUM本地源仓库与远程ftp仓库部署、YUM命令使用、NFS共享存储服务讲解及实验)

    文章目录 一. 构建YUM软件仓库 1.1 本地源YUM仓库配置 1.2 远程yum仓库(借助FTP协议) 1.2.1 准备网络安装源(服务器端) 1.2.2 配置软件仓库位置(客户机端) 二. YU ...

  10. NFS共享存储服务(图文详解)

    NFS共享存储服务(图文详解) 一.NFS简介 二.NSF服务 1./etc/exports 配置文件 格式 2.服务器使用NFS发布共享资源 ①安装 nfs-utils.rpcbind 软件包 ②. ...

最新文章

  1. 插件框架实现思路及原理
  2. NHibernate介绍
  3. 看完这个“秒杀”设计方案!我有点慌了
  4. textarea 内容前端展示换行php处理
  5. C++类中的main函数
  6. HDU 3480 Division(斜率DP裸题)
  7. iOS获取当前app的名称和版本号
  8. VMware vSphere client 5.1登录出现这个错误:客户端无法向服务器发送完整请求
  9. android 点餐系统 构思
  10. 匹配区县代码_全国区县代码1
  11. 从零开始的Win10系统设置
  12. 计算机考研用python_计算机考研408 130+个人攻略
  13. 7-112 约分最简分式
  14. 怎样用计算机弹出声音,电脑没声音怎么调出来
  15. 微信小程序自定义编译模式
  16. 前端做微信好友分享_一篇搞定微信分享和line分享
  17. 微服务框架搭建个人总结(避坑专用)
  18. 如何在网页调用QQ聊天
  19. CLRS 6.3建堆
  20. 记录一次Win7接入NVME固态的过程

热门文章

  1. 数据中台 第7章 数据体系建设:数仓分层设计、数据建模
  2. 【MySQL索引】底层实现原理 MyISAM非聚簇索引 vs. InnoDB聚簇索引
  3. mysql的索引文件_MySQL:索引在磁盘上的存储
  4. QT添加OpenCV库
  5. 安徽省网络课程中心e会学计算机答案,安徽省网络课程学习中心(e会学)
  6. DM8 TPCC测试
  7. 工业控制系统信息安全与信息安全、功能安全的区别【转自工控工程网】
  8. docker容器ssh自启动设置
  9. JSP页面在浏览器中显示HTML代码被截断显示不全
  10. Androidstudio项目托管到开源中国(oschina)