环境准备

主机名 WanIP(Wide Area Network) LanIP(Local Area Network) 角色
web01 10.0.0.7 172.16.1.7 nfs的客户端
web02 10.0.0.8 172.16.1.8 nfs的客户端
nfs 10.0.0.31 172.16.1.31 nfs的服务端

NFS服务端

NFS(Network File System)和RPC(Remote Procedure Call)

部署NFS服务端,需要安装软件包 nfs-utilsrpcbind,CentOS7中自带rpcbind软件包,NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到了这个RPC功能。可以说NFS服务是需要使用RPC的一个程序。或者说NFS也是一个RPC Server。所以只要用到NFS的地方都要启动RPC服务,不论是NFS Server 或者NFS Client。这样Server和Client 才能通过RPC来实现PROGRAM PORT 的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。

安装完成后,修改/etc/exports文件,语法格式如下

[共享的目录] IP网段(参数,参数)

其中参数可以用 man exports命令查到:

参数 参数作用
rw NFS客户端读写权限
ro NFS客户端只读权限
root_squash NFS客户端用root用户访问该共享文件目录时,会将root用户映射成匿名用户
no_root_squash NFS客户端用root访问该共享文件夹时,不映射root用户为匿名用户,但给予root用户的待遇
all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用)
no_all_squash 无论NFS客户端使用什么账户访问,都不映射
sync 同时将数据写入到内存与硬盘中,保证不丢失数据
async 资料会先暂存于内存中,而非直接写入硬盘,从内存中写入硬盘
anonuid anonymous UID,配合all_squash参数使用,将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户
anongid anonymous GID,配合all_squash参数使用,将远程访问的所有用户组都映射为匿名用户组,并指定该用户组为本地用户组
  1. # CentOS 7,只需要安装nfs-utils
  2. [root@nfs ~]# yum install -y nfs-utils
  3. # CentOS 6,需要安装nfs和rpc
  4. [root@nfs ~]# yum install -y nfs-utils rpcbind
  5. # 编辑nfs的配置文件
  6. [root@nfs ~]# vi /etc/exports
  7. /data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
  8. # 检查配置文件是否生效
  9. [root@nfs ~]# cat /var/lib/nfs/etab
  10. # 创建匿名用户对应的本地用户
  11. [root@nfs ~]# useradd www -u 666 -r -s /sbin/nologin -M
  12. # 创建 /data目录,并改变其 属主和属组
  13. [root@nfs ~]# mkdir /data
  14. [root@nfs ~]# chown -R www.www /data
  15. # 启动 nfs-server 和 rpcbind ,添加开机自启
  16. [root@nfs ~]# systemctl restart nfs-server rpcbind
  17. [root@nfs ~]# systemctl enable nfs-server rpcbind

NFS客户端

  1. # 客户端安装 nfs-utils 软件包(CentOS7)
  2. [root@web01 ~]# yum install -y nfs-utils
  3. # 查看 NFS服务端 "房源"
  4. [root@web01 ~]# showmount -e 172.16.1.31
  5. Export list for 172.16.1.31:
  6. /data 172.16.1.0/24
  7. # 将目录挂载到 NFS服务端,此时访问 /var/www/html/upload 目录时,实际上是 NFS服务端的 /data目录
  8. [root@web01 ~]# mount -t nfs 172.16.1.31:/data /var/www/html/upload
  9. # 对应的卸载命令
  10. [root@web01 ~]# umount /var/www/html/upload

部署时常见报错

  1. # no route to host
  2. # 1.网络
  3. [root@web01 ~]# ping 172.16.1.31
  4. # 2.端口,nfs-server 通过 RPC 通讯,没有固定端口,无需检查
  5. # 3.防火墙
  6. [root@nfs ~]# systemctl status firewalld
  7. # 4.selinux
  8. [root@nfs ~]# getenforce
  1. # mount.nfs: access denied
  2. # 检查 nfs服务端的 /etc/exports 文件,是否包含 此主机的IP地址
  3. [root@nfs ~]# cat /etc/exports
  4. /data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
  1. # can't touch "xxx" : permission denied
  2. # 1. 检查 nfs服务端 的共享目录,属主和属组 是否为匿名用户(anonuid=666,anongid=666)
  3. [root@nfs ~]# ll /data -d
  4. drwxr-xr-x 2 wqh wqh 140 May 9 15:24 /data
  5. [root@nfs ~]# id wqh
  6. uid=666(wqh) gid=666(wqh) groups=666(wqh)
  7. # 2. 检查 nfs客户端 的配置文件,是否将权限设置为只读
  8. [root@nfs ~]# cat /etc/exports
  9. /data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

