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

[经验分享] NFS服务原理与应用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-22 08:45:27 | 显示全部楼层 |阅读模式
一、RPC服务:

  RPC称作Remote Procedure Call Protocol,远程过程调用协议。RPC可以实现客户端向远程主机请求服务(调用函数),而不需要了解底层协议(可以理解是一个框架)。RPC负责处理来自RPC客户端的请求,所以RPC需要有一个服务端程序监听在一个套接字上(TCP/111,UDP/111)。
二、NFS:
  NFS是RPC协议的一种具体的实现,NFS全称为Network File System,网络文件系统。NFS可以实现类Unix主机之间文件系统的共享。NFS的底层依赖于RPC,当客户端向NFS通信的时候,RPC接收用户的请求,并将其转交给NFS,所以NFS需要RPC服务代替NFS监听某个特定端口。启动NFS服务的时候,需要事先启动RPC服务。
  NFS只能在类Unix系统之间提供文件系统的共享服务,原因在于NFS功能是由内核模块提供的,所以只能在内核提供了NFS功能的系统上使用。而大多数类Unix系统都具有该功能。

三、配置NFS服务:

1.配置NFS需要先启动rpc服务,rpc服务程序由rpcbind这个包提供。安装rpcbind
1
2
3
4
5
[iyunv@localhost ~]# yum install -y rpcbind
[iyunv@localhost ~]# rpm -ql rpcbind
/etc/rc.d/init.d/rpcbind    #启动脚本
/sbin/rpcbind    #rpcbind程序
......



2.启动rpcbind服务:
1
2
3
4
5
6
[iyunv@localhost ~]# service rpcbind start
Starting rpcbind:                                          [  OK  ]
[iyunv@localhost ~]# ss -ntl
State      Recv-Q Send-Q                  Local Address:Port                    Peer Address:Port
LISTEN     0      128                                :::111                               :::*     
LISTEN     0      128                                 *:111                                *:*



3.安装NFS相关程序并启动,NFS程序由nfs-utils提供:
1
2
3
4
5
6
7
8
9
[iyunv@localhost ~]# yum install -y nfs-utils
[iyunv@localhost ~]# rpm -ql nfs-utils
/etc/nfsmount.conf   #挂载NFS配置
/etc/rc.d/init.d/nfs  #nfs服务脚本,负责处理请求
/etc/rc.d/init.d/nfslock  #nfs锁服务
/etc/rc.d/init.d/rpcgssd  #rpcgssd
/etc/rc.d/init.d/rpcidmapd  #rpc的ID映射服务
/etc/rc.d/init.d/rpcsvcgssd  #rpcsvcgssd
....



1
2
3
4
5
6
[iyunv@localhost ~]# service nfs start
Starting NFS services:                                     [  OK  ]
Starting NFS quotas:                                       [  OK  ]
Starting NFS mountd:                                       [  OK  ]
Starting NFS daemon:                                       [  OK  ]
Starting RPC idmapd:                                       [  OK  ]



NFS的四个主要服务:
1
2
3
4
  quotas:限额设置
  mountd:挂载程序,等待用户使用挂载申请,并验证客户来源
  daemon:NFS的主程序
  idmapd:负责NFS服务的id映射



4./etc/exports导出文件:
NFS共享文件系统使用/etc/exports文件导出,其格式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/Dire(FileSystem)    允许的范围(属性)

#####各分支格式####
范围格式:
   host:单一主机地址,例如localhost、192.168.1.1
   域匹配:例如*.magedu.com
   网络地址:192.168.10.0/24、192.168.10.0/255.255.255.255

导出属性:
   rw:读写权限
   ro:读权限
      async:异步写入
      sync:同步写入;默认项
      nohide:允许递归挂载,就是NFS的/shared目录中的a目录挂载了其他的NFS目录,当其他主机挂载/shared目录的时候,允许这个主机访问/shared/a目录
      root_squash:压缩root用户,如果用户使用的root用户将NFS挂载在本地的,则把root映射为来宾用户;此选项为默认选项
      no_root_squash:不压缩root用户。
      all_squash:将所有用户映射为来宾用户
      anonuid/anongid:设置来宾用户/组的ID,默认是nobody用户。由rpcidmapd映射。



5.配置/etc/exports文件:
1
2
[iyunv@localhost ~]# vim /etc/exports
/shared    10.10.10.0/24(rw,no_root_squash,async)



共享/shared这个目录,安全起见,建议将分区挂载到/shared上,我这里是实验环境,就不做此操作了。

6.导出命令:
1
2
3
4
5
导出配置使用exportfs命令:
  exportfs [arg]
    -a:处理/etc/exports文件中定义的所有项
    -r:重新导出,一般结合a参数
    -u:取消导出,一般结合a参数



