第1章 NFS基本概述

1.1 什么是nfs

NFS是Network File System的缩写及网络文件系统。

主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。

NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS

1.2 为什么要使用NFS服务进行数据存储

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

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

1.3 本地文件操作方式

当用户执行mkdir命令, 该命令会通过shell解释器翻译给内核,由内核解析完成后驱动硬件,完成相应的操作。

1.4 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服务

1.5 NFS存储优点

1.NFS文件系统简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求。

2.NFS文件系统内存放的数据都在文件系统之上,所有数据都是能看得见。

1.6 NFS存储局限

1.存在单点故障, 如果构建高可用维护麻烦。(web-》nfs()-》backup)

2.NFS数据明文, 并不对数据做任何校验。

3.客户端挂载无需账户密码, 安全性一般(内网使用)

1.7 生产应用建议

1.生产场景应将静态数据尽可能往前端推, 减少后端存储压力

2.必须将存储里的静态资源通过CDN缓存(jpg\png\mp4\avi\css\js)

3.如果没有缓存或架构本身历史遗留问题太大, 在多存储也无用

第2章 NFS基本使用

2.1 环境准备

服务器系统

角色

外网IP

内网IP

主机名

CentOS 7.5

NFS服务端

eth0:10.0.0.31

eth1:172.16.1.31

nfs

CentOS 7.5

NFS客户端

eth0:10.0.0.7

eth1:172.16.1.7

web01

2.2 关闭防火墙及selinux(客户端,服务端都要关闭)

2.2.1 关闭防火墙

systemctl disable firewalld
systemctl stop firewalld

2.2.2 关闭selinux

sed -ri '#^SELINUX=#cSELINUX=Disabled' /etc/selinux/config

setenforce 0

2.3 服务端安装nfs

[root@nfs ~]# yum -y install nfs-utils

2.3.1 配置nfs

我们可以按照共享目录的路径 允许访问的NFS客户端(共享权限参数)格式,定义要共享的目录与相应的权限。

[root@nfs ~]# echo '/data 172.16.1.0/24(rw,sync,all_squash)' > /etc/exports

[root@nfs ~]# cat /etc/exports

/data 172.16.1.0/24(rw,sync,all_squash)

如果想要把/data目录共享给172.16.1.0/24网段内的所有主机

1.主机都拥有读写权限

2.在将数据写入到NFS服务器的硬盘中后才会结束操作,最大限度保证数据不丢失

3.将所有用户映射为本地的匿名用户(nfsnobody)

2.3.2 创建对应的目录

[root@nfs ~]# mkdir /data

2.3.3 启动服务,并将服务加入开机自启动

[root@nfs ~]# systemctl enable rpcbind nfs-server

[root@nfs ~]# systemctl start rpcbind nfs-server

2.3.4 检查端口

[root@nfs ~]# netstat -lntp

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 653/rpcbind

2.3.5 检查共享的内容

[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=65534,anongid=65534,sec=sys,secure,root_squash,all_squash)

2.3.6 检查匿名用户对应的真实账户,并授权共享目录为nfsnobody

[root@nfs ~]# grep "65534" /etc/passwd

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

[root@nfs ~]# chown -R nfsnobody.nfsnobody /data

2.4 客户端安装nfs

[root@web01 ~]# yum install nfs-utils -y

2.4.1 启动rpcbind服务

[root@web01 ~]# systemctl enable rpcbind

[root@web01 ~]# systemctl start rpcbind

2.4.2 使用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

2.4.3 创建挂载点目录,执行挂载命令

mount命令并结合-t参数, 指定要挂载的文件系统的类型, 并在命令后面写上服务器的IP地址, 以及服务器上的共享目录, 最后需要写上要挂载到本地系统(客户端)的目录

[root@web01 ~]# mkdir /data

[root@web01 ~]# mount -t nfs 172.16.1.31:/data /data/

[root@web01 ~]# df -h

文件系统                   容量  已用   可用    已用% 挂载
172.16.1.31:/data 50G 2.6G 48G 6% /data

2.4.4 挂载成功后可以进行增删改操作,测试客户端是否拥有写的权限

[root@web01 ~]# echo "123" > /data/test

[root@web01 ~]# ll /data/

总用量 4

-rw-r--r-- 1 nfsnobody nfsnobody 4 9月   6 03:41 test

