第1章 NFS介绍

1.1 NFS基本概述

NFS(Network File System)网络文件系统

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

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

1.2 为什么要使用NFS服务

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

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

1.3 NFS服务内容概述

NFS优缺点以及生产建议

RPC服务知识概念介绍说明

NFS服务工作原理

NFS共享文件系统使用原理

NFS服务配罝文件exports编写格式及测试

1.4 NFS存储小结

nfs属于本地文件存储服务

1.4.1 NFS存储优点

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

1.4.2 NFS存储局限

存在单点故障, 如果构建高可用维护麻烦。
NFS数据明文, 并不对数据做任何校验。
客户端挂载无需账户密码, 安全性一般(内网使用)

1.4.3 生产应用建议

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

第2章 NFS应用场景

2.1 跨系统文件数据共享

实现Windows与linux系统文件数据共享方法

a.ftp(ftp服务部署)        b.samba服务  

2.2 共享存储的价值

图解集群需要共享存储服务原因

没有共享存储

  1. A用户传图片到WEB1服务器
  2. B用户访问这张图片,结果B用户访问的请求分发到了WEB2,因为WEB2上没有这张图片,结果B用户无法看到A用户传的图片。

有共享存储

1.如果有共享存储的情况, A用户上传图片无论分发到WEB1还是WEB2, 最终都存储至共享存储
2.在当B用户访问图片时,无论分发到WEB1还是WEB2上,最终也都会去共享存储上访问,这样就可以访问到资源了

2.3 NFS实现原理

本地文件操作方式

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

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

第3章 NFS服务安装

服务器系统

角色

外网IP

内网IP

CentOS 7.5

NFS服务端

eth0:10.0.0.31

eth1:172.16.1.31

CentOS 7.5

NFS客户端

eth0:10.0.0.41

eth1:172.16.1.41

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

关闭Firewalld防火墙

[root@xuliangwei ~]# systemctl disable firewalld

[root@xuliangwei ~]# systemctl stop firewalld

关闭selinux防火墙

[root@xuliangwei ~]# sed -ri '#^SELINUX=#cSELINUX=Disabled' /etc/selinux/config

[root@xuliangwei ~]# setenforce 0

3.1 安装NFS

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

3.2 配置NFS

3.2.1 配置内容

NFS服务程序的配置文件为/etc/exports默认该文件里没有任何内容。
按照共享目录的路径 允许访问的NFS客户端(共享权限参数)格式,定义要共享的目录与相应的权限。

exports配置文件格式

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

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

注意: NFS客户端地址与权限之间没有空格

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

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

在NFS服务器上建立用于NFS文件共享的目录,并设置对应权限

[root@nfs ~]# mkdir /data

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

NFS共享目录会记录至/var/lib/nfs/etab,如果该目录不存在共享信息,请检查/etc/exports是否配置错误

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

1.主机都拥有读写权限

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

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

3.2.2 exports配置内容说明

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

第一部分:/data            --指定共享目录信息

第二部分:172.16.1.0/24  --指定了一个网段信息,表示允许指定的网段主机挂载到我本地的共享目录上

第三部分:(rw,sync)       --表示定义共享参数信息,

     rw    表示读写,对共享目录设置的权限

     sync   同步,数据会先写入到NFS服务器内存中,会立刻同步到磁盘里面==直

3.3 创建对应的目录

创建/data目录

并将所属用户和组修改成nfsnobody

[root@nfs ~]# mkdir /data

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

NFS共享目录管理用户为nfsnobody,此用户不用创建,安装nfs软件时会自动创建

3.4 启动服务

