linux nfs文件共享

◆一、概念

NFS是网络文件系统(Network File System)的简称,是分布式计算机系统的一个组成部分,可实现在异构网络上共享和装配远程文件系统。

NFS由SUN公司开发,目前已成为文件服务的一种标准(RFC1904,RFC1813)。其最大的功能就是可以通过网络,让不同操作系统的计算机可以共享数据,所以也可以看作是一个文件服务器。NFS是除了SAMBA之外Windows与Linux及Unix与Linux之间通信的方法。

 

nfs 共享hadoop文件 linux nfs共享_大数据

理想条件下的NFS 网络拓扑结构

 

1、设置Linux系统之间的文件共享(Linux与Windows中间文件共享采用SAMBA服务);

2、NFS只是一种文件系统,本身没有传输功能,是基于RPC协议实现的,才能达到两个Linux系统之间的文件目录共享;

3、NFS为C/S架构;



◆二、服务器配置

1、配置文件

主要配置文件为:/etc/exports

格式为: 共享目录 可mount主机IP(参数1,参数2,……)

如:/var/nfs 172.20.*.*(rw,sync,no_rootl_squash)

ro: 只读

rw: 可读写

sync: 同步写入

async: 不同步写入
root_squash: 将root用户映射为来宾账号

no_root_squash:  将root用户映射为非来宾账号

all_squash:  所有帐号为来宾帐号

anonuid,anongid: 指定映射的来宾帐号的UID和GID;

说明:必须注意nfs/目录的访问权限,必须设置成777权限;父目录/var权限无要求,普通的755即可;


2、启动相关服务

然后依次启动相关服务:portmap,nfslock,nfs

service portmap start

service nfslock start

service nfs start

关闭顺序相反。 

3、检查共享目录

随后可以采用showmount –e查看一下,看看共享的目录情况:

[root@ns var]# showmount -e

Export list for ns.osserver:

/var/nfs 172.20.*.*

OK,到此为止,NFS服务器搭建完毕;



◆三、客户端配置

1、确保portmap运行

客户端必须确保RPC协议相应的portmap正常运行,否则mount将失败;

2、挂载/var/nfs目录(本地挂载点为/mnt/nfs)

mount -t nfs 172.20.65.16:/var/nfs /mnt/nfs

成功mount以后,即可同本地目录一样随意操作;



◆四、其它相关命令

1、当修改了/etc/exports文件后,可以不用重新启动nfs服务,直接采用exports –rv 即可重新导出共享目录;

该命令格式如下:

exportfs [-aruv]

-a :全部mount或者unmount /etc/exports中的内容

-r :重新mount /etc/exports中分享出来的目录

-u :umount 目录

-v :在 export 的时候,将详细的信息输出到屏幕上。

具体例子:

[root@ns var]# showmount -e
Export list for ns.osserver:
/var/nfs 172.20.*.*
[root@ns var]# exportfs –au #全部卸载
[root@ns var]# showmount -e
Export list for ns.osserver:
[root@ns var]# exportfs –rv #全部重新 export 一次
exporting 172.20.*.*:/var/nfs
[root@ns var]#

2、showmout命令对于NFS的操作和查错有很大的帮助,所以我们先来看一下showmount的用法

showmout

-a :这个参数是一般在NFS SERVER上使用,是用来显示已经mount上本机nfs目录的cline机器。

-e :显示指定的NFS SERVER上export出来的目录。

例如:

[root@localhost ~]# showmount -e 172.20.16.139
Export list for 172.20.16.139 :
/root/share 172.20.16.137[root@ns var]# showmount -a
All mount points on localhost.localdomain:
*:/root/share
172.20.16.139:,172.20.16.139
172.20.16.139:DEFAULT


◆五、常见问题解答

1、提示:mount to NFS server '172.20.67.203' failed: server is down.

解决方案:可能是NFS服务器的防火墙有问题;

2、提示:mount: RPC: Timed out

解决方案:由于RPC协议没运行;启动portmap服务;

也有可能是防火墙问题;Server/Client均有可能。

[root@test conn]# service nfslock status  #服务器端查看
rpc.statd (pid  3041) is running...
[root@test conn]# service portmap status
portmap (pid 2983) is running...
[root@test conn]# service nfs status
rpc.mountd (pid 22877) is running...
nfsd (pid 22874 22873 22872 22871 22870 22869 22868 22867) is running...
rpc.rquotad (pid 22862) is running...
[root@test conn]# showmount -e
Export list for test:
[root@test conn]# vi /etc/exports 
/var/nfs 10.109.131.*(rw,async)
[root@test conn]# exportfs -arv
exporting 10.109.131.*:/var/nfs
[root@test conn]# showmount -e
Export list for test:
/var/nfs 10.109.131.*[root@test ~]# mkdir /var/nfs
[root@test nfs]# cd /var/nfs
[root@test nfs]#
[root@jacktest ~]# mount -t nfs 10.109.131.209:/var/nfs/ /mnt/nfs/     #客户端查看 
[root@jacktest ~]# ll /mnt/nfs/a.123  
-rw-r--r-- 1 root root 0 Jan 15 16:28 /mnt/nfs/a.123[root@jacktest ~]# mount
...
10.109.131.209:/var/nfs/ on /mnt/nfs type nfs (rw,addr=10.109.131.209)[root@jacktest ~]# showmount -e 10.109.131.209
Export list for 10.109.131.209:
/var/nfs 10.109.131.*


