01. NFS存储服务作用
  1) 实现数据的共享存储
  2) 编写数据操作管理
  3) 节省购买服务器磁盘开销 淘宝--上万 用电开销

02. NFS服务部署流程
  RPC: 远程过程调用服务程序--- 相当于租房的中介(网络编程支持)
  服务端部署
  第一个历程: 下载安装软件

rpm -qa|grep -E "nfs|rpc"
  yum install -y nfs-utils rpcbind

第二个历程: 编写nfs服务配置文件
  vim /etc/exports (man exports查看配置文件格式语法)
  01: 设置数据存储的目录 /data
  02: 设置网络一个白名单 (允许哪些主机连接到存储服务器进行数据存储)
  03: 配置存储目录的权限信息 存储目录一些功能
  例: /data 172.16.1.0/24(rw,sync) 10.0.0.0/24(rw,sync)
  或者: /data 172.16.1.0/24(rw,sync)
  /data 10.0.0.0/24(rw,sync)

第三个历程: 创建一个存储目录
  mkdir /data
  chown nfsnobody.nfsnobody /data (nfsnobody安装nfs会自动创建虚拟用户)

第四个历程: 启动服务程序
  先启动 rpc服务(一般情况下rpcbind是已经开机自启的)
  systemctl start rpcbind.service
  systemctl enable rpcbind.service
  再启动 nfs服务
  systemctl start nfs
  systemctl enable nfs

客户端部署
第一个历程: 安装nfs服务软件
  yum install -y nfs-utils

第二个历程: 实现远程挂载共享目录
  mount -t nfs 172.16.1.31:/data /mnt

03. NFS服务工作原理:
服务端:
  1. 启动rpc服务,开启111端口
  2. 启动nfs服务
  3. 实现nfs服务进程和端口好的注册
客户端:
  1. 建立TCP网络连接
  2. 客户端执行挂载命令,进行远程挂载
  3. 可以实现数据远程传输存储

总结:共享目录的权限和哪些因素有关:
  1)和存储目录的本身权限有关 (755 属主:nfsnobody)
  2)和配置文件中的权限配置有关 rw/ro xxx_squash anonuid/anongid
  3)和客户端挂载命令的参数有关 ro

NFS配置参数权限
  rw -- 存储目录是否有读写权限
  ro -- 存储目录是否时只读权限 
  sync -- 同步方式存储数据 直接将数据保存到磁盘(数据存储安全)
  async -- 异步方式存储数据 直接将数据保存到内存(提高数据存储效率)
  no_root_squash -- 不要将root用户身份进行转换
  root_squash -- 将root用户身份进行转换
  all_squash -- 将所有用户身份都进行转换
  no_all_squash -- 不要将普通用户身份进行转换

企业互联网公司如何配置NFS 各种squash参数
保证网站存储服务器用户数据安全性:
no_all_squash 需要进行配置 共享目录权限为www(确保客户端用户 服务端用户 uid数值一致)
root_squash 需要进行配置 root-转成-nfsnobody data目录属于-www管理,所以root也不行
以上默认配置(很多服务默认配置都是从安全角度出发)

如何查看nfs默认配置
  cat /var/lib/nfs/etab --- 记录nfs服务的默认配置记录信息
  /data 172.16.1.0/24 (rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,n
  o_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)

如何让root用户可以操作管理www用户管理的data目录
  root --- root_squash --- www ---操作--- data目录
  anonuid=65534,anongid=65534 --- 可以指定映射的用户信息

修改映射用户:www=1002
  /data 172.16.1.0/24(rw,sync,anonuid=1002,anongid=1002)

企业中如何编辑nfs配置文件
  01. 通用方法 *****
  /data 172.16.1.0/24(rw,sync)
  02. 特殊情况 (让部分人员不能操作存储目录 可以看目录中的数据)
  /data 10.0.0.0/24(ro,sync)
  03. 修改默认的匿名用户
  /data 10.0.0.0/24(ro,sync,anonuid=xxx,anongid=xxx)

nfs服务问题:
  01. nfs服务器重启,挂载后创建数据比较慢
  服务器重启方式不正确 
  服务重启:
  01. restart 重启服务 强制断开所有连接 用户感受不好
  02. reload 重启服务(平滑重启) 强制断开没有数据传输的连接 提升用户感受
  07. nfs客户端详细配置说明
  mount -t nfs 172.16.1.31:/data /mnt

如何实现自动挂载:
  01. 利用rc.local
  echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
  02. 利用fstab文件
  vim /etc/fstab
  172.16.1.31:/data /mnt nfs defaults 0 0

客户端mount命令参数
  rw --- 实现挂载后挂载点目录可读可写 (默认)
  ro --- 实现挂载后挂载点目录可读可写
  suid --- 在共享目录中可以让setuid权限位生效 (默认)
  nosuid --- 在共享目录中可以让setuid权限位失效 提供共享目录的安全性
  exec --- 共享目录中的执行文件可以直接执行
  noexec --- 共享目录中的执行文件可以无法直接执行 提供共享目录的安全性
  auto --- 可以实现自动挂载 mount -a 实现加载fstab文件自动挂载
  noauto --- 不可以实现自动挂载
  nouser --- 禁止普通用户可以卸载挂载点
  user --- 允许普通用户可以卸载挂载点
  mount -t nfs -o nosuid 172.16.1.31:/data /mnt

客户端如何卸载
  umount -lf /mnt --- 强制卸载挂载点
  -l 不退出挂载点目录进行卸载
  -f 强制进行卸载操作