在使用NFS服务进行文件共享之前,需要使用RPC(Remote Procedure Call远程过程调用, 服务将NFS服务器的IP地址和端口号信息发送给客户端。
因此,在启动NFS服务之前,需要先重启并启用rpcbind服务程序,同时都加入开机自启动

先启动rpcbind  再启动nfs-server  顺序不能颠倒

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

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

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

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

3.5 检查服务

上面都执行过后  检查 检查是必不可少的一个环节

有问题可以尽早发现

检查端口

[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

检查共享的内容

NFS服务开启后,默认的参数文件位置,注意:修改此文件,对nfs服务没有任何影响

[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)

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

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

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

3.6 配置客户端

客户端只启动rpcbind服务

showmount -e查看远程服务器rpc提供的可挂载nfs信息

客户端创建一个挂载目录, 使用mount命令并结合-t参数, 指定要挂载的文件系统的类型

说明: 如果nfs软件不安装

无法使用showmount 命令

客户端无法识别nfs 文件系统类型

NFS客户端的配置步骤 先使用showmount命令,查询NFS服务器的远程共享信息

其输出格式为“共享的目录名称 允许使用客户端地址”。

配置客户端   

安装客户端工具,仅启动rpcbind服务

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

[root@web01 ~]# systemctl enable rpcbind

[root@web01 ~]# systemctl start rpcbind

使用showmount -e查看远程服务器rpc提供的可挂载nfs信息 showmount使用,需要安装nfs-utils软件

[root@web01 ~]# showmount -e 172.16.1.31

Export list for 172.16.1.31:

/data 172.16.1.0/24

配置客户端-创建挂载点目录,执行挂载命令

在NFS客户端创建一个挂载目录, 使用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

3.7 测试客户端

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

[root@web01 ~]# ll /data/

总用量 4

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

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

使用客户端往nfs存储写入

[root@web01 ~]# echo "nfs-client" >> /mnt/test.txt

检查nfs服务端是否存在客户端创建的新文件

[root@nfs ~]# cat /data/test.txt

nfs-client

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

[root@web01 ~]# vim /etc/fstab

172.16.1.31:/data /nfsdir nfs defaults 0 0

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

[root@web01 ~]# umount /nfsdir

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

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

NFS Server宕机, 强制卸载umount -lf /nfsdir

第4章 nfs参数详解

4.1 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客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用)

sync*

同时将数据写入到内存与硬盘中,保证不丢失数据

async

优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据

anonuid*

配置all_squash使用,指定NFS的用户UID,必须存在系统

anongid*

配置all_squash使用,指定NFS的用户UID,必须存在系统

4.2 验证权限作用

验证ro权限

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

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

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

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

2.客户端验证

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

[root@backup ~]# 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

2.验证all_squash、anonuid、anongid权限

1.服务端配置

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

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

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

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

[root@nfs01 ~]# useradd -u 666 -g 666 www

[root@nfs01 ~]# id www

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

3.重载nfs-server

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

[root@nfs01 ~]# 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@nfs01 ~]# chown -R www.www /data/

[root@nfs01 ~]# 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

4.3 NFS扩展项

1.扩展:无需重启NFS服务平滑加载配置文件

[root@nfs01 r]# cat /etc/exports

/data/r 172.16.1.0/24(ro)

/data/p 172.16.1.0/24(ro)

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

[root@nfs01 r]# exportfs -rv

exporting 172.16.1.0/24:/data/w

exporting 172.16.1.0/24:/data/p

exporting 172.16.1.0/24:/data/r

2.扩展:nfs客户端挂载参数

[root@backup-41 ~]# mount.nfs4 -o noatime,nodiratime,noexec,nodev,nosuid 172.16.1.31:/data/r /data/r/

3.扩展:nfs客户端永久挂载参数

[root@backup-41 ~]# tail -2 /etc/fstab

172.16.1.31:/data/r /data/r nfs defaults,noatime,nodiratime,noexec,nodev,nosuid 0 0

172.16.1.31:/data/w /data/w nfs defaults,noatime,nodiratime,noexec,nodev,nosuid 0 0

4.扩展:客户端检查挂载参数是否生效

 cat /proc/mounts   等于  mount
 

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

  1. 使用URLOS在linux系统中极速部署NFS共享存储服务

    如何在linux系统里搭建NFS服务?其实我们只需要安装一个URLOS面板,然后就能在3分钟内将NFS服务部署完成.近日,URLOS在应用市场中上架了一款NFS应用,它可以让我们的节点主机在3分钟内极 ...

  2. 部署YUM源仓库与NFS共享存储服务

    镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 一.YUM YUM (Yellow dog Updater Modified) ●基于RPM包构建的软件更新机制 ●可以自动解决依赖关系 ●所有 ...

  3. NFS共享存储服务

    NFS共享存储服务                一.NFS共享                  1)NFS(Network File System)网络文件系统                   ...

  4. NFS共享存储服务 (如果厌倦了外面的生活,那就来我身边吧,帮我插秧)

    NFS共享存储服务     1.NFS概述 2.在服务器使用NFS发布共享资源 3.在客户机中访问NFS共享资源 1.NFS概述: NFS是一种基于TCP/IP传输的网络文件系统协议.通过使用NFS协 ...

  5. NFS文件系统存储服务部署

    1 NFS介绍 1.1 什么是NFS? NFS是Network File System的缩写,中文名称是网络文件系统.它的主要功能是通过网络让不用的主机系统之间可以共享文件或者目录.NFS客户端通过挂 ...

  6. centos7配置nfs共享存储服务

    nfs 是一种网络文件系统,需要依赖rpc进行过程调度 注意nfs只验证id,验证用户名,并且只能在类unix os上进行文件共享服务,由于它的脆弱的验证机制,所以不适宜在internet上工作,在内 ...

  7. 网络共享存储服务NFS

    网络共享存储服务NFS 作者:Eric 微信:loveoracle11g 环境准备 服务器系统 角色 IP RHEL 7.5 x86-64 NFS服务端 192.168.10.201 RHEL 7.5 ...

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

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

  9. NFS 共享存储实战

    目录 NFS 共享存储实战 一.NFS概述 二.NFS部署 部署NFS客户端backup和web01 统一web.nfs.backup的用户权限 代码部署步骤 三.NFS配置详解 NFS存储小结 四. ...

