NFS共享存储

NFS简介

NFS概述

定义

NFS(Network File System),它允许网络中的计算机之间通过 TCP/IP 网络共享资源。 
在 NFS 的应用中,本地 NFS 的客户端应用可以透明地读写位于远端 NFS 服务器上的文件, 
就像访问本地文件一样 
NFS 最早是由 Sun 公司发展出来的,后被逐渐完整以及整合至 Linux 内核 

功能

可以透过网络,让不同的主机、不同的操作系统可以共享存储 

优点

(1)节省本地存储空间,将常用的数据存放在一台 NFS 服务器上且可以通过网络访问,那 
么本地终端将可以减少自身存储空间的使用 
(2)用户不需要在网络中的每个机器上都建有 Home 目录,Home 目录可以放在NFS 服务 
器上且可以在网络上被访问使用 
(3)一些存储设备 CDROM 等都可以在网络上被别的机器使用。这可以减少整个网络上可 
移动介质设备的数量 

工作原理

img

NFS: 在文件传送或信息传送过程中依赖于 RPC 协议。远程过程调用 ( Remote Procedure       Call ) 是能使客户端执行其他系统中程序的一种机制

image-20210323082914258

# 总结:客户端NFS和服务端NFS通讯过程 
1)首先服务器端启动RPC服务,并开启111端口 
2)启动NFS服务,并向RPC注册端口信息 
3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口 4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。 
5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。

启动的进程

# nfsd:
	最主要的 NFS 服务提供程序,这个 daemon 主要的功能就是管理客户端是否能够使用服务器文件系统挂载信息,其中还包含判断这个登录用户的 ID
# rpc.mountd:
	这个 daemon 主要功能则是管理 NFS 的文件系统。当 client 端顺利通过rpc.nfsd 登入主机后,在它可以使用 NFS 服务器提供规定文件之前,还会经过文件使用权限的认证程序。它会去读取 NFS 的配置  文件/etc/exports 来对比客户端的权限,当通过这一关之后,client 端也就取得使用 NFS 文件的权限
# rpc.lockd ( 非必要 ):
	这个 daemon 用于管理文件的锁定方面,当多个客户端同时尝试写入某个文件时就可以对该文件造成一些问题。rpc.lockd 则可以用来克服这此问题。但rpc.lockd 必须要同时在客户端和服务器端都开启才行
# rpc.statd ( 非必要 ):
	这个 daemon 可以用来检查文件的一致性,若发生因为客户端同时使 用同一个文件造成文件损坏时,rpc.statd 可以用来检测并尝试恢复该文件
# nfs:
	它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器
# rpcbind:
	主要功能是进行端口映射工作。当客户端尝试连接并使用RPC服务器提供的服务(如NFS服务)时,rpcbind会将所管理的与服务对应的端口提供给客户端,从而使客户可以通过该端口向服务器请求服务。

端口信息

RPC 通讯:111
NFS Server 通讯:2049
数据通讯:随机端口
    mountd 端口:"32768--65535" udp/tcp
    nlockmgr 端口:"32768--65535" udp/tcp
#指定数据通讯端口(就不需要开启随机端口,限制端口的开启,提升稳定性)
$ vim    /etc/sysconfig/nfs
    RQUOTAD_PORT=30001   #指定检测数据接口
    LOCKD_TCPPORT=30002  #指定锁的tcp接口
    LOCKD_UDPPORT=30002  #指定锁的udp接口
    MOUNTD_PORT=30003    #挂载点接口
    STATD_PORT=30004     #当前状态文件

NFS配置说明

NFS安装

nfs-utils: 这个是 NFS 服务主程序( 包含 rpc.nfsd、rpc.mountd、daemons )
rpcbind: 这个是 CentOS6.X 的 RPC 主程序( CentOS5.X 的为 portmap )

# Server 端安装并开启服务:
$ yum –y install rpcbind nfs-utils
$ /etc/init.d/rpcbind status

配置文件说明

/etc/exports 是NFS程序的配置文件
    共享目录  客户端1(访问权限,用户映射,其他)  客户端2(访问权限,用户映射,其他)
    a.共享目录:共享目录是指NFS服务器共享给客户机使用的目录
    b.客户端:客户端是指网络中可以访问这个NFS共享目录的计算机
