计算机系统应用教程网站

网站首页 > 技术文章 正文

基于Centos6.5搭建NFS服务与简单配置

btikc 2024-09-24 08:24:17 技术文章 20 ℃ 0 评论

一、NFS服务简介

NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。

NFS允许一个系统在网络(一般是局域网)上与它人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。它可以使本地工作站使用更少的磁盘空间,用户不必在每个网络上机器里头都有一个home目录。Home目录 可以被放在NFS服务器上并且在网络上处处可用。

NFS网络文件系统很像Windows系统的网络共享、网络驱动器映射。

NFS只是一种文件系统,本身没有传输功能,是基于RPC协议实现的,才能达到两个Linux系统之间的文件目录共享;RPC( Remote Procedure Call ),远程过程调用RPC是能使客户端执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER。所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。

二、企业应用场景

2.1 企业应用介绍

在企业集群架构场景中,NFS一般被用来存储共享视频、音乐、图片、附件等一些静态资源文件。然后前端的节点访问这些静态源文件时就会读取NF上的资源。NFS在当前互联网系统架构中也是比较常用的数据存储服务之一(中小型网站公司应用频率较高),而相对于大公司或大门户网站除了使用NFS外,还可能会用到一些分布式文件系统FastDFS Moosefs(mfs)等。

注意:网站的主程序不要放在NFS。

2.2 NFS在企业架构中的位置,如下图01

2.3 NFS在企业架构中的角色

例如下图02中,A用户上传LOGO图片到web01服务器中,然后用户B访问这张图片,结果用户B的访问请求被负载均衡器分发到web02中,因为web02没有这张图片,所以无法看到用户A所以上传的图片。当有一个共享存储时(如下图03),用户A上传的图片被放到了共享存储里,所以无论用户B与A 被分发到web01还是web02上,图片都被存储在共享存储上。所以NFS共享存储就解决了这个问题。

无NFS共享存储:

有NFS共享存储:

三、NFS服务环境准备

服务器系统角色IPCentos6.5x86_64NFS服务端(NFS_server)192.168.1.104Centos6.5x86_64NFS 客户端(blog01)192.168.1.106Centos6.5x86_64NFS 客户端(blog02)192.168.1.107

3.1 Centos6.5x86_64 操作系统与内核版本信息

[root@NFS_server ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@NFS_server ~]# uname -r
2.6.32-431.el6.x86_64
[root@NFS_server ~]# uname -m
x86_64

3.2 所有机器关闭防火墙、关闭selinux(以服务端为例)

