你全力做到最好,可能还不如别人随便搞搞!

发掘积累过程的快感

首页 » BIBLE模型 » Linux » linux NFS服务使用

linux NFS服务使用


一:概念:

NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。在 NFS 的应用中,本地 NFS 的客户端应用可以透明地读写位于远端 NFS 服务器上的文件,就像访问本地文件一样。

最早由 sun 公司开发,是类 unix 系统间实现磁盘共享的一种方法。

缺点:

1:nfs 属于本地文件系统,在高并发场景和大存储量下,需要使用分布式存储 mfs, FastDFS, tfs(taobao)等。

2:客户端的数据都是通过明文传送。客户端没有用户认证机制,安全性能一般,所以建议一般在局域网内使用。

3:容易发生单点故障,即 server 服务器宕机所有的客户端都不能访问。

使用场景:web 集群中 NFS 服务器主要用于存储用户上传的信息,方便集群中机器获取用户数据。如图片 附件 头像 视频 音频。

二:工作原理

NFS 服务依赖于 RPC(Remote Procedure Call)服务。nfsd 默认端口 2049,实际使用过程中因为需要提供不同的服务,因此 NFS 启动时还会随机调用系统的空闲端口。在 centos5.x 中默认调用 1024 以下端口,centos6.x 后默认调用的端口号一般较大,30000 以上。因为 NFS 随机端口的原因所以需要 RPC 服务来和 client 端确认传输端口等。

因为 NFS 服务启动时需要向 RPC 注册端口信息,所以 RPC 要在 NFS 服务启动之前启动。

在 NFS server 上创建用于共享的目录 /data,client 用 mount/data 挂载到自己本地一个目录上,挂载目录可以和 /data 名称不同。将挂载信息写入本机开机启动文件里 如 /etc/rc.local

客户端无需启动 NFS 服务,但需要启动 RPC 服务。

实现

主机 角色 ip
cnetos6.5 NFS server 192.168.1.240
centos6.5 NFS client 192.168.86.131

三、安装软件

NFS server 需要至少安装两个软件 nfs-utils 和 rpcbind。客户端只要安装 rpcbind。

rpm -qa nfs-utils rpcbind

安装完 nfs 服务一般会自动生成配置文件 exports,如果没有就自己创建一个 /etc/exports

yum install -y nfs-utils  rpcbind
cat /etc/exports

创建共享目录,将文件所有者指定为 nfsnobodynfsnobody 用户在安装 nfs 时会自动创建。

如果不指定共享用户,则 nfs 系统在分配权限时会以用户 uid 为主,客户端如果用 root 账户会在服务器被自动降级至 nfsnobody

mkdir  -p /data/nfs
chown -R nfsnobody:nfsnobody /data/nfs

四、server 配置文件

格式:共享目录 指定共享对象(共享参数)

例: /data 192.168.1.0/24(rw,sync)

/data 共享给 192.168.1.x ,客户端权限 rw

其中共享对象可以用通配符,比如 * 代表所有地址。

配置参数:

rw: 读写

ro :只读

sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;

async:是大数据时使用,是先写到缓存区,必要时再写到磁盘里。

all_squash:所有访问用户都映射为匿名用户或用户组;
no_all_squash(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组;

root_squash(默认):将来访的 root 用户映射为匿名用户或用户组;

no_root_squash:来访的 root 用户保持 root 帐号权限;

wdelay(默认):检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率;no_wdelay:若有写操作则立即执行,应与 sync 配合使用;

subtree_check :若输出目录是一个子目录,则 nfs 服务器将检查其父目录的权限;

no_subtree_check(默认):即使输出目录是一个子目录,nfs 服务器也不检查其父目录的权限,这样可以提高效率;

配置 server 参数

#nfs dir /data/nfs
/data/nfs  192.168.1.0/24(rw)
/data/nfs  192.168.86.131(rw)
#也可以写成一行
/data/nfs  192.168.1.0/24(rw)  192.168.86.131(rw,sync)

启动服务:注意先启动 rpcbind 再启动 nfs

[root@localhost data]# service rpcbind start
Starting rpcbind: [ OK ]
[root@localhost data]# service nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]

查询 nfs 挂载,showmount -e 192.168.1.240 后面可以接 ip 来查看。

[root@localhost data]# showmount -e
Export list for localhost:
/data/nfs 192.168.1.0/24,192.168.86.131

NFS 服务开启后,查看共享目录参数

[root@localhost data]# cat /var/lib/nfs/etab
/data/nfs   192.168.86.131(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,no_all_squash)
/data/nfs   192.168.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,no_all_squash)