1
[iyunv@localhost ~]# exportfs -ra   #重新导出所有/etc/exports文件中定义的项



7.查看命令:
1
2
3
4
5
查看使用showmount命令:
  showmount [options] [host]
      -e [host]:查看指定NFS服务器共享的文件系统
      -d:只显示客户端挂载的文件系统
      -a:以 HostName :Directory 格式显示所有客户端挂载信息



1
2
3
4
[iyunv@localhost ~]# showmount -e localhost  #查看本机共享的文件系统
Export list for localhost:
/shared 10.10.10.0/24    #共享/shared这个目录,仅允许10.10.10.0/24这个网段挂载使用
[iyunv@localhost ~]#



8.客户端测试挂载:
1
2
3
4
5
6
7
8
9
10
11
12
13
[iyunv@client ~]# mount -t nfs 10.10.10.11:/shared /mnt/nfs
[iyunv@client ~]# mount
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
/dev/mapper/VolGroup-lv_home on /home type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
10.10.10.11:/shared on /mnt/nfs type nfs (rw,vers=4,addr=10.10.10.11,clientaddr=10.10.10.11)



可以看到已经挂载了,可以使用showmount在服务器上查看一下:


在客户端的/mnt/nfs中写入一个b文件,并查看服务器端的/shared目录:
客户端写入:
1
2
3
4
[iyunv@client nfs]# cp /etc/fstab /mnt/nfs
[iyunv@client nfs]# ls
/etc/fstab
[iyunv@client nfs]



服务器端查看:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[iyunv@localhost ~]# ls /shared/
fstab
[iyunv@localhost ~]# cat /shared/fstab

#
# /etc/fstab
# Created by anaconda on Sat Dec  5 11:32:13 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
UUID=1a04e551-c2f2-4d1d-8d9a-948e2a2d4be6 /boot                   ext4    defaults        1 2
/dev/mapper/VolGroup-lv_home /home                   ext4    defaults        1 2
/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
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
[iyunv@localhost ~]#




9.NFS的启动配置
  NFS启动时端口不固定,带来一些麻烦,可以使用启动脚本的配置文件(/etc/sysconfig/nfs)。

10.RPC服务管理查看:
可以使用rpcinfo -p命令,显示所有基于rpc的服务:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[iyunv@localhost ~]# rpcinfo -p
   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
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100011    1   udp    875  rquotad
    100011    2   udp    875  rquotad
    100011    1   tcp    875  rquotad
    100011    2   tcp    875  rquotad
    100005    1   udp  50980  mountd
    100005    1   tcp  59447  mountd
    100005    2   udp  46689  mountd
    100005    2   tcp  34305  mountd
    100005    3   udp  56518  mountd
    100005    3   tcp  47681  mountd
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl
    100021    1   udp  41169  nlockmgr
    100021    3   udp  41169  nlockmgr
    100021    4   udp  41169  nlockmgr
    100021    1   tcp  34117  nlockmgr
    100021    3   tcp  34117  nlockmgr
    100021    4   tcp  34117  nlockmgr




11.修改/etc/sysconfig/nfs配置文件,将rquotad进程的端口改为876(默认为875):
1
2
3
4
5
6
7
[iyunv@client ~]# rpcinfo -p|grep rquotad
    100011    1   udp    875  rquotad
    100011    2   udp    875  rquotad
    100011    1   tcp    875  rquotad
    100011    2   tcp    875  rquotad
[iyunv@client ~]# vim /etc/sysconfig/nfs
  RQUOTAD_PORT=876



重启服务已经变为876端口了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[iyunv@localhost ~]# service nfs restart
Shutting down NFS daemon:                                  [  OK  ]
Shutting down NFS mountd:                                  [  OK  ]
Shutting down NFS quotas:                                  [  OK  ]
Shutting down NFS services:                                [  OK  ]
Shutting down RPC idmapd:                                  [  OK  ]
Starting NFS services:                                     [  OK  ]
Starting NFS quotas:                                       [  OK  ]
Starting NFS mountd:                                       [  OK  ]
Starting NFS daemon:                                       [  OK  ]
Starting RPC idmapd:                                       [  OK  ]
[iyunv@localhost ~]# rpcinfo -p|grep rquotad
    100011    1   udp    876  rquotad
    100011    2   udp    876  rquotad
    100011    1   tcp    876  rquotad
    100011    2   tcp    876  rquotad
[iyunv@localhost ~]#



运维网声明 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-154553-1-1.html 上篇帖子: CentOS 5.11开启VNC访问 下篇帖子: centos7 firewall 开放 ssh端口 22端口 80 端口
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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