[root@NFS_server ~]# /etc/init.d/iptables stop
[root@NFS_server ~]# chkconfig --level 35 iptables off
[root@NFS_server ~]# setenforce 0
setenforce: SELinux is disabled
[root@NFS_server ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

四、NFS服务端的安装与设置

4.1 部署NFS服务,需要安装下面的软件包:

  • nfs-utils:这个是NFS服务的主程序
  • rpcbind:Centos6.X下面RPC的主程序(X下面为portmap)

在启动任何一个RPC程序之前,需要做好端口的对应映射工作,这个映射工作就是由rpcbind服务来完成的。因此,在提供NFS之前必须先启动rpcbind服务。

Centos6.5默认是没有安装NFS软件包的(Centos5默认安装)

[root@NFS_server ~]# rpm -aq nfs-utils rpcbind
 
[root@NFS_server ~]# yum install nfs-utils rpcbind -y
 
....忽略...
 
[root@NFS_server ~]# rpm -aq nfs-utils rpcbind
 
rpcbind-0.2.0-12.el6.x86_64
 
nfs-utils-1.2.3-70.el6_8.1.x86_64
 
[root@NFS_server ~]#

4.2启动rpcbind服务

[root@NFS_server ~]# /etc/init.d/rpcbind status <======检查rpcbind服务的状态
 
rpcbind is stopped
 
[root@NFS_server ~]# rpcinfo -p localhost <======rpcbind服务未启动检查rpcinfo信息
 
rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused
 
[root@NFS_server ~]# /etc/init.d/rpcbind start <======启动rpcbind服务
 
Starting rpcbind: [ OK ]
 
[root@NFS_server ~]#
 
[root@NFS_server ~]#
 
[root@NFS_server ~]# rpcinfo -p localhost <======启动后查看RPC服务注册的商品信息
 
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
 
[root@NFS_server ~]# chkconfig rpcbind on <=====设置rpcbind开机自启动
 
[root@NFS_server ~]# chkconfig --list rpcbind <======检查rpcbind开机是否自启动
 
rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off
 
[root@NFS_server ~]#
 
<span style="font-size: 12pt;"><strong>4.3启动NFS服务</strong></span>
 
[root@NFS_server ~]# /etc/init.d/rpcbind status <======检查rpcbind服务
 
rpcbind (pid 29910) is running...
 
[root@NFS_server ~]# /etc/init.d/nfs status <======检查nfs服务
 
rpc.svcgssd is stopped
 
rpc.mountd is stopped
 
nfsd is stopped
 
rpc.rquotad is stopped
 
[root@NFS_server ~]# /etc/init.d/nfs start <======启动nfs服务
 
Starting NFS services: [ OK ]
 
Starting NFS quotas: [ OK ]
 
Starting NFS mountd: [ OK ]
 
Starting NFS daemon: [ OK ]
 
Starting RPC idmapd: [ OK ]
 
[root@NFS_server ~]#
 
[root@NFS_server ~]# /etc/init.d/nfs status <======检查NFS服务
 
rpc.svcgssd is stopped
 
rpc.mountd (pid 30010) is running...
 
nfsd (pid 30025 30024 30023 30022 30021 30020 30019 30018) is running...
 
rpc.rquotad (pid 30006) is running...
 
[root@NFS_server ~]#
 
[root@NFS_server ~]# rpcinfo -p localhost <======查看NFS服务向RPC服务注册的端口信息
 
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 1661 mountd
 
100005 1 tcp 64119 mountd
 
100005 2 udp 26979 mountd
 
100005 2 tcp 40373 mountd
 
100005 3 udp 52048 mountd
 
100005 3 tcp 63236 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 1036 nlockmgr
 
100021 3 udp 1036 nlockmgr
 
100021 4 udp 1036 nlockmgr
 
100021 1 tcp 4416 nlockmgr
 
100021 3 tcp 4416 nlockmgr
 
100021 4 tcp 4416 nlockmgr
 
[root@NFS_server ~]#
 
[root@NFS_server ~]# chkconfig nfs on <=====设置NFS开机自启动
 
[root@NFS_server ~]# chkconfig --list nfs <=====检查NFS是否开机自启动
 
nfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off
 
[root@NFS_server ~]#

小问题:

在工作场景中当机器的服务多了,都用chkconfig管理,当管理这服务器的运维离职或业务需要迁移的时候,不容易查看出有哪些服务,而将所有服务的开机自启动加入/etc/rc.local这样规范的好处是,当服务器人员离职,或者要迁移业务都可以查看/etc/rc.load 很容易就查到的到相关的服务,也方便管理。

[root@NFS_server ~]# tail -4 /etc/rc.local
 
tail: inotify cannot be used, reverting to polling
 
#####nfs########
 
/etc/init.d/rpcbind start <=====注意顺序 先启rpcbind再nfs
 
/etc/init.d/nfs start
 
####nfs########
 
[root@NFS_server ~]#

到此NFS服务端已经安装完毕!!!

4.4配置NFS服务端

4.4.1配置路径

[root@NFS_server ~]# ls -l /etc/exports <=====配置文件可以用man exports查看相关参数
 
-rw-r--r--. 1 root root 0 Jan 12 2010 /etc/exports
 
[root@NFS_server ~]# cat /etc/exports <=====默认是空
 
[root@NFS_server ~]#

4.4.2配置格式

NFS共享的目录 NFS客户端地址(参数1,参数2…) NFS客户端地址(参数1,参数2…)

NFS共享的目录 NFS客户端地址(参数1,参数2…..)

注意:

  • NFS共享的目录:为NFS服务端要共享的实际目录,要用绝对路径,要注意共享目录的权限问题,如果需要读写共享,则把NFS共享目录设置为用户(nfsnobody)可以读写。
  • NFS客户端地址:为NFS服务端授权的可以访问共享目录的NFS客户端地可以为单独的IP或主机名,域名等,也可以是整个网段的地址(192.168.1.0/24).
  • 参数:rw(可读写);sync(将数据同步写入内存缓冲区与磁盘中);all_squash(将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody)),参数在后面会介绍。

下面把NFS服务端的/data 目录共享 并授权

[root@NFS_server ~]# ls -l /data
 
ls: cannot access /data: No such file or directory
 
[root@NFS_server ~]# mkdir /data -p
 
[root@NFS_server ~]# vi /etc/exports
 
/data 192.168.1.0/24(rw,sync,all_squash)
 
[[root@NFS_server ~]# /etc/init.d/rpcbind restart
 
Stopping rpcbind: [ OK ]
 
Starting rpcbind: [ OK ]
 
[root@NFS_server ~]# /etc/init.d/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 ]
 
[root@NFS_server ~]#
 
[root@NFS_server ~]# cat /var/lib/nfs/etab
 
/data 192.168.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,all_squash)
 
