NFS网络文件系统

NFS Network File System

用途:作为服务端向其他服务器提供共享目录.
客户端可以通过网络,将共享目录挂载到本地文件系统上.
挂载方法 mount -t nfs 192.168.1.110:/data/share /mnt
挂载后查看本地基本挂载信息 df -h
这种网络文件系统常用于中小企业(3000WPV),而大型企业可能会用到Moosefs(mfs),glusterfs,FastDFS.
而这些文件系统的主要功能为:存储静态资源文件,如图片,附件,头像
NFS服务有很多子服务,有固定端口的2049 nfs,也有很多非固定端口的服务,这些注册信息被rpcbind服务管理.所以,在运行NFS服务之前,应先开启rpcbind服务供其注册,rpcbind主服务端口为111!

为什么企业集群架构需要共享存储?

NFS网络文件系统_第1张图片
常见组合

在Web服务器集群中,如果没有共享存储,某一台Web服务器上并没有存储其他Web服务器上的静态资源时,
会出现资源访问不到的情况,例如,用户上传到Web1一张图片,而下次请求Web2访问图片时,Web2上并没
有刚刚上传的资源,所以访问不到资源.
解决方案:
1.Web服务器之间时时同步(浪费带宽,空间,资源)
2.共享存储(最优选择)

NFS/rpcbind原理图

NFS网络文件系统_第2张图片
NFS/rpcbind原理图

安装

规划:
角色 名称 IP
服务端 NFS_Server * . * . * .1
客户端 LAMP_Server * . * . * .2
客户端 LNMP_Server * . * . * .3
批量查看环境:

cat /etc/redhat-release //系统版本
uname -r //内核版本
uname -m //操作系统位数

软件列表:

nfs-utils:NFS主程序
rpcbind:RPC主程序

安装方法:

yum install -y nfs-utils rpcbind
主客户端均要安装,按理来说客户端无需装nfs-utils,但是客户端会用到showmount命令.

启动:

/etc/init.d/rpcbind start//启动rpcbind
/etc/init.d/rpcbind status//查看rpcbind状态
lsof -i :111//查看端口
netstat -lntup|grep rpcbind//查看端口
rpcinfo -p localhost//查看rpc注册端口信息
/etc/init.d/nfs start//启动nfs并向rpc注册
/etc/init.d/rpcbind status//查看rpcbind状态
netstat -lnupt | grep 2049//查看nfs端口信息
/etc/init.d/rpcbind start/etc/init.d/nfs start写入/etc/rc.loacl做一个自启动

NFS服务进程说明

ps -ef | egrep "rpc|nfs"

rpc       6668     1  0 19:58 ?        00:00:00 rpcbind
root      6742     2  0 20:00 ?        00:00:00 [rpciod/0]
root      6751     1  0 20:00 ?        00:00:00 rpc.rquotad //磁盘配额进程
root      6756     1  0 20:00 ?        00:00:00 rpc.mountd  //权限管理验证
root      6763     2  0 20:00 ?        00:00:00 [nfsd4]
root      6764     2  0 20:00 ?        00:00:00 [nfsd4_callbacks]
root      6765     2  0 20:00 ?        00:00:00 [nfsd]
root      6766     2  0 20:00 ?        00:00:00 [nfsd]
root      6767     2  0 20:00 ?        00:00:00 [nfsd]
root      6768     2  0 20:00 ?        00:00:00 [nfsd]
root      6769     2  0 20:00 ?        00:00:00 [nfsd]  //nfs主进程,id身份判定
root      6770     2  0 20:00 ?        00:00:00 [nfsd]
root      6771     2  0 20:00 ?        00:00:00 [nfsd]
root      6772     2  0 20:00 ?        00:00:00 [nfsd]
root      6803     1  0 20:00 ?        00:00:00 rpc.idmapd
NFS配置文件

/etc/exports
格式:
共享目录 + 主机名/地址/通配符 + (参数)

# sample /etc/exports file
   /               master(rw) trusty(rw,no_root_squash)
   /projects       proj*.local.domain(rw)
   /usr            *.local.domain(ro) @trusted(rw)
   /home/joe       pc001(rw,all_squash,anonuid=150,anongid=100)
   /pub            *(ro,insecure,all_squash)
   /srv/www        -sync,rw server @trusted @external(ro)
   /foo            2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)
   /build          buildhost[0-9].local.domain(rw)
