NFS共享服务

1、NFS简介
NFS:netword file system 网络文件系统
应用在企业集群架构的工作场景。
NFS是通过RPC远程过程调用协议来实现的。
RPC服务最主要的功能就是记录每个NFS功能所对应的端口号,并且在NFS客户端请求该端口和功能给NFS提供数据传输。

2、NFS服务的软件包:
要部署NFS服务,需要安装下面的软件包:
nfs-utils:这个是NFS服务主程序,包括rpc.nfsd、rpc.mountd两个daemons和相关文档说明及执行命令文件等。
portmap:Centos5.X下面RPC的主程序(Centos6.X下名字为rpcbind)
nfs可以被视为一个RPC程序,在启动任何一个RPC程序之前,需要做好端口和功能的映射工作,这个映射工作就是由portmap或rpcbind服务来完成对,因此,在提供NFS服务之前必须先启动portmap或rpcbind服务。

3、安装NFS服务
查看系统版本:
# cat /etc/redhat-release
CentOS release 6.6 (Final)
# uname -m
x86_64
# uname -r
2.6.32-504.el6.x86_64
安装:
#rpm -qa nfs-utils rpcbind #检查软件包
#yum install nfs-utils rpcbind -y #安装nfs,rpc软件包
#rpm -qa nfs-utils rpcbind
rpcbind-0.2.0-12.el6.x86_64
nfs-utils-1.2.3-70.el6_8.2.x86_64
4、启动RPC服务
#/etc/init.d/rpcbind start
正在启动 rpcbind: [确定]
查看rpc服务
#ps -ef|grep rpc|grep -v grep #查看rpc服务
rpc 2346 1 0 14:52 ? 00:00:00 rpcbind
#/etc/init.d/rpcbind status
rpcbind (pid 2346) 正在运行...
#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
#/etc/init.d/rpcbind stop
停止 rpcbind: [确定]
# rpcinfo -p localhost #查看RPC服务端口就会报错
rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused'

5、启动NFS服务:
#/etc/init.d/nfs start #不启动RPC功能时启动NFS就会报错
启动 NFS 服务: [确定]
关掉 NFS 配额:无法注册服务: RPC:无法接收; errno = 拒绝连接
rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp). [失败]
启动 NFS mountd: [失败]
启动 NFS 守护进程:

#/etc/init.d/rpcbind start
正在启动 rpcbind: [确定]
/etc/init.d/nfs start #启动RPC服务再启动NFS就成功了
启动 NFS 服务: [确定]
关掉 NFS 配额: [确定]
启动 NFS mountd: [确定]
启动 NFS 守护进程: [确定]
正在启动 RPC idmapd: [确定]

#rpcinfo -p localhost #查看NFS端口号
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 44856 mountd
100005 1 tcp 52179 mountd
100005 2 udp 57138 mountd
100005 2 tcp 35097 mountd
100005 3 udp 40999 mountd
100005 3 tcp 37284 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 46640 nlockmgr
100021 3 udp 46640 nlockmgr
100021 4 udp 46640 nlockmgr
100021 1 tcp 38357 nlockmgr
100021 3 tcp 38357 nlockmgr
100021 4 tcp 38357 nlockmgr

6、加入到开机自启动:
#chkconfig nfs on
#chkconfig rpcbind on
#chkconfig --list|grep -E 'nfs|rpcbind'
nfs 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
rpcbind 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭

7、配置NFS的配置文件,重启动
NFS配置文件路径:
/etc/exprots #NFS主配置文件,配置共享服务,默认为空
/usr/sbin/exportfs #NFS的管理命令,可以加载配置生效,exprots -rv可加载配置生效
/usr/sbin/showmount #查看NFS配置及挂载结果
/var/lib/nfs/etab #NFS配置文件的完整参数设定的文件,默认参数和设定参数都在这显示
/var/lib/nfs/xtab #适合CentOS5记录曾经挂载过度信息。

#mkdir /data #建立共享目录
#vim /etc/exports
添加:
###shared data for bbs by nfsclient
/data 192.168.233.0/24(rw,sync)
#参数说明:/data为共享目录,IP为可访问的共享地址,可以是域名,*表示允许任意用户使用,rw为可读写,ro为只读权限,sync为同步机制,async则为异步机制,可选参数(root_squash将root转换为匿名访问,no_root_squash允许root用户访问,all_squash所以的用户都作为匿名访问,anonuid指定用户UID,anongid指定用户GID,默认为nfsnobody用户
#生场环境优化挂载设置:
/data 192.168.233.0/24(rw,async,all_squash,anonuid=567,anongid=567)
#/etc/init.d/nfs reload #重启服务
#showmount -e localhost #查看共享
Export list for localhost:
/data 192.168.233.0/24
#服务器NFS配置完毕!

8、客户端安装RPC、nfs服务
#yum -y install rpcbind nfs-utils
客户端启动RPC服务:
#/etc/init.d/rpcbind start
Starting rpcbind: [ OK ]
# /etc/init.d/rpcbind status
rpcbind (pid 2715) is running...
#chkconfig rpcbind on
#chkconfig --list rpcbind
rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off