[root@NFS_server ~]# chown -R nfsnobody.nfsnobody /data
 
[root@NFS_server ~]#

4.4.3检查和测试本地挂载

[root@NFS_server ~]# showmount -e localhost
 
Export list for localhost:
 
/data 192.168.1.0/24
 
[root@NFS_server ~]# mount -t nfs 192.168.1.104:/data /mnt
 
[root@NFS_server ~]# df -h
 
Filesystem Size Used Avail Use% Mounted on
 
/dev/xvda3 18G 2.0G 15G 12% /
 
tmpfs 497M 0 497M 0% /dev/shm
 
/dev/xvda1 194M 29M 155M 16% /boot
 
192.168.1.104:/data 18G 2.0G 15G 12% /mnt
 
[root@NFS_server ~]#

五.NFS客户端的安装

同样是用yum install nfs-utils rpcbind -y安装,但是只是启动rpcbind服务

[root@blog01 ~]# rpm -qa nf-utils rpcbind
 
[root@blog01 ~]# yum install nfs-utils rpcbind -y
 
[root@blog01 ~]# rpm -qa nf-utils rpcbind
 
rpcbind-0.2.0-12.el6.x86_64
 
[root@blog01 ~]# /etc/init.d/rpcbind start
 
[root@blog01 ~]# /etc/init.d/rpcbind status
 
rpcbind (pid 2215) is running...
 
[root@blog01 ~]# chkconfig rpcbind on
 
[root@blog01 ~]# echo "/etc/init.d/rpcbind start" >>/etc/rc.local
 
[root@blog01 ~]# mount -t nfs 192.168.1.104:/data /mnt
 
[root@blog01 ~]# df -h
 
Filesystem Size Used Avail Use% Mounted on
 
/dev/xvda3 18G 2.1G 15G 13% /
 
tmpfs 497M 0 497M 0% /dev/shm
 
/dev/xvda1 194M 29M 155M 16% /boot
 
192.168.1.104:/data 18G 2.0G 15G 12% /mnt
 
[root@blog01 ~]# echo "mount -t nfs 192.168.1.227:/data /mnt" >>/etc/rc.local
 
[root@blog01 ~]# tail -2 /etc/rc.local
 
tail: inotify cannot be used, reverting to polling
 
/etc/init.d/rpcbind start
 
mount -t nfs 192.168.1.227:/data /mnt 《=====已经挂载上来了
 
[root@blog01 ~]#

blog02也是同样的操作

[root@blog02 ~]# df -h
 
Filesystem Size Used Avail Use% Mounted on
 
/dev/xvda3 18G 2.0G 15G 12% /
 
tmpfs 497M 0 497M 0% /dev/shm
 
/dev/xvda1 194M 29M 155M 16% /boot
 
192.168.1.104:/data 18G 2.0G 15G 12% /mnt
 
You have new mail in /var/spool/mail/root
 
[root@blog02 ~]#

六、验证是否共享

在blog01的/mnt下创建一个文件

[root@blog01 ~]# cd /mnt/
 
You have new mail in /var/spool/mail/root
 
[root@blog01 mnt]#
 
[root@blog01 mnt]# pwd
 
/mnt
 
[root@blog01 mnt]#
 
[root@blog01 mnt]# touch nfs.txt
 
[root@blog01 mnt]#

查看blog02的/mnt下是否存在

[root@blog02 ~]# ll /mnt/
 
total 0
 
[root@blog02 ~]#
 
[root@blog02 ~]# ll /mnt/
 
total 0
 
-rw-r--r--. 1 nfsnobody nfsnobody 0 Sep 17 21:35 nfs.txt
 
[root@blog02 ~]#

至此NFS服务的基本安装与配置已经完成,此后会推出更详细的博文。

七、优缺点

优点:1.简单容易上手和掌握

2.稳定、方便

NFS文件系统内数据是在文件系统上的,能看得见。

缺点:1.存在单点故障,如果NFS服务端宕机了,所以有客户端都不能访问共享目录(这个可以用负载均衡及高可用方案来弥补)。

2.客户端认证时是基于IP和主机名的,权限时根据ID识别,安全性一般(如果用于内网则基本没问题)。

3.NFS数据是明文的,NFS本身对数据完整性不作验证。

4.在大数据高并发的场合,NFS效率和性能有限。

5.多台客户机器挂载一个NFS服务器时,连接管理维护麻烦

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表