2.4.5 检查nfs服务端是否存在数据

[root@nfs ~]# ll /data/

总用量 4

-rw-r--r-- 1 nfsnobody nfsnobody 4 9月   6 03:41 test

2.4.6 如果希望NFS文件共享服务能一直有效则永久挂载

(防止服务器重启挂载失效->服务器不会重启)

[root@web01 ~]# echo '172.16.1.31:/data       /data                   nfs     defaults        0 0' >> /etc/fstab

[root@web01 ~]# tail -1 /etc/fstab

172.16.1.31:/data       /data                   nfs     defaults        0 0

验证fstab是否ok,前提要先卸载挂载

[root@web01 ~]# umount /data/

df -h 发现挂载没有了

[root@web01 ~]# mount -a

fstab如果ok,df -h查看会看到已经自动挂载了

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

[root@web01 ~]# umount /data/

卸载的时候如果提示”umount.nfs: /data: device is busy”

1.切换至其他目录, 然后在进行卸载。

2.NFS宕机, 强制卸载umount -lf /data

2.5 配置多台客户端服务器的配置方法何上面客户端方法一致

注意:客户端的必须是服务端配置允许访问的NFS客户端网段内的所有主机

第3章 NFS配置参数及验证

3.1 nfs共享参数及作用

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

共享参数

参数作用

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,必须存在系统

3.2 验证ro权限

[root@nfs ~]# echo '/data 172.16.1.0/24(ro,sync,all_squash)' > /etc/export

[root@nfs ~]#cat /etc/exports

/data 172.16.1.0/24(ro,sync,all_squash)

3.2.1 重载nfs(exportfs)

[root@nfs ~]# systemctl restart nfs-server

3.2.2 先卸载客户端已挂载好的共享

[root@web01 ~]# umount /data/

3.2.3 重新进行挂载

[root@web01 ~]# mount -t nfs 172.16.1.31:/data /data/

3.2.4 测试是否能写数据

[root@web01 ~]# cd /data/

[root@web01 data]# touch file-test        不允许写入数据

touch: cannot touch 'file-test': Read-only file system

3.3 验证all_squash,anonuid,anongid权限

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

[root@nfs ~]# cat /etc/exports

/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

3.3.1 需要添加一个uid是666,gid是666的用户

[root@nfs ~]# groupadd -g 666 www

[root@nfs ~]# useradd -u666 -g666 www

[root@nfs ~]# id www

uid=666(www) gid=666(www) 组=666(www)

3.3.2 必须重新授权为www用户,否则无法写入文件

[root@nfs ~]# chown -R www.www /data/

3.3.3 重启服务

[root@nfs ~]# systemctl restart nfs-server

3.3.4 客户端重新挂载

[root@web01 /]# umount /data/

[root@web01 /]# mount -t nfs 172.16.1.31:/data /data/

[root@web01 data]# ll

total 4

-rw-r--r-- 1 666 666 4 Sep  6 03:41 test

3.3.5 测试是否能写入数据

[root@web01 data]# touch tes1

[root@web01 data]# ll

total 4

-rw-r--r-- 1 666 666 0 Sep  7 10:38 tes1

-rw-r--r-- 1 666 666 4 Sep  6 03:41 test

3.3.6 为了防止权限不一致导致权限不足,建议在客户端创建一模一样的用户

[root@web01 ~]# groupadd -g 666 www

[root@web01 ~]# useradd -u666 -g666 www

[root@web01 ~]# id www

uid=666(www) gid=666(www) groups=666(www)

3.3.7 在此检查文件身份

[root@web01 ~]# ll /data/

total 4

-rw-r--r-- 1 www www 0 Sep  7 10:38 tes1

-rw-r--r-- 1 www www 4 Sep  6 03:41 test

