1 NFS简介

1.1 什么是NFS

NFS=Network File System=网络文件系统。
主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。
NFS客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录。
分布式文件系统:Moosefs(mfs)、GlusterFS、FastDFS(推荐)
NFS属于本地文件存储服务。
NFS主要用于存储web服务器上用户上传的数据信息,图片 附件 头像 视频 音频。

1.2 NFS存储服务价值

(1)可以实现数据统一共享存储
(2)节省架构服务运营成本

1.3 NFS存储服务的优缺点

优点:配置 安装简单
缺点:没有认证功能        分布式存储/ftp/samba
         无法支持高并发存储  日PV 2000万
   无法实现高可用      分布式存储/keepalived

1.4 实现Windows与linux文件数据共享

(1)FTP服务部署
(2)samba服务部署(可以让Windows与linux同时访问)

1.5 NFS网络文件共享系统由来


可以实现数据共享,数据统一一致,节省架构服务运营成本

1.6 NFS网络文件系统工作方式(存储原理)

(1)在nfs服务端创建共享目录
(2)通过mount 网络挂载,将NFS服务端共享目录挂载到NFS客户端本地目录上。
(3)NFS客户端挂载目录上创建、删除、查看数据操作,等价于在服务端进行创建、删除、查看数据操作。

1.7 NFS存储文件系统中两个重要服务

1 RPC服务    2 NFS服务

1.7.1 RPC服务工作原理

因为NFS的各项功能都需要向RPC服务(rpcbind服务)注册,所以只有RPC服务才能获取到NFS服务的各项功能对应的端口号(port number)、PID、NFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务询问才能找到正确的端□。也就是说,NFS需要有RPC服务的协助才能成功对外提供服务。

1.7.2 NFS工作流程

1.7.3 NFS详细访问流程


当访问程序通过NFS客户端向NFS服务器存取文件时,其请求数据流程大致如下:
(1)首先用户访间网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这时NFS客户端(即执行程序的服务器)的RPC服务(rpcbind服务)就会通过网络向NFS服务器端的RPC服务(rpcbind服务)的111端口发出NFS文件存取功能的询间请求.
(2)NFS服务器端的RPC服务(rpcbind服务)找到对应的已注册的NFS端口后,通知NFS客户端的RPC服务。l
(3)此时NFS客户端获取到正确的端口,并与NFS daemon联机存取数据
(4)NFS客户端把数据存取成功后,返回给前端访间程序,告知用户存取结果,作为网站用户,就完成了一次存取操作。

2 NFS存储服务部署

RPC 远程过程调用程序。先启动PRC服务,然后在启动NFS。

2.1 服务端部署

2.1.1 安装软件程序

  1. yum install -y nfs-utils rpcbind
  2. rpm -qa nfs-utils
  3. rpm -qa rpcbind

2.1.2 编写配置文件

  1. vim /etc/exports #进入配置文件
  2. /data 172.16.1.0/24(rw,sync) #写入命令
  3. # /data 可以进行共享存储目录
  4. # 172.16.1.0/24(rw,sync) 允许存储数据网段信息(存储目录权限配置 存储数据方式配置)

sync=同步方式存储数据:用户有数据存储  ----  存储服务器(磁盘中)           存储安全性高
async=异步方式存储数据:用户有数据存储  ----  内存 --- 存储服务器(磁盘中)  存储效率高

2.1.3 创建目录,对目录进行授权

  1. mkdir /data
  2. chown nfsnobody.nfsnobody /data

2.1.4 启动服务程序

  1. systemctl start rpcbind
  2. systemctl reload rpcbind #重启rpcbind 平滑重启
  3. systemctl enable rpcbind
  4. systemctl start nfs
  5. systemctl reload nfs #重启nfs
  6. systemctl enable nfs
  7. ### restart:将所有连接会话都会直接断开
  8. ### reload: 只会将没有数据传输链接断开,重新建立连接,让用户访问感受更好

2.2 客户端部署

2.2.1 安装相关软件

  1. yum install -y nfs-utils

2.2.2 进行存储目录挂载

  1. mount -t nfs 172.16.1.31:/data /mnt