特例:NSF权限是通过ID号来确认权限,因此root默认为

[root@test conn]# id hbase     #服务器端查看,hbase的ID号为502 
uid=502(hbase) gid=502(hbase) groups=502(hbase)
[root@test conn]# setfacl -m u:hbase:rwx /var/nfs/
[root@test conn]# ll /var/nfs/
total 0
-rw-r--r--  1 root root 0 Jan 15 16:28 a.123
[root@test conn]# su - hadoop
[hadoop@test ~]$ cd /var/nfs/
[hadoop@test nfs]$ touch 11.hadoop
[hadoop@test nfs]$ ll
total 0
-rw-rw-r-- 1 hadoop hadoop 0 Jan 15 16:52 11.hadoop
-rw-r--r-- 1 root   root   0 Jan 15 16:28 a.123
[hadoop@test nfs]$ su - hbase[root@test conn]# setfacl -m u:hbase:rwx /var/nfs/
[root@test conn]# ll /var/nfs/
total 0
-rw-rw-r--  1 hadoop hadoop 0 Jan 15 16:52 11.hadoop
-rw-rw-r--  1 hbase  hbase  0 Jan 15 16:57 321.hbase
-rw-r--r--  1 root   root   0 Jan 15 16:28 a.123
[root@jacktest ~]# groupadd -g 502 openstack      #客户端查看,openstack的ID号为502 
[root@jacktest ~]# useradd -g 502 -u 502 openstack
[root@jacktest ~]# id openstack
uid=502(openstack) gid=502(openstack) groups=502(openstack)
[root@jacktest ~]# ll /mnt/nfs/
total 0
-rw-rw-r--  1 hadoop    hadoop    0 Jan 15 16:52 11.hadoop
-rw-rw-r--  1 openstack openstack 0 Jan 15 16:57 321.hbase
-rw-r--r--  1 root      root      0 Jan 15 16:28 a.123
[root@jacktest ~]# su - openstack
[openstack@jacktest ~]$ cd /mnt/nfs/
[openstack@jacktest nfs]$ ll /mnt/nfs/ 
total 0
-rw-rw-r-- 1 hadoop    hadoop    0 Jan 15 16:52 11.hadoop
-rw-rw-r-- 1 openstack openstack 0 Jan 15 16:57 321.hbase
-rw-r--r-- 1 root      root      0 Jan 15 16:28 a.123
[openstack@jacktest nfs]$ touch b.openstack
[openstack@jacktest nfs]$ ll
total 0
-rw-rw-r-- 1 hadoop    hadoop    0 Jan 15 16:52 11.hadoop
-rw-rw-r-- 1 openstack openstack 0 Jan 15 16:57 321.hbase
-rw-r--r-- 1 root      root      0 Jan 15 16:28 a.123
-rw-rw-r-- 1 openstack openstack 0 Jan 15 17:04 b.openstack
[root@test conn]# ll /var/nfs/     #服务器端查看 
total 0
-rw-rw-r--  1 hadoop hadoop 0 Jan 15 16:52 11.hadoop
-rw-rw-r--  1 hbase  hbase  0 Jan 15 16:57 321.hbase
-rw-r--r--  1 root   root   0 Jan 15 16:28 a.123
-rw-rw-r--  1 hbase  hbase  0 Jan 15 17:04 b.openstack


统一用一个权限访问:

[root@test nfs]# useradd -u 511 nfstest      #服务器端查看 
[root@test nfs]# touch nfstest
[root@test nfs]# ls
11.hadoop  321.hbase  b.openstack  nfstest
[root@test nfs]# ll
total 0
-rw-rw-r-- 1 hadoop hadoop 0 Jan 15 16:52 11.hadoop
-rw-rw-r-- 1 hbase  hbase  0 Jan 15 16:57 321.hbase
-rw-rw-r-- 1 hbase  hbase  0 Jan 15 17:04 b.openstack
-rw-r--r-- 1 root   root   0 Jan 15 17:16 nfstest
[root@test nfs]# chown nfstest.nfstest /var/nfs/nfstest 
[root@test nfs]# ll
total 0
-rw-rw-r-- 1 hadoop  hadoop  0 Jan 15 16:52 11.hadoop
-rw-rw-r-- 1 hbase   hbase   0 Jan 15 16:57 321.hbase
-rw-rw-r-- 1 hbase   hbase   0 Jan 15 17:04 b.openstack
-rw-r--r-- 1 nfstest nfstest 0 Jan 15 17:16 nfstest
[root@test nfs]# vi /etc/exports 
[root@test nfs]# cat /etc/exports
/var/nfs 10.109.131.*(rw,async,all_squash,anonuid=511,anongid=511)
[root@test nfs]# exportfs -ra
[root@test nfs]# exportfs -rav
exporting 10.109.131.*:/var/nfs
[root@test nfs]# showmount -e 10.109.131.209
Export list for 10.109.131.209:
/var/nfs 10.109.131.*
[root@test nfs]# 
[root@jacktest nfs]# ll      #客户端查看 
total 0
-rw-rw-r-- 1 hadoop    hadoop    0 Jan 15 16:52 11.hadoop
-rw-rw-r-- 1 openstack openstack 0 Jan 15 16:57 321.hbase
-rw-rw-r-- 1 openstack openstack 0 Jan 15 17:04 b.openstack
-rw-r--r-- 1       511       511 0 Jan 15 17:16 nfstest[root@jacktest nfs]# vim /etc/fstab
...
192.168.1.5:/var/nfs  /mnt/nfs   nfs  default,-rnetdev  0 0

[root@test var]# vi /etc/sysconfig/nfs   #固定监控端口
# Optional arguments passed to rpc.mountd. See rpc.mountd(8)
# Port rquotad should listen on.
RQUOTAD_PORT=875
# Optinal options passed to rquotad
#RPCRQUOTADOPTS=""
 
# Optional arguments passed to rpc.mountd. See rpc.mountd(8)
#RPCMOUNTDOPTS=""
# Port rpc.mountd should listen on.
MOUNTD_PORT=892
[root@test var]# rpcinfo -p localhost
   program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp    676  status
    100024    1   tcp    679  status
    100011    1   udp    991  rquotad
    100011    2   udp    991  rquotad
    100011    1   tcp    994  rquotad
    100011    2   tcp    994  rquotad
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100021    1   udp  39240  nlockmgr
    100021    3   udp  39240  nlockmgr
    100021    4   udp  39240  nlockmgr
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100021    1   tcp  37209  nlockmgr
    100021    3   tcp  37209  nlockmgr
    100021    4   tcp  37209  nlockmgr
    100005    1   udp   1005  mountd
    100005    1   tcp   1008  mountd
    100005    2   udp   1005  mountd
    100005    2   tcp   1008  mountd
    100005    3   udp   1005  mountd
    100005    3   tcp   1008  mountd


◆六、示例

1. 服務器端配製:

[root@MyLinux ~]# useradd -u 510 nfstest
[root@MyLinux ~]# mkdir /shared
[root@MyLinux ~]# touch /shared/nfstest
[root@MyLinux ~]# ll /shared/nfstest
-rw-r--r-- 1 root root 0 Apr  6 16:22 /shared/nfstest
[root@MyLinux ~]# tail /etc/passwd
.
nfstest:x:510:510::/home/nfstest:/bin/bash
[root@MyLinux ~]# chown nfstest.nfstest /shared/nfstest 
[root@MyLinux ~]# ll /shared/nfstest
-rw-r--r-- 1 nfstest nfstest 0 Apr  6 16:22 /shared/nfstest
[root@MyLinux ~]# vi /etc/exports
/shared  10.109.0.0/16(rw,all_squash,anonuid=510,anongid=510)
[root@MyLinux ~]# exportfs -ra
[root@MyLinux ~]# showmount -e 10.109.132.126
Export list for 10.109.132.126:
/shared 10.109.0.0/16


2. 客戶端手动挂载:

[root@MyLinux ~]# mkdir /mnt/nfs
[root@MyLinux ~]# mount -t nfs 10.109.132.126:/shared /mnt/nfs


3. 客戶端自动挂载:

[root@MyLinux ~]# vim /etc/fstab
/dev/VolGroup00/LogVol00 /    ext3    defaults    1 1
LABEL=/boot    /boot   ext3    defaults   1 2
tmpfs   /dev/shm    tmpfs   defaults    0 0
devpts   /dev/pts     devpts  gid=5,mode=620  0 0
sysfs    /sys      sysfs   defaults    0 0
proc     /proc    proc    defaults   0 0
/dev/VolGroup00/LogVol01 swap  swap   defaults     0 0
10.109.132.126:/shared  /mnt/nfs  nfs    defaults,_rnetdev 0 0  #若挂载不成功则跳过不挂载

---END---



转载于:https://blog.51cto.com/wangfx/1896858