随机推荐

  1. 天空盒的制作方法 Max来生成天空盒的六张图片

    在虚拟现实技术中,需要产品展示,场景漫游等,只要想在内部有一个虚拟的3D天空,那么都要用到天空球:天空球目前基本做法主要有两种:分别是正方形的和球形的. 目前360度全景图主要用的是球形的,针对目前已 ...

  2. shell Syntax error: Bad fd number 错误解决

    最近在玩spark , 需要看一下python的spark lib 是怎么加入环境变量的. 执行: sh -x bin/pyspark 报错 + dirname bin/pyspark + cd bi ...

  3. java sevlet Session

    * 如果浏览器支持Cookie,创建Session的时候会把SessionId保存在Cookie中 * 否则必须自己编程使用URL重写的方式实现Session:response.encodeURL()

  4. Hdu 4778 Gems Fight! (状态压缩 + DP)

    题目链接: Hdu 4778 Gems Fight! 题目描述: 就是有G种颜色,B个背包,每个背包有n个宝石,颜色分别为c1,c2............两个人轮流取背包放到公共容器里面,容器里面有 ...

  5. Camera和 tris,verts的优化

    Unity的Camera组件有很多可调节的参数,当需要做优化的时候,stats面板中的tris和verts这两个重点项都与Camera组件的参数有很大关系,有些参数的意义Unity手册说得不够详细,经 ...

  6. React.js 的 context

    这一节我们来介绍一个你可能永远用不上的 React.js 特性 —— context.但是了解它对于了解接下来要讲解的 React-redux 很有好处,所以大家可以简单了解一下它的概念和作用. 在过 ...

  7. Java 设置Word页面背景色

    Word中可以针对不同文档排版设计要求来设置背景设置颜色.常见的可设置单一颜色.渐变色或加载指定图片来设置成背景.下面通过Java来设置以上3种Word页面背景色. 使用工具:Spire.Doc fo ...

  8. java写跳一跳辅助程序

    ##起初是想使用按键精灵脚本程序控制,但还是选择熟悉的java.我这里使用了工具,造成延迟问题.也求教:java控制安卓的正确姿势, 参考了.NET玩跳一跳,思路都是一样的,只不过使用ADB控制安卓的 ...

  9. 如何用sql server数据库恢复.bak数据库备份

    @hcy(黄灿奕) 之前有两次都恢复不了,折腾了很长时间,这一次碰到这样的问题,居然又忘了,又捣鼓了很长时间,现在记下来 1.右击SQL Server 2008实例下的“数据库”文件夹.就是与安全性. ...

  10. DROP SCHEMA - 删除一个模式

    SYNOPSIS DROP SCHEMA name [, ...] [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP SCHEMA 从数据库中删除模式. 模式只能被 ...