2.2.3 进行测试

  1. 客户端创建文件:
  2. [root@web01 mnt]#ls
  3. [root@web01 mnt]#touch test.txt
  4. [root@web01 mnt]#ls
  5. test.txt
  6. 服务端同步文件:
  7. [root@nfs01 data]#ls
  8. [root@nfs01 data]#ls
  9. test.txt
  10. 服务端与客户端文件同步,则测试成功。

3 存储服务配置文件编写格式

3.1 配置文件exports参数

ro 只读配置,使存储目录权限位只读,使开发人员只能看
rw 读写权限
sync 同步存储数据
async 异步存储数据
all_squash 不论什么用户包括root,都映射为指定nfsnobody用户
no_all_squash 对普通用户不做映射,无权限。root用户映射为nfsnobody
root_squash 将root用户映射为指定nfsnobody用户,普通用户无权限
no_root_squash 将root用户不做映射,普通用户无权限
anonuid 指定uid,指定映射成什么用户
anongid 指定gid,指定映射成什么用户

在企业中,一般选用no_all_squash,root_squash。

3.1.1 all_squash映射实践

第一步:服务端修改服务配置文件

  1. vim /etc/exports
  2. /data 172.16.1.0/24(rw,sync,all_squash)
  3. systemctl reload nfs

第二步:客户端上传数据测试

  1. [root@web01 mnt]#touch test.txt
  2. [root@web01 mnt]#ll test.txt
  3. -rw-r--r-- 1 nfsnobody nfsnobody 0 Jul 16 20:57 test.txt

3.1.2 no_all_squash映射实践

第一步:服务端修改服务配置文件

  1. vim /etc/exports
  2. /data 172.16.1.0/24(rw,sync,no_all_squash)
  3. systemctl reload nfs

第二步:客户端上传数据测试

  1. [root@web01 mnt]# touch aaa.txt
  2. [root@web01 mnt]# ll
  3. -rw-rw-r-- 1 1017 1017 0 Jul 16 12:08 aaa.txt
  4. ### 用户传输数据身份没有变化,看用户uid信息

3.1.3 root_squash映射实践

第一步:服务端修改服务配置文件

  1. vim /etc/exports
  2. /data 172.16.1.0/24(rw,sync,root_squash)
  3. systemctl reload nfs

第二步:客户端上传数据测试

  1. [root@web01 mnt]# touch bbb.txt
  2. [root@web01 mnt]# ll
  3. -rw-r--r-- 1 nfsnobody nfsnobody 0 Jul 16 12:19 bbb.txt
  4. ### root用户会映射为指定的nfsnobody用户

3.1.4 no_root_squash映射实践

第一步:服务端修改服务配置文件

  1. vim /etc/exports
  2. /data 172.16.1.0/24(rw,sync,no_root_squash)
  3. systemctl reload nfs

第二步:客户端上传数据测试

  1. [root@web01 mnt]# touch ccc.txt
  2. [root@web01 mnt]# ll
  3. -rw-r--r-- 1 root root 0 Jul 16 12:22 ccc.txt
  4. ### 将root用户不做映射

3.2 NFS客户端映射原理图

3.2.1 映射原理练习题

要求服务端:
/data/w   可读可写权限,所有用户都做映射,  采用同步传输数据
/data/r   只能读取数据,只有root用户组映射,采用异步传输数据
要求客户端:
backup   /data/w  --挂载点 /data/w   可以存储数据  
web01    /data/r  --挂载点 /data/r   不能存储数据
解决服务端:
(1)编写配置文件

  1. vi /etc/exports
  2. /data/w 172.16.1.0/24(rw,sync,all_squash)
  3. /data/r 172.16.1.0/24(ro,async,root_squash)

(2)创建共享存储目录

  1. web01:
  2. mkdir /data/r
  3. chown nfsnobody.nfsnobody /data/r
  4. backup:
  5. mkdir /data/w
  6. chown nfsnobody.nfsnobody /data/w

(3)重启存储服务

  1. systemctl reload nfs

解决客户端:
(1)创建挂载点目录

  1. web01:mkdir /data/r
  2. backup:mkdir /data/w

(2)进行挂载

  1. web01
  2. mount -t nfs 172.16.1.31:/data/r /data/r
  3. backup
  4. mount -t nfs 172.16.1.31:/data/w /data/w

