NFS服务器端的搭建步聚
服务器系统 |
角色 |
IP |
CentOS-64- MrXiong -server |
NFS服务器端 |
192.168.221.130 |
CentOS-64--client |
NFS客户端 |
192.168.221.131 |
服务端配置
- 检查服务器系统信息
操本系统版本信息:
[[email protected] ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [[email protected] ~]# uname -n MrXiong.com #主机名 [[email protected] ~]# uname -r 2.6.32-504.el6.x86_64 #当前服务器内核版本 [[email protected] ~]# uname -a Linux MrXiong.com 2.6.32-504.el6.x86_64 #1SMP Wed Oct 15 04:27:16 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux [[email protected] ~]# uname -m x86_64
除了检查系统版本和内核,还分别查看客户端和服务端的相关信息,如ip,主机名等等
- 检查NFS软件
要部署NFS服务,必须安装下面两个软件包
●nfs-utils:这个NFS服务主程序
包括rpc.nfsd、rpc.mountd两个daemons和相关文档说明及执行命令文件等
●pormap:Centos5.X下面RPC的主程序(Centos6.4下为rpcbind)
NFS可以被视为一个RPC程序,在启动任何一个RPC程序之前,需要做好端口映射工作,这个映射工作就是由portmap(或rpcbind)服务来完成的。因此,提供NFS服务之前必须先启动portmap(Centos6.4下为rpcbind)服务。
★查看默认情况下Centos5.8 NFS软件的安装情况
[[email protected] ~]# rpm -aq|grep -E"nfs-utils|portmap" nfs-utils-1.0.9-60.el5 portmap-4.0-65.2.2.1 nfs-utils-lib-1.0.8-7.9.el5
RedHatLinux等一般默认也会安装,如果没有安装相关NFS软件,对于Centos系统可以使用yum install nfs-utils portmp –y来安装,也可以通过系统光盘里的rpm包安装。
★查看默认情况下Centos6.4 NFS软件的安装情况
[[email protected] ~]# rpm -aq|grep -E"nfs-utils|rpcbind" nfs-utils-1.2.3-36.el6.x86_64 nfs-utils-lib-1.1.5-6.el6.x86_64 rpcbind-0.2.0-11.el6.x86_64
RedHatLinux等一般默认也会安装,如果没有安装相关NFS软件,对于Centos系统可以使用yum install nfs-utils rpcbind –y来安装,也可以通过系统光盘里的rpm包安装。
- 查看服务器的centos中5.8 portmap、6.4 rpcbind服务有没有启动和检查nfs、启动nfs
★检查状态和启动服务
portmap(5.8)、rpcbind(6.4)服务一定要先于nfs启动
(先检查prtmap(5.8)、rpcbind(6.4)和启动prtmap(5.8)、rpcbind(6.4))
再检查nfs和启动nfs
★查看服务器的centos6.6 中rpcbind服务有没有启动(Centos5.8下为portmap)
[[email protected] ~]# /etc/init.d/rpcbindstatus rpcbind is stopped [[email protected] ~]# /etc/init.d/rpcbind start Starting rpcbind: [ OK ] [[email protected] ~]# /etc/init.d/rpcbindstatus rpcbind (pid 1921) is running...
★查看其的信息
[[email protected] ~]# rpcinfo -p localhost 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
其中111是rpc对外请求服务的端口
★检查nfs状态并启动nfs服务
[[email protected] ~]# /etc/init.d/nfs status rpc.svcgssd is stopped rpc.mountd is stopped nfsd is stopped rpc.rquotad is stopped [[email protected] ~]# /etc/init.d/nfs start Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS mountd: [ OK ] Starting NFS daemon: [ OK ] Starting RPC idmapd: [ OK ] [[email protected] ~]# /etc/init.d/nfs status rpc.svcgssd is stopped rpc.mountd (pid 2010) is running... nfsd (pid 2026 2025 2024 2023 2022 20212020 2019) is running... rpc.rquotad (pid 2005) is running...
rpcinfo实用工具显示信息
[[email protected]~]# rpcinfo -p localhost 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 55925 mountd 100005 1 tcp 35668 mountd 100005 2 udp 46662 mountd 100005 2 tcp 38555 mountd 100005 3 udp 48746 mountd 100005 3 tcp 44436 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 52482 nlockmgr 100021 3 udp 52482 nlockmgr 100021 4 udp 52482 nlockmgr 100021 1 tcp 51395 nlockmgr 100021 3 tcp 51395 nlockmgr 100021 4 tcp 51395 nlockmgr
★查看rpc和nfs进程
[[email protected] ~]# ps -ef|egrep "rpc|nfs" rpc 1921 1 0 18:13 ? 00:00:00 rpcbind root 1996 2 0 18:14 ? 00:00:00[rpciod/0] root 2005 1 0 18:14 ? 00:00:00 rpc.rquotad root 2010 1 0 18:14 ? 00:00:00rpc.mountd root 2017 2 0 18:14 ? 00:00:00 [nfsd4] root 2018 2 0 18:14 ? 00:00:00[nfsd4_callbacks] root 2019 2 018:14 ? 00:00:00 [nfsd] root 2020 2 0 18:14 ? 00:00:00 [nfsd] root 2021 2 0 18:14 ? 00:00:00 [nfsd] root 2022 2 0 18:14 ? 00:00:00 [nfsd] root 2023 2 0 18:14 ? 00:00:00 [nfsd] root 2024 2 0 18:14 ? 00:00:00 [nfsd] root 2025 2 0 18:14 ? 00:00:00 [nfsd] root 2026 2 0 18:14 ? 00:00:00 [nfsd] root 2053 1 0 18:14 ? 00:00:00rpc.idmapd root 26778 1765 0 18:16 pts/0 00:00:00 egreprpc|nfs
★NFS服务的主要任务是进行文件系统的共享,文件系统的共享与权限有关。所以NFS服务器启动时最少需要两个daemons,一个管理Client端是否能够登入的问题,另一个管理Client端能够取得的权限。如果还需要管理quota的话,NFS还要再加载rpc.rquotad程序。
- nfsd(rpc.nfsd)
这个daemon的主要功能是管理Client端是否能够登入主机,其中还包含入者的ID判别。
- rpc.mountd
这个daemon的主要功能则是管理NFS的文件系统。当Client端顺利通过rpc.nfsd登入主机后,在它可以使用NFS服务器提供数据之前,还会经过文件使用权限(就是-rwxrwxrwx与owner、group那几个权限)的认证程序。它会去读NFS的配置文件/etc/exports来比对Client的权限,当通过后,Client端就可以取得使用NFS文件的权限。注意:这个文件也是我们用来管理NFS共享目录的使用权限与安全设置的地方,特别说明,以上的进程查看均可以执行”man进程名”来查看进程的功能细节。
★ NFS启动的RPCdaemons
NFS服务在启动时要向RPC注册,所以NFS服务被称为RPC Server之一,那么NFS是关于文件系统的服务,文件系统与权限有关,所以至少需要两个daemon:
- rpc.nfsd:控制客户端是否能够登入的问题
- rpc.mountd:管理客户端能够取得的权限的认证程序。他会去读NFS配置文件/etc/exports来比对客户端的权限
- rpc.lockd(非必要):可用来锁定文件,用于多客户端同时写入
- rpc.statd(非必要):检查文件的一致性,与rpc.lockd有关。3.4两个服务需要客户端、服务端同时开才可以。
提示:对于使用rpm包安装的软件,命令service nfs start的启动方式等同于/etc/init.d/nfs start。在此,推荐使用/etc/init.d/nfs start,原因是可以使用tab命令被全完整启动路径,而命令service nfs start则需要完全手敲出来。另外,这里的提到的启动方式不仅仅适合nfs命令,同样适合大多数使用rpm包安装的其它软件的启动命令
四、配置NFS及portmap(Centos6.4下为rpcbind)服务开机自启动
配置NFS及portmap(Centos6.4下为rpcbind)服务在系统开机或重新启动后自动运行。
[[email protected] ~]# chkconfig nfs on [[email protected] ~]# chkconfig rpcbind on [[email protected] ~]# chkconfig --list|egrep"nfs|rpcbind" nfs 0:off 1:off 2:on 3:on 4:o5:on 6:off nfslock 0:off 1:off 2:off 3:on 4:o5:on 6:off rpcbind 0:off 1:off 2:on 3:on 4:o5:on 6:off
也可以只在3级别上开机启动
[[email protected] ~]# chkconfig --level 3rpcbind on [[email protected] ~]# chkconfig --level 3 nfson [[email protected] ~]# chkconfig --list|egrep"nfs|rpcbind" nfs 0:off 1:off 2:on 3:on 4:o5:on 6:off nfslock 0:off 1:off 2:off 3:on 4:o5:on 6:off rpcbind 0:off 1:off 2:on 3:on 4:o5:on 6:off
开机自启动的工作环境建议方法二:
vi /etc/rc.local 把要启动项加入到里面
[[email protected]~]# vi /etc/rc.local #!/bin/sh # # This script will be executed *after* allthe other init scripts. # You can put your own initialization stuffin here if you don‘t # want to do the full Sys V style initstuff. touch /var/lock/subsys/local #NFS service by Mrxiong to 2017.06.05 /etc/init.d/rpcbind start /etc/init.d/nfs start [[email protected] ~]# tail -3 /etc/rc.local #NFS service by Mrxiong to 2017.06.05 /etc/init.d/rpcbind start /etc/init.d/nfs start
工作场景可以统一按照规范放到/etc/rc.local
这样易于管理,和便于查看系统所跑的服务,
查看portmap(Centos6.4 rpcbind)和nfs服务开机启动状态
[[email protected] ~]# chkconfig --list |egrep"rpcbind|nfs" nfs 0:off 1:off 2:on 3:on 4:o5:on 6:off nfslock 0:off 1:off 2:off 3:on 4:o5:on 6:off rpcbind 0:off 1:off 2:on 3:on 4:o5:on 6:off
- 配置NFS服务
★NFS配置文件路径为:/etc/exports
[[email protected] ~]# ls -l /etc/exports -rw-r--r--. 1 root root 0 Jan 12 2010 /etc/exports [[email protected] ~]# cat /etc/exports
提示:Centos5.4以上NFS默认配置文件/etc/exports是存在的,但默认是没有内容的,需要用户自行配置。有些Linux版本可能不提供/etc/exports配置文件,这时就需要手动创建
★exports文件格式为:
NFS共享的目录 NFS客户端地址1(参1、参2……) 客户端地址(参1、参2……)
NFS共享的目录 NFS客户端地址1(参1、参2……)
查看方法:
[[email protected] ~]# man exports
EXAMPLE
# 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)
其中各项的参数含义如下:
- NFS共享的目录:为NFS服务端共享的实际目录,要用绝对路径。如:(/data/bbs)
- NFS客户端地址:为NFS服务器授权的可访问共享目录的NFS客户端地址,可以为单独IP地址或主机名、域名等,也可以为整个网段地址,还可以用“*”来匹配所有客户端服务器可以访问,这里所谓的客户端一般来说是前端业务服务器,如:web服务
- 参数集:对授权的NFS客户端的访问权限设置,
★生产环境常见配置实例:
常用格式说明 |
要共享的目录 客户端IP地址或IP段(参1,参2……..) |
配置例一 |
/data/bbs 192.168.1.1/24(rw,sync) |
配置例二 |
/home/ryan 192.168.1.1/24(rw,sync,all_squash,anonuid=2000,anongid=2000) 合适多客户端共享一个NFS目录 |
配置例三 |
/home/oldboy 192.168.1.111(ro) 生产环境可能用于运维给开发提供从某个测试服务器查看服务器的数据能力 |
注:以“配置例一”为例说明如下:
1./data/bbs为要共享的NFS服务器端的目录,注意要用绝对路径
2.192.168.1.1/24表示允许NFS客户端访问共享目录的网段范围。24表示255.255.255.0.
3.(rw,sync)rw表示允许读写,sync表示数据同步写入到内存和硬盘中
4.也可以用通配符*替换IP,表示允许所有主机,但不可以写成192.168.1.*的形式
★NFS配置权限设置,即/etc/exports文件配置格式中小括号()里的参数集
参数名称 |
参数用途※ |
rw |
Read-write,表示可读写权限※ |
ro |
Read-only,表示只读权限※ |
sync |
请求或写入数据时,数据同步写入到NFS Server的硬盘后才会返回※ |
async |
请求或写入数据时,先返回请求,再将数据写入到内存缓存和硬盘中。此参数可以提升NFS性能,但会降低数据的安全。因此一般情况下建议不用 |
no_root_squash |
访问NFS server共享目录的用户如果是root的话,它对该共享目录具有root权限。这个配置原本为无盘客户端准备的,用户应避免使用 |
root_squash |
对于访问NFS Server共享目录的用户如果是root的话,则它的权限将被压缩成匿名用户,同时它的UID和GID都会变成nobody或nfsnobody账号身份。在多个NFS客户端同时读写NFS Server数据时,这个参数很和用※※ |
anonuid |
参数以anon*头的即指anonymous匿名用户,这个用户的UID设置值通常为nobody或nfsnobody的UID值,当然我们也可以自行设置这个UID值。但是,UID必须存在于/etc/passwd中。在多NFS Clients时,如多台web server共享一个NFS目录时,通过这个参数可以使得不同的NFS Clients写入的数据对所有的NFS Clients保持同样的用户权限,即为配置的匿名UID对应用户权限,这个参数很有用。※※ |
Anongid |
同anonuid,区别就是把uid(用户id)换成gid(组id)※※ |
提示:带※号的表示常用参数 |
六、/etc/init.d/nfs reload 进行nfs重新加载
七、showmount -e localhost show一下自己,看服务端有没有配置好
客户端的配置:
- 检查系统环境
[[email protected] ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [[email protected] ~]# uname -n centos6client [[email protected] ~]# uname -r 2.6.32-504.el6.x86_64 [[email protected] ~]# uname -a Linux centos6client 2.6.32-504.el6.x86_64#1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux [[email protected] ~]# uname -m x86_64
除了检查系统版本和内核,还分别查看客户端和服务端的相关信息,如ip,主机名等等
- 安装、检查和启动6.4 rpcbind (5.8 portmap)服务(注意无需启动NFS服务)
[[email protected] ~]# yum install rpcbind-y [[email protected] ~]# /etc/init.d/rpcbindstatus rpcbind is stopped [[email protected] ~]# /etc/init.d/rpcbindstart Starting rpcbind: [ OK ] [[email protected] ~]# /etc/init.d/rpcbindstatus rpcbind (pid 26469) is running...
3.把rpcbind加入开机自启动
[[email protected] ~]# echo"/etc/init.d/rpcbind start">>/etc/rc.local [[email protected] ~]# tail -1/etc/rc.local /etc/init.d/rpcbind start
4扫描NFS服务器的文件共享例表
[[email protected] ~]# yum installshowmount -y [[email protected] ~]# showmount -e192.168.221.130 Export list for 192.168.221.130: /data 192.168.221.1/24
提示:如果showmount不出NFS服务器目录,就检查NFS服务器
[[email protected] ~]# ping192.168.221.130 PING 192.168.221.130 (192.168.221.130)56(84) bytes of data. 64 bytes from 1 [[email protected] ~]# telnet192.168.221.130 111à telnet一下NFS服务器111是portmap端口 Trying 192.168.221.130... Connected to 192.168.221.130. Escape character is ‘^]‘.
- 挂载NFS服务器共享目录到本地系统
[[email protected] ~]#mkdir /data [[email protected] ~]# mount -t nfs192.168.221.130:/data /data [[email protected] ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 18G 1.4G 16G 9% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 190M 27M 153M 15% /boot 192.168.221.130:/data 19G 1.4G 17G 8% /data
挂载目录的命令格式
挂载命令 |
挂载的格式类型 |
NFS服务器提供的共享目录 |
NFS客户端挂载的目录 |
mount |
-t nfs |
192.168.1.111/data/ |
/data(必须存在) |
完整挂载命令为:mount -t nfs 192.168.1.111/data/bbs /mnt 此命令要在客户端执行 |
6.配置开机自动挂载NFS共享目录
[[email protected] ~]# echo " mount-t nfs 192.168.221.130:/data /data " >>/etc/rc.local [[email protected]~]# tail -1 /etc/rc.local mount -t nfs 192.168.221.130:/data /data
在生产环境中,对于共享的NFS目录,一般不会配置到/etc/fstab里,因为,在客户端主机重起时如果由于网络等原因连接不上nfs server时会导致客户端主机无法启动。一般通过把mount -t nfs 192.168.1.111/data/bbs /mnt命令放到rc.local中来实现开机自动挂载NFS,不过这也会引起另外的问题,就是重起NFS客户端后,可能挂载NFS不成功。
7.测试读写数据
[[email protected] data]# touch aa.txt [[email protected] data]# touch tt.txt [[email protected] data]# ls aa.txt tt.txt [[email protected] data]# ls aa.txt tt.txt
总结:
NFS服务端:
- 检查服务器系统、内核版本和IP等相关信息
- 检查portmap(5.8)、rpcbind(6.4)和nfs的安装运行状态,如果没安装,可以使用yum进行安装yum install nfs-utils rpcbind –y
rpm -aq|grep -E "nfs-utils|rpcbind"
- 开启portmap(5.8)、rpcbind(6.4)和nfs服务,portmap(5.8)、rpcbind(6.4)服务一定要先于nfs启动
/etc/init.d/rpcbind start
/etc/init.d/nfs start
- 把portmap(5.8)、rpcbind(6.4) 和nfs加入到/etc/rc.local实现开机自启动
vi /etc/rc.local
/etc/init.d/rpcbind start
/etc/init.d/nfs start
- 编辑/etc/exports配置文件,把共享内容加到里面
如:/data192.168.221.130/24(rw,sync)
共享目录 允许访问地址 参数 #共享目录一定要绝对路径
- /etc/init.d/nfs reload 或exportfs -rv进行nfs重新加载
NFS客户端:
1. 检查服务器系统、内核版本和IP等相关信息
2. 检查和启动rpcbind服务(注意无需启动NFS服务)
/etc/init.d/rpcbind status
/etc/init.d/rpcbind start
3. 将portmap(6.4 rpcbind)加入开机自启动
echo “/etc/init.d/rpcbind start”>>rc.local
4扫描NFS服务器的文件共享例表
showmount-e 192.168.221.130
5.挂载NFS服务器共享目录到本地系统
mount -t nfs 192.168.221.130:/data /data
6.配置开机自动挂载NFS共享目录
echo " mount -t nfs 192.168.221.130:/data /data">>/etc/rc.local
#NFS共享目录自动加载不要加入到/etc/fstab中,要加入到/etc/rc.local中
提示:在CentoS5.8中,在NFS服务端
/var/lib/nfs/mtab 查看机器的挂载记录
[[email protected] ~]# cat /var/lib/nfs/rmtab 192.168.1.119:/data/bbs:0x00000001
在/var/lib/nfs/etab里记录了系统nfs默认自动补上的选项
[[email protected] ~]# cat/var/lib/nfs/etab /data/bbs 192.168.1.1/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534)
强制卸载:umount-lf /mnt