共享参数
rw                              可读写
ro                              只读
sync                            同步写入磁盘(性能不好,但不丢数据)
async                           异步写入(性能好,断电会丢数据)
no_root_squash                  客户端为root,不会压缩root为nfsnobody,权限太大,慎用
root_squash                     客户端为root时会压缩root为nfsnobody
all_squash                      客户端为任何用户都会压缩为nfsnodoy用户
anonuid=UID                     压缩为UID的用户
anongid=GID                     压缩为GID的用户

exportfs -rv
/etc/init.d/nfs reload //两个平缓加载重启NFS的命令

showmount -e IPADDRESS //查看某主机的共享目录
mount -t nfs localhost:/data //挂载共享目录

mount
cat /proc/mounts //查看挂载信息

cat /var/lib/nfs/etab //显示nfs共享参数
df -h //查看挂载资源

默认情况下,客户端访问NFS文件系统时,用户被压缩成默认uid65534 nfsnobody的用户.
所以,需要将共享目录的属主数组改为nfsnobody.

常见故障排查

1.确认服务是否启动
2.本地showmount一下,有可能防火墙挡住了
3.ping链路
4.服务启动顺序 rpcbind-->nfs
5.共享目录是否创建
6.如果文件无法创建,查看下nfs共享权限以及服务端本地权限.
7.注意.服务端挂掉,客户端挂载会hang住.

客户端挂载参数
fg/bg(默认fg)                 挂载时选择前台/后台(挂载请求会一直持续,后台不会影响前台操作)
soft/hard(默认hard)           soft挂载不上不再尝试挂载,hard会持续尝试挂载
intr                            hard方式在配合intr时,超时可以将挂载程序中断
rsize/wsize                     读写块大小,用于提升性能!
proto=tcp/udp                   协议,可靠/不可靠  
async                           异步操作写入磁盘
sync                            同步写入磁盘
ro                              只读方式挂载
rw                              读写方式挂载
auto                            能否通过mount -a 自动挂载
default(rw,suid,dev,exec,auto,nouser,async)    默认挂载参数
exec/noexec                     文件系统中的二进制程序能否执行(安全优化)
noatime                         不更新inode,高并发最好选用这个参数
nodiratime                      不更新dirinode,高并发使用
suid/nosuid                     支持/不支持suid
remount                         用于修复文件系统因fstab修改错误无法启动故障,具体案例见下文
                                救援模式下,mount -o rw,remount / ,然后修改fstab
建议:默认或以下挂载方式
mount -t nfs -o bg,hard,intr,rsize=131072,wsize=131072 IP_ADDR:/data
一个挂载案例
1. 重启系统看是否可以自动修复。

2. 使用fsck -y /dev/sda1 进行自动修复。(用”-y”选项来执行该命令对硬盘进行检查和修复)
   添加参数:fsck -y -C -t ext3 /dev/sda1 (一般情况下修复完成后,所有文件移动到 lost+found目录,文件名会被改变)  
     (-C 显示进度条 -t 指定文件系统类型 -y 默认自动yes修复)

3. 如果fsck修复完成后,启动系统依然自读。
    查看分区结构:
    [root@localhost ~]# more /etc/fstab

    [root@localhost ~]# more /proc/mounts

    [root@localhost ~]# mount
    /dev/sda2 on / type ext3 (rw)
    proc on /proc type proc (rw)
    sysfs on /sys type sysfs (rw)
    查看ro挂载的分区,如果发现有ro,就重新mount
    umount /dev/sda1
    mount /dev/sda1 /boot
    如果发现有提示“device is busy”,找到是什么进程使得他busy
    fuser -m /boot 将会显示使用这个模块的pid
    fuser -mk /boot 将会直接kill那个pid
    然后重新mount即可。

4. 直接remount
  [root@localhost ~]# mount -o rw,remount /dev/sda1 
NFS优化

安全挂载:mount -t nfs -o nosuid,noexec,nodev,rw IP_ADDR:/data /mnt
性能挂载:mount -t nfs -o noatime,nodiratime IP_ADDR:/data /mnt
安全+性能:mount -t nfs -o nosuid,nodev,noexec,rw,noatime,nodiratime IP_ADDR:/data /mnt

针对NFS对内核进行优化

//调大套接字接受/发送缓冲区大小,来自官方

cat >>/etc/sysctl.conf<
NFS硬件选择

SAS/SSD磁盘多块,做raid0/10,网卡至少千兆,多块bond.

强制卸载卸载不掉的文件系统

umount -lf

你可能感兴趣的:(NFS网络文件系统)