(3)验证成功

  1. [root@web01 r]#touch hh.txt
  2. touch: cannot touch hh.txt’: Read-only file system ### 只读权限,所以出现这种情况才是正常
  3. [root@backup w]#touch kk.txt ### 读写权限,所以能创建
  4. [root@backup w]#ls
  5. kk.txt

3.3 影响NFS服务存储权限原因

(1)服务端配置文件参数    exports文件里ro/rw参数
(2)服务端本身目录权限  
(3)服务端共享目录权限存在继承关系    例如:/data,/data/r
   PS:建议设置共享目录时,不要存在父级与子级关系
(4)客户端挂载参数是否为 ro

4 NFS挂载常见问题

4.1 异常问题一

ls: cannot open directory .: Stale file handle  (文件句柄错误)
出现原因: 当父级和子级目录同时进行挂载时,一旦父级目录取消共享,但是客户端还是处于挂载状态
问题解决: 将和父级目录有关的所有挂载点全部卸载,重新挂载

4.2 异常问题二

Cannot register service: RPC: Unable to receive;
出现原因: 服务启动顺序不正确
问题解决: 关闭所有服务,按顺序进行启动

4.3 异常问题三

出现挂载卡死情况
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
出现原因: 服务端开启防火墙,阻止客户端访问
问题解决: 关闭防火墙

4.4 异常问题四

服务端采用restart情况,会有一个90s延迟;造成客户端挂载好共享目录,90s内无法存储数据
出现原因:
cat /etc/sysconfig/nfs|grep 90
#NFSD_V4_GRACE=90
#NFSD_V4_LEASE=90

4.5 NFS存储排错原理

4.5.1 检查服务端服务是否启动

4.5.2 检查NFS服务是否向RPC服务注册

未注册情况

  1. [root@nfs01 ~]# rpcinfo -p localhost
  2. program vers proto port service
  3. 100000 4 tcp 111 portmapper
  4. 100000 3 tcp 111 portmapper
  5. 100000 2 tcp 111 portmapper
  6. 100000 4 udp 111 portmapper
  7. 100000 3 udp 111 portmapper
  8. 100000 2 udp 111 portmapper

已经进行注册

  1. [root@nfs01 ~]# rpcinfo -p localhost
  2. program vers proto port service
  3. 100000 3 tcp 111 portmapper
  4. 100000 2 tcp 111 portmapper
  5. 100000 4 udp 111 portmapper
  6. 100000 3 udp 111 portmapper
  7. 100000 2 udp 111 portmapper
  8. 100005 1 udp 20048 mountd
  9. 100005 1 tcp 20048 mountd
  10. 100005 2 udp 20048 mountd
  11. 100005 2 tcp 20048 mountd
  12. 100005 3 udp 20048 mountd
  13. 100005 3 tcp 20048 mountd
  14. 100003 3 tcp 2049 nfs
  15. 100003 4 tcp 2049 nfs
  16. 100227 3 tcp 2049 nfs_acl
  17. 100003 3 udp 2049 nfs
  18. 100003 4 udp 2049 nfs
  19. 100227 3 udp 2049 nfs_acl
  20. 服务关闭在开启,有些端口会发生改变
  21. 100021 1 udp 60318 nlockmgr
  22. 100021 3 udp 60318 nlockmgr
  23. 100021 4 udp 60318 nlockmgr
  24. 100021 1 tcp 32828 nlockmgr
  25. 100021 3 tcp 32828 nlockmgr
  26. 100021 4 tcp 32828 nlockmgr

4.5.3 检查NFS服务是否存在共享目录

命令:showmount -e  172.16.1.31    NFS没有安装,不能使用showmount

  1. [root@nfs01 data]#showmount -e 172.16.1.31
  2. Export list for 172.16.1.31:
  3. /data/r 172.16.1.0/24
  4. /data/w 172.16.1.0/24

4.6 NFS服务相关重要文件命令

  1. /etc/exports #配置文件
  2. /var/lib/nfs/etab #记录nfs服务默认配置参数信息
  3. rpcinfo -p 172.16.1.31 #检查nfs是否向rpc注册
  4. showmount -e 172.16.1.31 #检查nfs服务是否存在共享目录
  5. /usr/sbin/exportfs #可以平滑重启nfs服务,可以临时设置共享存储目录
  6. 平滑重启服务:exportfs -rv
  7. 临时创建目录:exportfs -o rw,sync 192.168.232.0/24:/data01

