设为首页 收藏本站
查看: 378|回复: 0

[经验分享] NFS存储服务深度实践

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-5-9 10:42:59 | 显示全部楼层 |阅读模式
                      [url=]第1章 NFS[/url]介绍  [url=]1.1 什么是NFS[/url]?  NFS 是Network File System的缩写,中文意思是网络文件系统。它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。NFS客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录。
  NFS网络文件系统就像windows系统的网络共享,安全功能、网络驱动器映射,这也和Linux系统里的Samba服务类似。只不过一般情况下,windows网络共享服务或Samba服务用于办公局域网共享,而互联网中小型网站集群架构后端常用NFS进行数据共享,如果是大型网站,那么有可能还会用到更为复杂的分布式文件系统,例如:Moosefs(mfs)、GlusterFS、FastDFS。
  [url=]1.2 NFS[/url]的历史介绍  第一个网络文件系统成为File Sccess Listener,由Digital Equipment Corporation
  (DEC)在1976年开发。
  NFS是第一个构建与IP协议智商的现代网络文件系统。在20世纪80年代,它首先作为实验的文件系统,由Sun Microsystems在内部完成开发。NFS协议终归于Request for Comments(RFC)标准,并且随后演化为了NFSv2.作为一个标准,由于NFS与其他客户端和服务器的互操作能力很好而发展快速。
  之后,标准继续演化,称为NFSv3,在RFC1813中有定义。这一新的协议比以前的版本具有更好的可扩展性,支持大文件(超过2GB),异步写入,并且将TCP作为了传输协议,为文件系统在更广泛的网络中使用铺平了道路。在2000年,RFC3010(由RFC3530修订)将NFS带入企业级应用。此时,Sum引入了具有较高安全性带有状态协议的NFSv4(NFS之前的版本都是无状态的)。今天,NFS版本的4.1(由RFC5661定义)增加了对跨越分布式服务器并行访问的支持(称之为PNFS extension)。
  NFS系统发展的时间表,包括记录器特性的特定RFC,如下图
   wKioL1cuwguwVdDVAAKxB87jEdE985.jpg
  NFS系统已经历了近30年的发展,它代表了一个非常稳定的(及可移植)网络文件系统,具备可扩展、高性能等特性,并达到了企业级应用质量标准。由于网络速度的增加和延迟的降低,NFS系统一直是通过网络提供文件系统服务的有竞争力的选择,特别是在中小型互联网企业中,应用十分广泛。
  [url=]1.3 NFS[/url]在企业中的应用场景  在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频、图片、附件等静态资源文件,通常网站用户上传到的文件都会放到NFS共享里,例如BBS产品的图片、附件、头像(注意网站BBS程序不要放NFS共享里),然后前端所有的节点访问这些静态资源时都会读取NFS存储上的资源。NFS是当前互联网系统架构中最常用的数据存储服务器之一,前面说过,中小型网站公司应用频率更高,大公司或门户除了使用NFS外,还可能会使用更为复杂的分布式文件系统,比如Moosefs(mfs)、GlusterFS、FastDF等。
  在企业生产集群架构中,NFS作为所有前端web服务的共享存储,存储的内容一般包括网站用户上传的图片、附件头像等,注意,网站的程序代码不要放NFS共享里,因为网站程序是开发运维人员统一发布的,不存在发布延迟问题,直接批量发布到web节点提供访问比共享到NFS里访问效率更高。
  [url=]1.4 企业生产集群为什么需要共享存储角色[/url]  这里通过图解给大家展示一下集群架构需要共享存储服务的理由。例如:A用户传图片到web服务器,然后让B用户访问这张图片,结果B用户访问的请求分发到了web2,因为web2上没有这张图片,这就导致它无法看到A用户上传的图片,如果此时有一个共享存储,A用户上传图片的请求无论是分发到web1还是web2上,最终都会存储到共享存储上,而在B用户访问图片是,无论请求分发到web1还是web2行,最终也都会去共享存储上找,这样就可以访问到需要的资源了。这个共享存储的位置可以通过开源软件和商业硬件实现,互联网中小型集群架构会用普通PC服务器配置NFS网络文件系统实现。
   wKioL1cuwmrQToRbAAHmUCzTlao973.jpg
  中小型互联网企业一般不会买硬件存储,因为太贵,大公司如果业务发展很快的话,可能会临时买硬件存储顶一下网站的压力,当网站并发继续加大时,硬件存储的扩展相对就会很费劲,且价格成几何级数增加。例如:淘宝网就曾替换掉了很多硬件设备,比如,用lvs+haproxy替换了netscaler负载均衡设备,用FastDFS、TFS配合PC服务器替换了netapp、emc等商业存储设备,去IOE正在成为互联网公司的主流。
  [url=]第2章 NFS[/url]系统原理介绍  [url=]2.1 NFS[/url]系统挂载结构图与详解   wKiom1cuwZqBYP-3AAJdXpUULFg541.jpg
  如上图所示,在NFS服务器端设置好一个共享目录/video后,其他有权限访问NFS服务器端的客户端就可以将这个共享目录/video挂载到客户端本地的某个挂载点(其实就是一个目录,这个挂载点目录可以自己随意指定),上图中的两个NFS客户端本地的挂载点分别为/v/video和/video,不同客户端的挂载点可以不相同。
  客户端正确挂载完毕后,就进入到了nfs客户端的挂载点所在的/v/video或/video目录,此时就可以看到NFS服务器端/video共享出来的目录下的所有数据。在客户端上查看是,NFS服务器端的/video目录就相当于客户端本地的磁盘分区或目录,几乎感觉不到使用上的区别,根据NFS服务端授予的NFS共享权限以及共享目录的本地系统权限,只要是指定的NFS客户端操作挂载/v/video或/video的目录,就可以将数据轻松地存储到NFS服务器端的/video目录中了。
  客户端挂载NFS后,本地挂载基本信息显示如下:
  [iyunv@web02 ~]# df -h
  Filesystem Size Used Avail Use% Mounted on
  /dev/sda3 6.9G 1.5G 5.1G 23% /
  tmpfs 242M 0 242M 0% /dev/shm
  /dev/sda1 190M 36M 145M 20% /boot
  172.16.1.31:/data 6.9G 1.5G 5.1G 23% /mnt<===172.16.1.31为nfs server的ip地址
  提示:mount 源 目标
  mount 712.16.1.31:/video /video
  从挂载信息来看,和本地的磁盘分区几乎没什么差别,只是文件系统对应列的开头是以IP地址开头的形式了。
  大家必须知道,NFS在传输数据时使用的端口会随机选择,那NFS客户端是怎么知道NFS服务端使用的是哪个客户端呢?
  答案:就是通过RPC(中文意思远程过程调用,英文Remote Procedure Call简称RPC)协议/服务来实现,这个RPC服务的应用在门户级的网站有很多,例如:百度。接下来,就来谈谈什么是RPC协议/服务。
   wKioL1cuwnyzek1FAAKQHSY5CU8921.jpg
  如图所以,PRC服务就像买房与卖房之间的中介一样,RPC也就是服务端与客户端的中介。
   wKiom1cuwaKiFV4mAABlWA9-FO4757.jpg
  NFS需要有RPC服务(rpcbind服务)的协助才能成功对外提供服务。无论是NFS客户端还是NFS服务器端,当要使用NFS时,都需要首先启动RPC服务(rpbind服务),NFS服务必须在RPC服务启动之后启动,客户端无需启动NFS服务,但需要启动RPC服务。
  注意:NFS的RPC服务,在CentOS5.5.X名称为portmap,在CentOS6.X下名称为rpcbind。
  参考资料:
  http://www.tldp.org/HOWTO/NFS-HOWTO/indes.html
  http://www.citi.umich.edu/projects/nfsv4/linux/
  http://www.vanemery.com/Linux/NFSv4/NFSv4-no-rpcsec.html
  http://www.ibm.com/developerworks/cn/linux/l-network-filesystems/
  [url=]第3章 NFS[/url]配置过程Centos6.7  [url=]3.1 老男孩教育NFS[/url]服务端配置步骤:  1、安装软件
  yum install nfs-utils dos2unix rpcbind -y
  yum
  2、启动服务(注意先后顺序)
  /etc/init.d/rpcbind start
  rpcinfo -p localhost
  /etc/init.d/nfs start
  rpcinfo -p localhost
  3、设置开机自启动
  chkconfig nfs on
  chkconfig rpcbind on
  4、配置nfs服务
  echo " /data 172.16.1.0/21(rw,sync)">>/etc/exports
  mkdir -p /data
  chown -R nfsnobody.nfsnobody /data
  (查看nfs默认使用的用户以及共享的参数cat /var/lib/nfs/etab)
  5、重新加载服务(优雅重启)
  /etc/init.d/nfs reload =====exportfs -rv
  6、检查或测试挂载
  showmount -e[url=]127.0.0.1[/url]
  老男孩教育NFS客户端:
  1、安装软件
  yum install nfs-utils rpcbind -y
  2、启动rpcbind
  /etc/init.d/rpcbind start
  3、配置开机自启动
  chkconfig rpcbind on
  4、测试服务端共享情况
  showmount -e 172.16.1.31
  5、挂载
  mkdir -p /data
  mount -t nfs 172.16.1.31:data /data
  6、测试读,写
  [url=]3.2 小结:[/url]  NFS服务端与web端都安装nfs与rpc
  [iyunv@wangtian ~]# yum install nfs-utils rpcbind -y
  [iyunv@web01 ~]# yum install nfs-utils rpcbind -y
  NFS服务端
  [iyunv@nfs01 ~]#/etc/init.d/rpcbind start
  [iyunv@nfs01 ~]# /etc/init.d/nfs start
  加入开机启动
  [iyunv@nfs01 ~]# chkconfig nfs on
  [iyunv@nfs01 ~]# chkconfig rpcbind on
  web客户端
  [iyunv@web01 ~]# /etc/init.d/rpcbind start
  加入开机启动
  [iyunv@web01 ~]#chkconfig rpcbind on
  [url=]第4章 NFS[/url]软件  [url=]4.1 NFS[/url]软件列表  要部署NFS服务,需要安装下面的软件包:
  q nfs-utils:NFS服务的主程序,包括rpc.nfsd、rpc.mountd这两个daemons和相关文档说明,以及执行命令文件等。
  q rpcbind:CentOS6.X下面的RPC的主程序。NFS可以视为一个RPC程序,再启动任何一个RPC程序之前,需要做好端口和功能的对应映射工作,这个映射工作就是由rpcbind服务来完成的。因此,在提供NFS服务之前必须先启动rpcbind服务才行
  [url=]4.2 查看NFS[/url]软件包  可使用如下命令查看默认情况下CentOS5.8/6.6里NFS软件的安装情况。
  [iyunv@nfs01 ~]# rpm -qa nfs-utils rpcbind
  rpcbind-0.2.0-11.el6_7.x86_64
  nfs-utils-1.2.3-64.el6.x86_64
  CentOS6.6默认没有安装NFS软件包(CentOS5默认会安装),可以使用yum install nfs-utils rpcbind -y命令来安装NFS软件。
  [url=]4.3 启动rpcbind[/url]服务  因为NFS及其辅助程序都是基于RPC协议的(使用的端口为111),所有首先要确保系统中运行了rpcbind服务。
  [iyunv@nfs01 ~]# LANG=en #临时调整系统位英文字符集,便于grep过滤
  [iyunv@nfs01 ~]# /etc/init.d/rpcbind status #检查rpcbind服务状态
  rpcbind (pid 27427) is running...
  [iyunv@nfs01 ~]# rpcinfo -p localhost #检查rpcinfo信息
  program vers proto port service
  100000 4 tcp 111 portmapper
  100000 3 tcp 111 portmapper
  100000 2 tcp 111 portmapper
  100000 4 udp 111 portmapper
  ...省略部分
  100021 1 tcp 37256 nlockmgr
  100021 3 tcp 37256 nlockmgr
  100021 4 tcp 37256 nlockmgr
  [iyunv@nfs01 ~]# /etc/init.d/rpcbind start #启动rpcbind服务
  [iyunv@nfs01 ~]# ps -ef|grep "rpc|nfs"
  root 29325 28803 0 22:09 pts/1 00:00:00 grep rpc|nfs
  [iyunv@nfs01 ~]# ps -ef|egrep "rpc|nfs"
  rpc 27427 1 0 12:53 ? 00:00:00 rpcbind
  root 27474 2 0 12:53 ? 00:00:00 [rpciod/0]
  root 27483 1 0 12:53 ? 00:00:00 rpc.rquotad
  root 27488 1 0 12:53 ? 00:00:00 rpc.mountd
  root 27495 2 0 12:53 ? 00:00:00 [nfsd4]
  root 27496 2 0 12:53 ? 00:00:00 [nfsd4_callbacks]
  root 27497 2 0 12:53 ? 00:00:00 [nfsd]
  root 27498 2 0 12:53 ? 00:00:00 [nfsd]
  root 27499 2 0 12:53 ? 00:00:00 [nfsd]
  root 27500 2 0 12:53 ? 00:00:00 [nfsd]
  root 27501 2 0 12:53 ? 00:00:00 [nfsd]
  root 27502 2 0 12:53 ? 00:00:00 [nfsd]
  root 27503 2 0 12:53 ? 00:00:00 [nfsd]
  root 27504 2 0 12:53 ? 00:00:00 [nfsd]
  root 27535 1 0 12:53 ? 00:00:00 rpc.idmapd
  root 28257 2 0 15:31 ? 00:00:00 [nfsiod]
  root 28258 2 0 15:31 ? 00:00:00 [nfsv4.0-svc]
  加入开机自启动
  [iyunv@nfs01 ~]# chkconfig rpcbind on
  [iyunv@nfs01 ~]# less /etc/init.d/rpcbind
  #! /bin/sh
  #
  # rpcbind Start/Stop RPCbind
  #
  # chkconfig: 2345 13 87
  [iyunv@nfs01 ~]# less /etc/init.d/nfs
  #!/bin/sh
  #
  # nfs This shell script takes care of starting and stopping
  # the NFS services.
  #
  # chkconfig: - 30 60
  可以看到他们启动的先后次序分别是rpcbind13和nfs30。如果是放进rc.local里面的话就一定要注意启动先后次序。也可以把服务统一放进rc.local里面,这样自己跑什么服务都知道
  [iyunv@nfs01 ~]# /etc/init.d/rpcbind start #开启服务
  [iyunv@nfs01 ~]# /etc/init.d/rpcbind statis
  Usage: /etc/init.d/rpcbind {start|stop|status|restart|reload|force-reload|condrestart|try-restart}
  [iyunv@nfs01 ~]# /etc/init.d/rpcbind status #查看服务状态
  rpcbind (pid 27427) is running...
  [iyunv@nfs01 ~]# lsof -i :111 #查看端口号
  COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  rpcbind 27427 rpc 6u IPv4 40188 0t0 UDP *:sunrpc
  rpcbind 27427 rpc 8u IPv4 40191 0t0 TCP *:sunrpc (LISTEN)
  rpcbind 27427 rpc 9u IPv6 40193 0t0 UDP *:sunrpc
  rpcbind 27427 rpc 11u IPv6 40196 0t0 TCP *:sunrpc (LISTEN)
  [iyunv@nfs01 ~]#
  [url=]第5章 NFS[/url]服务企业案例配置实践  共享/data目录给172.16.1.0整个网段的主机读写,实现把nfs server上的/data目录共享给172.16.1.0整个网段的主机,且可读写。
  [url=]5.1 在NFS Server[/url]端执行的操作  1)查看系统环境
  [iyunv@nfs01 ~]# cat /etc/redhat-release
  CentOS release 6.7 (Final)
  [iyunv@nfs01 ~]# uname -r
  2.6.32-573.el6.x86_64
  编辑 /etc/exports
  [iyunv@nfs01 ~]# vim /etc/exports
  #data shared by wangtian at 20160424
  /data 172.16.1.0/21(rw,sync)
  ~
  ~
  ~
  ~
  ~
  [iyunv@nfs01 ~]# tail /etc/exports
  #data shared by wangtian at 20160424
  /data 172.16.1.0/21(rw,sync
  平滑重启
  [iyunv@nfs01 ~]# /etc/init.d/nfs reload====》exportfs -rv
  先进行域名解析,再挂载,速度就很快。
  [iyunv@nfs01 ~]# vi /etc/hosts
  127.0.0.1 localhost localhost.localdomain localhost4 localhost4.loca
  ldomain4
  ::1 localhost localhost.localdomain localhost6 localhost6.loca
  ldomain6
  172.16.1.5 lb01
  172.16.1.6 lb02
  172.16.1.7 web02
  172.16.1.8 web01
  172.16.1.51 db01
  172.16.1.31 nfs01
  172.16.1.41 backup
  172.16.1.61 m01
  把下面的IP与主机名加进去
  然后进行挂载
  [iyunv@nfs01 ~]# mount -t nfs 172.16.1.31:/data /mnt
  查看挂载结果
  [iyunv@nfs01 ~]# df -h
  Filesystem Size Used Avail Use% Mounted on
  /dev/sda3 6.9G 1.5G 5.1G 23% /
  tmpfs 242M 0 242M 0% /dev/shm
  /dev/sda1 190M 36M 145M 20% /boot
  172.16.1.31:/data 6.9G 1.5G 5.1G 23% /mnt
  [url=]5.2 客户端[/url]  [iyunv@nfs01 ~]# vi /etc/hosts
  127.0.0.1 localhost localhost.localdomain localhost4 localhost4.loca
  ldomain4
  ::1 localhost localhost.localdomain localhost6 localhost6.loca
  ldomain6
  172.16.1.5 lb01
  172.16.1.6 lb02
  172.16.1.7 web02
  172.16.1.8 web01
  172.16.1.51 db01
  172.16.1.31 nfs01
  172.16.1.41 backup
  172.16.1.61 m01
  [iyunv@web01 ~]# /etc/init.d/rpcbind start
  Starting rpcbind: [ OK ]
  [iyunv@web01 ~]# showmount -e 172.16.1.31
  Export list for 172.16.1.31:
  /data 172.16.1.0/21
  [iyunv@web01 ~]# mount -t nfs 172.16.1.31:/data /mnt
  [iyunv@web01 ~]# df -h
  Filesystem Size Used Avail Use% Mounted on
  /dev/sda3 6.9G 1.5G 5.1G 22% /
  tmpfs 242M 0 242M 0% /dev/shm
  /dev/sda1 190M 36M 145M 20% /boot
  172.16.1.31:/data 6.9G 1.5G 5.1G 23% /mnt
  [iyunv@web01 ~]#
  开始在nfs服务端写入文件
  [iyunv@nfs01 data]# cd /data/
  [iyunv@nfs01 data]# touch {a..z}
  [iyunv@nfs01 data]# ls
  a c e g i k m o q s u w y
  b d f h j l n p r t v x z
  可以看到客户端已经同步了
  [iyunv@web01 mnt]# ls
  a c e g i k m o q s u w y
  b d f h j l n p r t v x z
  此时客户端还不能写,权限不够,要回到服务端更改nfsnobody权限
  [iyunv@nfs01 data]# grep nfsnobody /etc/passwd
  nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
  [iyunv@nfs01 data]# chown -R nfsnobody.nfsnobody /data
  再回到客户端就可以写了
  [iyunv@web01 mnt]# rm -f *
  [iyunv@web01 mnt]# ls
  [iyunv@web01 mnt]# touch {1..3}
  [iyunv@web01 mnt]# ls
  1 2 3
  [iyunv@web01 mnt]#
  再到服务端查看
  [iyunv@nfs01 data]# ls
  1 2 3
  [url=]5.3 配置小结[/url]  服务端vim /etc/exports
  #data shared by wangtian at 20160424
  /data 172.16.1.0/21(rw,sync)
  查看tail /etc/export
  #data shared by wangtian at 20160424
  /data 172.16.1.0/21(rw,sync)
  平滑重启,优雅重启
  /etc/init.d/nfs reload
  域名解析(服务端,客户端都要解析)
  cat >>/etc/hosts<<EOF   
172.16.1.5      lb01     
172.16.1.6      lb02     
172.16.1.7      web02     
172.16.1.8      web01     
172.16.1.51     db01 db01.etiantian.org     
172.16.1.31     nfs01     
172.16.1.41     backup     
172.16.1.61     m01     
EOF
  vi /etc/hosts
  把ip 主机名追加进去
  172.16.1.5 lb01
  172.16.1.6 lb02
  172.16.1.7 web02
  172.16.1.8 web01
  172.16.1.51 db01
  172.16.1.31 nfs01
  172.16.1.41 backup
  172.16.1.61 m01
  查看服务有没有
  [iyunv@nfs01 /]# showmount -e 127.0.0.1
  不放心,可以自己挂载自己
  [iyunv@nfs01 /]# mount -t nfs  172.16.1.31:/data /mnt
  然后df -h 查看
  [iyunv@nfs01 /]# df -h
  客户端
  查看有没有
  [iyunv@web01 ~]#showmount -e 172.16.1.31
  然后挂载
  [iyunv@web01 ~]# mount -t nfs  172.16.1.31:/data /mnt
  在查看
  [iyunv@web01 ~]# df -h
  在服务端
  [iyunv@nfs01 /]# cd /data/
  [iyunv@nfs01 data]# touch {a..z}
  [iyunv@nfs01 data]# ls
  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z
  在客户端查看
  [iyunv@web01 ~]# ls /mnt/
  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z
  如果想再客户端可以写,就要在服务端给相应目录权限
  [iyunv@nfs01 data]# chown -R nfsnobody.nfsnobody /data
  [url=]第6章 NFS[/url]服务的重点知识梳理  当多个NFS客户端访问服务器端的读写文件时,需要具有以下几个权限:
  q NFS服务器/etc/exports设置需要开放可写入的权限,及服务端的共享目录权限。
  q NFS服务器实际要共享的NFS目录权限具有可写入w的权限,及服务端本地目录的安全权限。
  q 每台机器都对应存在和NFS摩恩配置UID的相同UID65534的nfsnobody用户(确保所有客户端的访问权限统一,否则每个机器需要同时建立相同UID的用户,并覆盖NFS的默认用户配置)。
  只有满足上述三个条件,多个NFS客户端才能具有查看、修改、删除其他任意NFS客户端上传文件的权限,这在大规模的集群环境中作为集群共享存储时尤为重要。
  [url=]第7章 NFS[/url]内核优化建议  下面是优化选项说明
  q /proc/sys/net/core/rmem_default:该文件指定了接受套接字缓冲区大小的默认值(以字节为单位),默认设置:124928.
  q /proc/sys/net/core/rmem_maxt:该文件指定了接受套接字缓冲区大小的最大值(以字节为单位),默认设置:124928.
  q /proc/sys/net/core/rmem_default:该文件指定了发送套接字缓冲区大小的默认值(以字节为单位),默认设置:124928.
  q /proc/sys/net/core/rmem_default:该文件指定了接受套接字缓冲区大小的最大值(以字节为单位),默认设置:124928.
  上述文件对应的具体内核优化命令如下:
  cat >>/etc/sysctl.conf<<EOF
  net.core.wmem_default = 8388608
  net.core.rmem_default = 8388608
  net.core.rmem_max = 16777216
  net.core.wmem_max = 16777216
  EOF
  sysctl -p
  [url=]第8章 企业生产场景NFS[/url]共享存储优化小结  q 硬件:sas/ssd磁盘,买多块,raid0/raid10。网卡吞吐量要大,至少千兆(多块bond)。
  q NFS服务器端配置:/data 172.16.1.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534)
  q NFS客户端挂载优化配置命令:
  mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,rsize=131072,wsize=131072 172.16.1.7:/data/ /mnt #兼顾安全性能
  q 对NFS服务的所有服务器内核进行优化时,执行如下命令:
  cat >>/etc/sysctl.conf<<EOF
  net.core.wmem_default = 8388608
  net.core.rmem_default = 8388608
  执行sysctl -p生效。
  q 如果卸载的时候提示“umount:/mnt:device is busy”,需要退出挂载目录再进行卸载,如果是NFS Server宕机了,则需要强制卸载,可执行umount -lf /mnt.
  q 大型网站NFS网络文件系统的替代软件为分布式文件系统Moosefs(mfs)、GlusterFS、FastDFS。
  q 放进/etc/fstab生效的方法:chkconfig netfs on 让网卡先启动,再挂载
  [url=]第9章 NFS[/url]系统应用的优缺点说明  NFS服务可以让不同的客户端挂载使用同一个共享目录,也就是将其作为共享存储使用,这样可以保证不同节点客户端数据一致性,在集群架构环境中经常会用到。如果是windows和linux混合环境的集群系统,可以用samba来实现。
  优点:
  q 简单,容易上手,容易掌握。
  q NFS文件系统内数据是在文件系统之上的,即数据是能看见的。
  q 部署快速,维护简单方便,且可靠那个,满足需求就是最好的。
  q 可靠,从软件层面上看,数据可靠性高,经久耐用。数据是在文件系统之上的。
  q 服务非常稳定
  局限:
  q 存在单点故障,如果NFS Server宕机了,所有客户端都不能访问共享目录。这个在后期的课程会通过负载均衡及高可用方案弥补。
  q 在大数据高并发的场合,NFS效率、性能有限(2千万/日一下PV的网站不是瓶颈,除非网站架构设计太差)。
  q 客户端认证是基于IP和主机名的,权限要根据ID识别,安全性一般(用于内网则问题不大)。
  q NFS数据时是明文的,NFS本事不对数据完整性做验证。
  q 多台客户机器挂载一个NFS服务器时,连接管理维护麻烦(耦合度多高。)尤其NFS服务端出问题后,所有NFS客户端都处于挂掉状态(测试环境可使用autofs自动挂在解决,正式环境可修复NFS服务或强制卸载)
  q 设计了同步(实时等待)和异步(解耦)的概念,NFS服务端和客户端相对来说就是耦合度有些高。网站程序也是一样,尽量不要耦合度太高,系统及程序架构师的重要职责就是为程序及架构解耦,让网站的扩展性变得更好。
  应用建议:
  大中小型网站(参考的2千万/日一下PV以下)线上应用,都有用武之地。门户站也会有应用,生产场景应该多把数据的访问往前推,即尽量把静态存储里的资源通过CDN或缓存服务器提供服务,如果没有缓存服务或架构不好,存储服务器数量再多也是扛不住压力的,而且用户体验会很差。
  [url=]第10章 NFS[/url]细节详解  [url=]10.1 exports[/url]配置文件  exports配置文件格式:
  NFS共享的目录 NFS客户端地址1(参1、参2...) 客户端地址(参1、参2...)
  例:
  /data 172.16.1.0/21(rw,sync)
  参数含义:
  NFS共享的目录:为NFS服务端要共享的实际目录,要用绝对路径,如(/data)。注意共享目录的本地权限,如果需要读写共享,一定要让本地目录被NFS客户端的用户(nfsnobody)可以读写。
  NFS客户端地址:为NFS服务端授权的可访问共享目录的NFS客户端地址,可以为单独的IP地址或主机名、域名等,也可以为整个网段地址,还可以用“*”来匹配所有客户端服务器,这里所谓的客户端一遍来说是前段的业务服务器,例如:web服务。
  指定NFS客户端之地的配置详细说明   
           客户端地址
         
           具体地址
         
           说明
         
           授权单一客户端访问NFS
         
           10.0.0.30
         
           一般强开下,生产环境中此配置不多。
         
           授权整个网段可访问NFS
         
           10.0.0.0/24
         
           其中的24等同于255.255.255.0,指定网段为生产环境中最常见的配置。配置简单,维护方便。
         
           授权整个网段可访问NFS
         
           10.0.0.*
         
           指定网段的另外写法(不推荐使用)。
         
           授权某个域名客户端访问
         
           nfs.oldboyedu.con
         
           此方法生产环境中一般情况不常用
         
           授权整个域名客户端访问
         
           *.oldboyedu.com
         
           此方法生产环境中一般情况不常用
         
   提示:NFS默认配置文件/etc/exports其实是存在的,但是没有内容,需要自行配置。
  [url=]10.2 NFS[/url]配置权限参数  NFS配置权限设置常用参数说明   
           参数名称
         
           参数用途
         
           rw
         
           read-write,表示可读写权限
         
           ro
         
           read-only,表示只读权限
         
           sync
         
           请求或写入数据时,数据同步写入到NFS Server的硬盘后才返回。
            优点:数据安全不会丢。缺点:性能比不启动该参数差
         
           async
         
           写入时数据会先写到内存缓冲区,直到硬盘有空档才会写入磁盘,这样可以提升写如下效率!风险:若服务器宕机或不正常关机,会损失缓冲区中未写入磁盘的数据(解决办法:服务器主板电池或加UPS不间断电源)
         
           no_root_squash
         
           访问NFS Server共享目录的用户如果是root的话,它对该共享目录具有root权限。这个配置原本是为无盘客户端准备的。用户应避免使用
         
           all_squash
         
           不管访问NFS Server共享目录的身份如何,它的权限都将被压缩成匿名用户,同时它的UID和GID都会变成nfsnobody账号身份。在早期多个NFS客户端同时写入NFS Server数据时,这个参数很有用。
         
           root_squash
         
           如果访问NFS Server共享目录的用户如果是root,则它的权限将被压缩成匿名用户,同时它的UID和GID都会变成nfsnobody账号身份。
         
           anonuid
         
           参数以anon*开头即指anonymous匿名用户,这个用户的UID设置值通常为nfsnobody的UID值,当然也可以自行这个UID值。但是UID必须存在于/etc/passwd中。在多NFS Clients时,如多台web server共享一个NFS目录,通过这个参数可以使得不同的NFS Clients写入的数据对有所NFSClients保持同样的用户权限,即为配置的匿名UID对应用户权限,这个参数很有用,一般默认即可。
         
           anongid
         
           同anonuid,区别就是把uid(用户id)换成gid(组id)。
         
   在生产中配置NFS的重要技巧:
  1)确保所有客户端服务器对NFS共享目录具有相同的用户访问权限。
  a.all_squash把所有客户端都压缩成固定的匿名用户(UID相同)。
  b.就是anonuid,anongie指定的UID和GID的用户
  2)所有的客户端和服务端都需要一个相同的UID和GID的用户,即nfsnobody(UID必须相同)
  [url=]10.3 NFS[/url]常用路径  
         NFS常用路径
      
         说明
      
         /etc/exports
      
         NFS服务主配置文件,配置NFS具体共享服务的地点,默认内容诶空。以行为单位。
          [iyunv@nfs01 ~]# cat /etc/export
          #data shared by wangtian at 20160424
          /data 172.16.1.0/21(rw,sync)
      
         /usr/sbin/exportfs
      
         NFS服务的管理命令。例如:可以加载NFS配置生效,还可以直接配置NFS共享目录,即无需配置/etc/exports实现共享。[iyunv@nfs01 ~]#exportfs -rv加载配置生效,等价优雅重启(平滑重启)/etc/init.d/nfs reload
      
         /usr/sbin/showmount
      
         常用来在客户端,查看NFS配置及挂载结果的命令show mount information for an NFS server配置nfsserver,分别在服务端及客户端查看挂载情况。
      
         /var/lib/nfs/etab
      
         NFS配置文件的完整参数设定的文件(有很多没有配置但是默认就有的NFS参数)/var/lib/nfs/etab maset table of exports
      
         /var/lib/nfs/xtab
      
         适合C5.x记录曾经挂载过NFS客户端的信息,包括IP地址等,CentOS6.6没有此文件了。
      
         /proc/mounts
      
         客户端挂载参数[iyunv@nfs01 ~]#grep mnt/proc/mounts
      
         /var/lib/nfs/rmtab
      
         客户端访问服务器exports的信息列表
      
  [iyunv@web01 ~]# df -h
  Filesystem Size Used Avail Use% Mounted on
  /dev/sda3 6.9G 1.5G 5.1G 23% /
  tmpfs 242M 0 242M 0% /dev/shm
  /dev/sda1 190M 36M 145M 20% /boot
  172.16.1.31:/data 6.9G 1.5G 5.0G 23% /mnt
  当服务端挂掉的时候,客户端df -h 会失效,此时就要使用mount查看挂载信息
  [url=]第11章 本章重点回顾[/url]  q NFS服务的访问原理流程(会口述)*****
  q NFS作为集群共享存储角色的搭建、部署。
  q NFS作为集群共享角色的排障,高级优化(会口述)*****
  q mount命令的知识及参数,如-o(noatime,nodirtime,noexec,nosuid,nodec,rsize,wsize)等。
  q fstab文件的知识。
  q 常用命令showmount,exportfs,umount(-lf),rpcinfo,
  q NFS的优缺点,适合的应用场景*****
  q 替代产品(Moosefs(mfs)、GlusterFS、FastDFS)*****。
  q 了解autofs
                   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-214661-1-1.html 上篇帖子: CentOS下创建配置RAID1 下篇帖子: CentOS 6.3 安装 ActiveMQ
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表