httpd服务

  1. # 安装 httpd 服务
  2. [root@web01 ~]# yum -y install httpd php
  3. # 完善站点目录,编写代码逻辑,使搭建的网站 可上传文件到 /var/www/html/upload
  4. [root@web01 ~]# ll /var/www/html
  5. total 52
  6. -rw-r--r-- 1 root root 38772 Apr 27 2018 bg.jpg
  7. -rw-r--r-- 1 root root 2633 May 4 2018 index.html
  8. -rw-r--r-- 1 root root 52 May 10 2018 info.php
  9. drwxr-xr-x 2 root root 140 May 9 15:24 upload
  10. -rw-r--r-- 1 root root 1128 May 9 11:58 upload_file.php
  11. # 上传的文件路径设置为 /var/www/html/upload,由 apache 用户上传,所以要修改 /var/www/html/upload 的属主和属组,否则 apache 用户没有写入的权限
  12. [root@web01 ~]# chown apache.apache /var/www/html/upload
  13. [root@web01 ~]# ll /var/www/html/upload
  14. drwxr-xr-x 2 apache apache 140 May 9 15:24 upload
  15. # 或者不指定为 apache 用户,需要修改配置文件
  16. [root@web01 ~]# vim /etc/httpd/conf/httpd.conf
  17. User www
  18. Group www
  19. [root@web01 ~]# chown www.www /var/www/html/upload
  20. [root@web01 ~]# ll /var/www/html/upload
  21. drwxr-xr-x 2 www www 140 May 9 15:24 upload
  22. # 修改后,重启 httpd服务
  23. [root@web01 ~]# systemctl restart httpd
  24. ######### 以上是单机架构服务器必须要做的操作 ,若是分布式服务器架构端,有以下补充 ##########
  25. # 补充1:NFS的客户端/var/www/html的属主和属组 和 NFS的服务端/data 的属主和属组 一定要同一个 UID,GID,不一定要用同一个用户名,组名,否则没有对应权限位的操作权限!!
  26. # 补充2:若不同,执行挂载后,NFS客户端会不识别 /data挂载目录(/var/www/html) 的属主和属组,只显示对应的 UID GID,若 NFS客户端有这个UID的用户,则显示客户端的用户名
  27. # 补充3:在挂载后,对于 NFS服务端的操作,并非任何用户都可执行,除了 ROOT 以外, NFS客户端的用户只有 UID=666,GID=666 才可以操作共享存储的目录

NFS 共享存储的坑

NFS 客户端 /var/www/html 的属主和属组 和 NFS服务端 /data 的属主和属组 一定要同一个 UID,GID,不一定要用同一个用户名,组名,否则没有对应权限位的操作权限!!

例如,NFS 服务端的匿名用户 UID=666、GID=666,而我在 NFS客户端 用一个 UID=777、GID=777 的用户去挂载的共享存储目录中写入文件时,会报错!!

也就是说,NFS客户端,某个用户的 UID 和 GID 不同于 NFS 服务端匿名用户时,是无法拥有对应的权限的,举一个具体的例子,如 phpmyadmin软件 的会话(Session)文件存储:





NFS 共享存储的更多相关文章

  1. 生产场景NFS共享存储优化及实战

    生产场景NFS共享存储优化: 1.硬件:sas/ssd磁盘,买多块,raid0/raid10,网卡好 2.NFS服务器端优化加all_squash,async /backup/NFS 192.168. ...

  2. Linux之nginx反向代理+三台web+nfs共享存储实现集群配置

    作业四:nginx反向代理+三台web+nfs共享存储实现集群配置 在各个web服务器上挂载nfs [root@localhost nginx]# mount -t nfs 192.168.152.1 ...

  3. 负载均衡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. 使用URLOS在linux系统中极速部署NFS共享存储服务

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

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

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

  6. NFS 共享存储实战

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

  7. 基于NFS共享存储实现KVM虚拟机动态迁移

    基于NFS共享存储实现KVM虚拟机动态迁移 一:配置环境 二:安装相关的依赖包 三:实现NFS共享存储 四:KVM机配置相同的步骤 五:安装KVM01安装虚拟机 六:实现迁移  实验初始配置:所有主机 ...

  8. NFS共享存储服务

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

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

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

随机推荐

  1. sap alv grid 中的delete按键问题

    今天发先一个问题,在使用ALV输出的时候,如果有字段设置为可编辑状态,则会在前面出现选择条,并且,当我们选择一行或者多行的时候,可以用键盘上的DELETE键将行删除!呵呵

  2. Spring入门及IoC的概念

    Spring入门 Spring是一个轻量级的Java开发框架,最早由Robd Johnson创建,目的为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题,它是一个分层的JavaSE/EE轻量级开源 ...

  3. js模仿京东首页的倒计时功能

    模仿京东首页的倒计时 我们学习了定时器,可以用定时器做一个倒计时,于是我模仿了京东首页倒计时. 先看看京东首页的倒计时. 思路: 如何倒计时? 给一个未来的时间.然后计算未来时间到现在的时间戳. 用定 ...

  4. 微人事项目-mybatis-持久层

    摘要 最近将微人事这个开源项目进行了复现,这篇文章记录mybaits访问数据库这一块. 其中MyBatis是一个流行的持久层框架,支持自定义SQL.存储过程和高级映射.MyBatis消除了几乎所有的J ...

  5. jQuery 自动生成二维码

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http ...

  6. :setting:`task_soft_time_limit` celery 异步任务 执行时间限制 内存限制

    https://docs.celeryproject.org/en/stable/userguide/configuration.html?highlight=control_exchange#new ...

  7. (Sqlserver)sql求连续问题

    题目一:create table etltable( name varchar(20) , seq int, money int); create table etltarget ( name var ...

  8. physical CPU vs logical CPU vs Core vs Thread vs Socket(翻译)

    原文地址: http://www.daniloaz.com/en/differences-between-physical-cpu-vs-logical-cpu-vs-core-vs-thread-v ...

  9. .params和query的区别

    用法:query要用path来引入,params要用name来引入,接收参数都是类似的,分别是this.$route.query.name和this.$route.params.name.url地址显 ...

  10. Android webview 问题记录

    1. Android 7.1真机安装调试apk时报错,解析安装包失败 原因:sdk版本不支持7.1版本,需要调整minSdkVersion等参数,支持低版本 解决方法: android { compi ...