4.7 NFS服务客户端挂载

4.7.1 如何进行挂载

  1. mount -t nfs 172.16.1.31:/data /mnt

4.7.2 如何开机挂载

  1. 方法一:vi /etc/rc.local
  2. mount -t nfs 172.16.1.31:/data /mnt
  3. 方法二:vi /etc/fstab文件
  4. 172.16.1.31:/data /mnt nfs defaults 0 0

centos6  
启动系统 -- 加载fstab -- 启动network网络服务 -- netfs(在系统启动完毕之后,再次加载fstab)
centos7
启动系统 -- 加载fstab -- 启动network网络服务 -- remote-fs.target(在系统启动完毕之后,再次加载fstab)

4.7.3 启动nfs服务客户端很慢

出现原因:在客户端上配置自动nfs服务挂载   --- 耦合度太高
解决问题:
(1)取消自动挂载
(2)启动顺序 先开启后端服务(nfs mysql backup 缓存服务)  在开启前端服务(web服务 负载均衡服务)

4.7.4 挂载参数说明

rw 让挂载点目录具有可读可写权限   相反ro
suid=setuid 让挂载点目录中的文件特殊权限位生效    相反nosuid  安全
dev 让挂载点目录存储设备文件保持属性不变
exec 让挂载点目录中的执行文件可以执行   相反noexec
auto(mount -a) 让挂载点目录实现快速自动挂载  相反noauto
nouser 让普通用户是否可以卸载和挂载目录   相反user
async 数据异步存储概念,相反sync同步存储
noatime 访问文件时不更新文件的inode时间戳,高并发环境下,推荐显示应用该选项,可以提高系统I/O性能。性能优化
nodiratime 不更新文件系统上的directory inode时间戳,高并发环境,推荐显式应用该选项,可以提高系统I/O性能。性能优化
remount 在不进行卸载挂载点时,直接重新挂载修改挂载参数
文件系统只读:mount -o remount,rw / 解决
rsize=262144 设置一个缓存区 262144字节  设置大小和内存有关  
用户 (读取) --- web01 /data  2M --- nfs /data 10M 压力大
wsize=262144 设置一个缓冲区 262144字节
用户(存储)  --- web01 /data 10M --- nfs /data 10M 压力大
hard 当服务端处于关闭状态,客户端会处于一直挂载
soft 当服务端处于关闭状态,不会一直挂载
proto=tcp 挂载协议

客户端重要文件:/proc/mounts  --- 查看到mount挂载命令默认参数信息
强行进行卸载:umount -lf

4 补充:下载软件出现异常

(1)更新yum源
(2)利用rpm安装软件 获得rpcbind软件包

  1. vim /etc/yum.conf
  2. cachedir=/var/cache/yum/$basearch/$releasever --- 下载软件保存路径
  3. keepcache=1 --- 下载软件保留下来,不要被删除
  4. rpm -ivh rpcbind-0.2.0-47.el7.x86_64.rpm.rpm --- 安装rpcbind

NFS存储服务及部署的更多相关文章

  1. NFS存储服务

    NFS存储服务笔记======================================================================NFS共享存储是什么: 英文名-Netwo ...

  2. NFS存储服务部署

    第1章 NFS介绍 1.1 NFS服务内容的概述 □ RPC服务知识概念介绍说明,以及RPC服务存在价值(必须理解掌握) □ NFS服务工作原理讲解(必须理解掌握) □ NFS共享文件系统使用原理讲解 ...

  3. Linux NFS存储服务部署

    什么是NFS 中文意思是网络文件系统,主要功能是通过网络(一般是局域网)让不同主机之间可以共享文件或目录 NFS属于本地文件存储服务 缺点1: 1 2 3 4 5 6 7 windows上无法使用   ...

  4. 三.NFS存储服务

    01. 课程回顾 备份服务概念介绍(rsync备份服务利用相应算法,实现增量数据同步) 备份服务工作方式说明: 1. 本地数据备份同步方式(类似cp命令) 2. 远程数据备份同步方式(类似scp命令) ...

  5. Linux(10):期中架构(2)--- NFS存储服务 & 实时同步

    1. 共享存储服务概念: # NFS是Network File System的缩写,中文意思是网络文件系统, # 它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录. 2. ...

  6. nfs 存储服务

    今日内容: NFS 1.什么是nfs? network file system 网络文件系统 nfs共享存储 2.nfs能干什么? nfs 能为 不同主机系统之间 实现 文件的共享 3.为什么要使用n ...

  7. nfs存储服务实时同步

    一.NFS简介 NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过网络共享资源.将NFS主机分享的目录,挂载到本地客户端当中,本地NFS的客户端应用可以透明地 ...

  8. LAMP集群项目五 部署NFS存储服务并设置WEB服务挂载

    yum install nfs-utils portmap -y 在centos6.5中portmap已经改为rpcbind 先启动rpcbind /etc/init.d/rpcbind start ...

  9. 部署YUM仓库及NFS共享服务

    部署YUM仓库及NFS共享服务 目录 部署YUM仓库及NFS共享服务 一.YUM仓库服务 1. YUM概述 2. 部署YUM软件仓库 (1)准备安装源 ①YUM仓库的种类 ②RPM软件包的来源 ③构建 ...