9、在客户端检查共享:
#showmount -e 192.168.233.129 #如出现此错误,说明防火墙拦截了,关闭服务端防火墙即可
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

#showmount -e 192.168.233.129 #测试访问共享成功
Export list for 192.168.233.129:
/data 192.168.233.0/24

10、客户端挂载服务:
1)默认挂载参数:
#grep '/data' /proc/mounts
192.168.233.129:/data/ /python nfs4 rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.233.132,minorversion=0,local_lock=none,addr=192.168.233.129 0 0
2)挂载NFS优化:
mount -o 后面接参数选项重点:
#rsize=131072 读取磁盘块的大小
#wsize=131072 写入磁盘块的大小
#nosuid
#noexec 让文件本身没有执行权限
#noatime 不更新文件时间戳
#nodiratime 不更新文件夹时间戳
客户端优化挂载:
mount -t nfs -o noatime,nodiratime,rsize=131072,wsize=131072 192.168.233.129:/data /python
3)挂载
#mount -t nfs 192.168.233.129:/data /mnt
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 97G 2.6G 89G 3% /
tmpfs 495M 0 495M 0% /dev/shm
/dev/sda1 190M 27M 153M 16% /boot
192.168.233.129:/data 77G 3.1G 70G 5% /mnt

11、注意:挂载后不能写文件,说明服务端挂载文件没有写权限
#cd /mnt
# mkdir aaa
mkdir: cannot create directory 'aaa': Permission denied

12、案例:实现多台客户端同时挂载NFS服务,无论从哪个客户端写入数据,其他客户端也可以读写,server上的用户和组都是同一个名称nfs001
1)在客户端和服务端上配置用户并指定UID和GID,并且都相同。
#useradd -u 555 nfs001 -s /sbin/nologin -M
#id nfs001
uid=555(nfs001) gid=555(nfs001) 组=555(nfs001)
2)配置共享,并重启服务生效。
#cat /var/lib/nfs/etab #查看可用的配置选项
/data 192.168.233.0/24(rw,async,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)

#cat /etc/exports
#shared data for bbs by nfsclient
#/data 192.168.233.0/24(rw,async)
/data 192.168.233.0/24(rw,async,all_squash,anonuid=555,anongid=555)
#/etc/init.d/nfs reload
#chown -R nfs001.nfs001 /data
#ll /data -d
drwx------ 3 nfs001 nfs001 4096 4月 2 16:35 /data
3)客户端挂载写入数据
#mount -t nfs 192.168.233.129:/data /python
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 97G 2.6G 89G 3% /
tmpfs 495M 0 495M 0% /dev/shm
/dev/sda1 190M 27M 153M 16% /boot
192.168.233.129:/data 77G 3.0G 70G 5% /python
#cd /python/
#touch bbb.sh
#mkdir bbb
#ll
drwxr-xr-x 2 nfs001 nfs001 4096 Apr 3 2017 bbb
-rw-r--r-- 1 nfs001 nfs001 0 Apr 3 12:38 bbb.sh

#mount -t nfs 192.168.233.129:/data /mnt
#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 77G 2.1G 71G 3% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/sda1 190M 32M 149M 18% /boot
192.168.233.129:/data 77G 3.0G 70G 5% /mnt

#touch ccc.sh
#mkdir ccc
#ll
drwxr-xr-x 2 nfs001 nfs001 4096 4月 3 12:42 bbb
-rw-r--r-- 1 nfs001 nfs001 0 4月 3 12:38 bbb.sh
drwxr-xr-x 2 nfs001 nfs001 4096 4月 3 12:43 ccc
-rw-r--r-- 1 nfs001 nfs001 0 4月 3 12:39 ccc.sh

14、修复文件系统挂载错误导致系统启动失败:
#mount -o rw,remount /

#vim /etc/fstab
# tail /etc/fstab
/dev/sha1 /mnt ext4 defaults 0 1

#开机启动时检查文件系统就会报错
checking filesystems
/dev/sha1:clean,39/41200 files,42599/204800 blocks [FAILED]
*** An error occurred during the file system check.
*** Dropping you to a shell;the system will reboot
*** when you leave the shell.
Give root password for maintenance
(or type Control-D to continue): #输入root密码进入修复模式

#mount -o rw,remount / #重新挂载文件系统为读写
#vim /etc/fstab #修改挂载错误
/dev/sha1 /mnt ext4 defaults 0 0
#reboot #重启动恢复挂载启动成功!

15、NFS服务系统内核参数优化
#cat >>/etc/sysctl.conf<<EOF
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
EOF

#sysctl -p
强制卸载挂载文件系统:
umount -lf /mnt
exportfs命令说明:
exprotfs -rv 加载NFS配置生效
exprotfs -o rw,sync,all_squash,anonuid=456,anongid=456 192.168.233.0/24:/data 配置共享目录
rpcinfo命令:
rpcinfo -p localhost 查看rpc有无为NFS指定端口

posted @ 2017-04-03 18:50  Py.qi  阅读(672)  评论(0)    收藏  举报