NFS网络文件系统详解的更多相关文章

  1. [转帖]Linux文件系统详解

    Linux文件系统详解 https://www.cnblogs.com/alantu2018/p/8461749.html 贼复杂.. 从操作系统的角度详解Linux文件系统层次.文件系统分类.文件系 ...

  2. Docker:网络模式详解

    Docker作为目前最火的轻量级容器技术,牛逼的功能,如Docker的镜像管理,不足的地方网络方面. Docker自身的4种网络工作方式,和一些自定义网络模式 安装Docker时,它会自动创建三个网络 ...

  3. Docker网络模式详解

    一.Docker四种工作模式 安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络). none .hosthost:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用 ...

  4. docker 网络概述及网络模式详解

    docker 网络概述及网络模式详解 1.网络概述 2.网络模式详解 1.网络概述: Docker 网络实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0) ...

  5. Linux系统NFS网络文件系统

    Linux系统NFS网络文件系统 NFS(network file system)网络文件系统,就是通过网络让不同的主机系统之间可以共享文件或目录,此种方法NFS客户端使用挂载的方式让共享文件或目录到 ...

  6. NFS 网络文件系统挂载在A8板子上

    我承认自己是菜鸟,没什么网络知识就来搞挂载nfs网络文件系统,花费了5天的时间才把nfs网络文件系统成功挂载在A8板子上,实现了A8板子和虚拟机的文件共享.分享一下个人经验: 以下是基于nfs已经完成 ...

  7. [学习嵌入式开发板]iTOP-4412实现NFS网络文件系统

    本文转自迅为:http://www.topeetboard.com 学习平台:iTOP-4412开发板 本文讲解如何在 iTOP-4412 开发板上实现 NFS 网络文件系统. 我们使用的软硬件环境是 ...

  8. NFS(网络文件系统的搭建)

    关于NFS的原理,我在这就不概诉了,其实非常简答的理解就是一个网络磁盘,你需要把它挂载到你的磁盘上使用而已.那接下来谈谈如和搭建NFS网络文件系统. 需要使用2台机器作此实验,我分别配置IP为192. ...

  9. 用netstat查看网络状态详解

    --用netstat查看网络状态详解 -----------------------------2014/06/11 一.Linux服务器上11种网络连接状态:                     ...

随机推荐

  1. javascript实现数据结构:稀疏矩阵的十字链表存储表示

    当矩阵的非零个数和位置在操作过程中变化大时,就不宜采用顺序存储结构来表示三元组的线性表.例如,在作“将矩阵B加到矩阵A上”的操作时,由于非零元的插入或删除将会引起A.data中元素的移动.为此,对这种 ...

  2. Java入门到精通——框架篇之Hadoop概述

    一.Hadoop来历 Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明了倒排索引算法,通过加入了Map ...

  3. conversion vs recommendation

    conversion vs recommendation: http://markdisomma.com/2011/06/16/conversation-vs-recommendation/

  4. C# winform 跨线程修改界面

    我们可以使用invoke和bengininvoke invoke同步执行一个委托 begininvoke异步执行一个委托

  5. XP无法访问SharePoint 2010的问题

    最近用户反馈XP系统的电脑无法访问SharePoint 2010系统,换成了火狐浏览器后可以正常访问,但是在上传附件时出现异常,支持人员给的解决方案是换操作系统,要换成win7. 但是因为工作原因,不 ...

  6. SQL Server ->> 建立linked server到Azure SQL Server

    EXEC master.dbo.sp_addlinkedserver @server = N'<nick_name_to_use>', @srvproduct=N'', @provider ...

  7. 如何在PB中调用 Microsoft WEB 浏览器 控件?

    PB中使用Microsoft Web Browser控件步骤: 在pb的某窗口中加入OLE对象,选择Insert control(插入控件),然后选中"Microsoft WEB 浏览器&q ...

  8. Asterisk 对wav格式的支持

    经过测试wav格式文件仅支持PCM 8000kHz 16bit 单声道,非常蛋疼的一个原因,排查了好久! 关于C#支持的一些格式(Mono 单声道 .Stereo 立体声道) // Standard ...

  9. 记录项目代码迁移后,UI测试框架的搭建(配置文件的修改、测试脚本试运行)

    前文:记录一次项目代码迁移过程 上文代码迁移的目的就是为了新增vue脚手架自带的UI测试框架,工具有了,就需要实践运行在项目中了(修改配置文件.编写测试脚本等). 一.单元测试 测试框架 karma ...

  10. Selenium2学习(十五)-- 单选框和复选框(radiobox、checkbox)

    本篇主要介绍单选框和复选框的操作 一.认识单选框和复选框 1.先认清楚单选框和复选框长什么样 2.各位小伙伴看清楚哦,上面的单选框是圆的:下图复选框是方的,这个是业界的标准,要是开发小伙伴把图标弄错了 ...