随机推荐

  1. 零元学Expression Blend 4 - Chapter 32 简单轻松的学会如何使用Visual States(上)

    原文:零元学Expression Blend 4 - Chapter 32 简单轻松的学会如何使用Visual States(上) Visual State Manager中文翻译为视觉状态管理器,这 ...

  2. Windows10 使用Virtual Box一启动虚拟机就蓝屏(错误代码SYSTEM_SERVICE_EXCEPTION)解决方案

    原文:Windows10 使用Virtual Box一启动虚拟机就蓝屏(错误代码SYSTEM_SERVICE_EXCEPTION)解决方案 一打开虚拟机电脑就立马蓝屏重启,新建虚拟机也没用,然后就开始 ...

  3. 使用PyQt5编写一个简单的GUI程序(pyside 有 pyside-uic 把ui文件转成py文件,pyside-rcc 把qrc文件转成 py文件导入就行了)

    我做Python窗口界面编程时,经常使用PyQt进行设计.这里简单叙述一下使用PyQt5制作一个简单的图形界面的流程 PyQt的简介以及开发环境的搭建在此不多赘述. 1.       打开Qt Des ...

  4. 使用mingw编译完整Qt5的过程(使用了niXman的msys套装)good

    使用mingw编译完整Qt5的过程 坛子里似乎已经有人编译出Qt5了,不过大多有问题,不是缺少opengl就是缺少openssl,还有缺少webkit的,本文提供的仍然不能说是绝对完整的,不过相对以前 ...

  5. 第一式、单例模式-Singleton模式(创建型)

    一.简介 单例模式主要用的作用是用于保证程序运行中某个类只有一个实例,并提供一个全局入口点.单例模式(Singleton)为GOF阐述的标准24种设计模式中最简单的一个.但随着时间推移,GOF所阐述的 ...

  6. java之继承中的静态变量

    package Test; /** * Created by wangbin10 on 2018/7/9. * 我们知道静态变量属于类级别变量,对应每个类只有一份,类的所有实例共有一份,而成员变量则分 ...

  7. 揭秘重度MMORPG手游后台性能优化方案

    本文节选自<2018腾讯移动游戏技术评审标准与实践案例>手册,由腾讯互娱工程师王杰分享<仙剑奇侠传online>项目中游戏后台的优化经验,深度解析寻路算法.视野管理.内存优化. ...

  8. Tido 习题-二叉树-区间查询

    题目描述 食堂有N个打饭窗口,现在正到了午饭时间,每个窗口都排了很多的学生,而且每个窗口排队的人数在不断的变化.现在问你第i个窗口到第j个窗口一共有多少人在排队? 输入 输入的第一行是一个整数T,表示 ...

  9. happy machine learning(First One)

    从前几天起我就开始了愉快的机器学习,这里记录一下学习笔记,我看的是吴恩达老师的视频,这篇博客将会按吴老师的教学目录来集合各优良文章,以及部分的我的个人总结 1.  监督学习与无监督学习 监督:给定一个 ...

  10. mk、cd、pwd、ls、touch、vi、cat、cp、mv的使用及命令快捷方式

    1 命令提示符 1.1 [ root @ oldboyedu62  ~  ] 1 2 3     4 1:登陆系统的用户身份 2:命令分割符合 3:主机名称信息 4:显示当前所在目录路径 1.2 系统 ...