让 nfs 服务开机启动

[root@localhost ~]# chkconfig rpcbind on
[root@localhost ~]# chkconfig nfs on
 
[root@localhost ~]# chkconfig --list rpcbind
rpcbind 0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@localhost ~]# chkconfig --list nfs
nfs 0:off   1:off   2:on    3:on    4:on    5:on    6:off

五、客户端配置

安装 rpcbindnfs,启动 rpcbindnfs 可以不启动。

客户端挂载 nfs 共享目录

mount -t nfs 192.168.1.240:/data/nfs /nfs    #挂载 nfs server 的/data/nfs 到/nfs

[root@centos68 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.5G  2.0G  7.1G  22% /
tmpfs                 491M     0  491M   0% /dev/shm
/dev/sda1             190M   33M  147M  19% /boot
/dev/sdb1             4.8G   11M  4.6G   1% /data
192.168.1.240:/data/nfs
                      2.9G  2.7G  126M  96% /nfs  # nfs 挂载信息

注:一般不将 nfs 挂载信息写入 fstab,因为 nfs 依赖于 rpc 服务,rpc 服务启动晚于 fstab 时会出错。可以将挂载信息写入 /etc/rc.local

vim  /etc/rc.local
#mount nfs_data
mount -t nfs 192.168.1.240:/data/www/image/  /data/www/image/
mount -t nfs 192.168.1.240:/data/www/user/  /data/www/user/

关于默认账户

nfs 客户端写数据除了 nfs 配置文件要有 rw 权限,对于目录也要有对应操作权限。

如果/data/nfs 目录没有给写入权限,即使 exports 里设置了 rw 也是没有权限写入的。客户端默认操作账户为 nfsnobody。

[root@localhost ~]# cat /var/lib/nfs/etab
/data/nfs   192.168.86.131(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,no_all_squash)
/data/nfs   192.168.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,no_all_squash)

查看 /var/lib/nfs/etab 其中 anonuid=65534,anongid=65534 为默认账户 uid,即 nfsnobody 的默认 uid

查看已挂载设备挂载参数 cat /proc/mounts

[root@localhost ~]# cat /proc/mounts |grep 192
192.168.1.240:/data/nfs /mnt nfs4 rw,noexec,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.240,minorversion=0,local_lock=none,addr=192.168.1.240 0 0

客户端挂载优化参数

字段 说明
noatime 不更新文件的 inode 访问时间戳,文件很多时此参数可以提高效率。
nodiratime 不更新目录的访问时间戳,同上。
nosuid 关闭挂载目录的 suid
noexec 不允许执行二进制文件。shell 脚本无法直接使用,但是用 sh xxx.sh 依然可以调用。
rsize 系统每次读取的最大字节,centos6.5 默认 131072,此参数过小会影响系统的 I/O 效率.
wsize 系统每次写入的最大字节,同上

defaults 使用默认的选项。默认选项为 rwsuiddevexecanto nouserasync

例: mount -o nosuid noexec noatime -t nfs 192.168.1.240:/data/nfs /mnt

卸载挂载点,如果提示 /mnt: device is busy ,可以用 lf 参数强制卸载

umount -lf /mnt

互联网信息太多太杂,各互联网公司不断推送娱乐花边新闻,SNS,微博不断转移我们的注意力。但是,我们的时间和精力却是有限的。这里是互联网浩瀚的海洋中的一座宁静与美丽的小岛,供开发者歇息与静心潜心修炼。 “Bible”是圣经,有权威的书,我们的本意就是为开发者提供真正有用的的资料。 我的电子邮件 1217179982@qq.com,您在开发过程中遇到任何问题,欢迎与我联系。
Copyright © 2024. All rights reserved. 本站由 Helay 纯手工打造. 蜀ICP备15017444号