/etc/exports文件的配置格式为:
    NFS共享目录 NFS客户端地址1(参数1,参数2,参数3......) 客户端地址2(参数1,参数2.)
    NFS共享目录 NFS客户端地址(参数1,参数2,参数3......) 

$ showmount -e ip   #查看挂载情况
$ mount -t nfs  ip:/file  /file1

# 客户端常用的指定方式:
    指定ip地址的主机:192.168.0.200
    指定子网中的所有主机:192.168.88.0
    指定域名的主机:www.kernel.com
    指定域中的所有主机:*.kernel.com
    所有主机:*

参数说明

参数 作用
ro 只读
rw 读写
root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
sync 同时将数据写入到内存与硬盘中,保证不丢失数据
async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
anonuid 匿名用户的 UID 值,通常是 nobody 或 nfsnobody,可以在此处自行设定
anongid 匿名用户的GID值
# 用户映射选项:
root_squash:将root用户的访问映射为匿名(nfsnobody)用户uid和gid;(默认生效)
no_root_squash:保留管理员权限,以服务器管理员的权限管理;
all_squash:将远程访问的用户及所属组都映射为指定uid、gid的匿名用户;
anonuid=xxx:将远程访问的所有用户都映射为指定uid的匿名用户;
anongid=xxx:将远程访问的所有用户组都映射为指定gid匿名组账户;

常用命令

1、启动NFS服务器
    为了使NFS服务器能正常工作,需要启动rpcbind和nfs两个服务,
    并且rpcbind一定要先于nfs启动。
    # service rpcbind start
    # service nfs start
 2、查询NFS服务器状态
    # service rpcbind status
    # service nfs status  
 3、停止NFS服务器
    要停止NFS运行时,需要先停止nfs服务再停止rpcbind服务,对于系统中有其他服务
    (如NIS)需要使用时,不需要停止rpcbind服务
    # service nfs stop
    # service rpcbind stop
 4、设置NFS服务器的自动启动状态
    设置rpcbind和nfs服务在系统运行级别2345自动启动。
    # chkconfig --level 2345 rpcbind on
    # chkconfig --level 2345 nfs on
 5、查看RPC服务器开启了哪些端口
    rpcinfo –p localhost
6、设置NFS服务器的自动启动状态
    设置rpcbind和nfs服务在系统运行级别2345自动启动。
    # chkconfig --level 2345 rpcbind on
    # chkconfig --level 2345 nfs on

NFS构建

1、实验环境

两台虚拟机    
NFS服务器:192.168.190.111   
测试客户端:192.168.190.112

2、安装服务器端并启动

$ yum -y install rpcbind nfs-utils #默认已安装 
$ service nfs start

3、修改配置文件

$ vim /etc/exports #是NFS程序的配置文件  添加    
#共享目录  客户端1(访问权限,用户映射,其他)  客户端2(访问权限,用户映射,其他)    
/nfs1 192.168.190.0/24(rw,async) #指定网段 或 
/nfs1 192.168.190.112/24(rw)   #指定ip

4、创建目录,并重启nfs服务

$ mkdir /nfs1 
$ service nfs restart #若有报错可能是没有创建目录的原因导致

5、客户端挂载

#showmount -e 本机ip    服务器端查看nfs共享状态 #showmount -e NFS服务器IP 客户端查看nfs共享状态 
$ showmount -e 192.168.190.111 
$ mkdir /nfsclent    #创建挂载目录 
$ mount 192.168.190.111:/nfs1 /nfsclient df -hP #查看 
$ mount | grep nfs   #看挂载信息 
$ mount -o vers=3 共享 本地 #指定挂载使用nfs V3版本(避免同步延迟) 
$ mount -o vers=3 192.168.190.111:/nfs1 /nfsclient #使用此方式挂载可避免延迟

6、客户端测试

#setfacl -m u:nsfnobody:rwx /nfsserver/ #服务器端操作 给共享目录权限 #客户端操作 
$ cd /nfsclient 
$ touch a.txt 

永久挂载
img
posted @ 2020-04-23 08:44  候你已久  阅读(288)  评论(0)    收藏  举报