nfs共享存储技术

简介: nfs共享存储技术

概述

参考:https://blog.csdn.net/weixin_34249678/article/details/92973397

NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。

NFS系统和Windows网络共享、网络驱动器类似,只不过windows用于局域网, NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS

NFS 本身的服务并没有提供资料传递的协议,在资料传送或者其它相关讯息传递的时候,NFS使用的则是一个称为远程过程调用(Remote Procedure Call, RPC)的协议来协助 NFS 本身的运作。 NFS 可以视作是一个 RPC 服务端。除了启动NFS的主机需要激活RPC的服务,挂载NFS目录的Client机器,也需要同步激活RPC,Server端与Client端藉由RPC的协议来进行program port的对应。NFS主要是管理分享出来的目录,资料的传递是RPC的协议运作的。


NFS的目的:

  • 实现多台服务器之间文件共享
  • 实现多台服务器之间数据一致


要让NFS运行起来,对外提供服务,一共需要两个套件的支持。分别是:

  • nfs-utils:NFS的主要组件,提供rpc.nfsd及rpc.mountd这两个NFS daemons与其它相关documents与说明文件、执行档等的组件。这
  • portmap:提供端口映射的功能。


客户端要访问nfs server的文件,NFS Server端必须NFS的服务,NFS的服务是由以下两个daemon(后台进程)来完成的:

  • rpc.nfsd:管理 Client 是否能够登入主机的权限,其中还包含这个登入者的 ID 的判别。
  • rpc.mountd:管理NFS的文件系统,当Client端顺利的通过rpc.nfsd而登入主机之后,在它可以使用NFS服务器提供的文件之前,还会经过文件使用权限 (就是那个-rwxrwxrwx与owner, group那几个权限)的认证程序!它会去读NFS的配置文件 /etc/exports 来比对Client的权限,当通过这一关之后Client就可以取得使用NFS文件的权限。

    故,可以通过 /etc/exports 文件管理NFS共享之目录的使用权限与安全设定


linux系统搭建nfs

1.所有节点安装NFS

# 检查是否安装过了nfs,没有安装nfs则通过联网yum安装或离线本地安装
rpm -qa | grep nfs

# 联网yum安装命令
yum -y install nfs-utils

# 离线本地安装
yum -y localinstall ./nfs_install_rpm/*.rpm
  # 说明:nfs_install_rpm为nfs的rpm安装包目录。rpm安装包列表如下
  # gssproxy-0.7.0-29.el7.x86_64.rpm
  # keyutils-1.5.8-3.el7.x86_64.rpm
  # keyutils-libs-1.5.8-3.el7.x86_64.rpm
  # keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm
  # libbasicobjects-0.1.1-32.el7.x86_64.rpm
  # libcollection-0.7.0-32.el7.x86_64.rpm
  # libevent-2.0.21-4.el7.x86_64.rpm
  # libini_config-1.3.1-32.el7.x86_64.rpm
  # libnfsidmap-0.25-19.el7.x86_64.rpm
  # libpath_utils-0.2.1-32.el7.x86_64.rpm
  # libref_array-0.1.5-32.el7.x86_64.rpm
  # libtirpc-0.2.4-0.16.el7.x86_64.rpm
  # libverto-libevent-0.2.5-4.el7.x86_64.rpm
  # nfs-utils-1.3.0-0.68.el7.x86_64.rpm
  # rpcbind-0.2.0-49.el7.x86_64.rpm

2.所有节点创建目录

test ! -d /nfs && mkdir -p /nfs

3.部署nfs服务端

# 添加防火墙规则
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd
firewall-cmd --permanent --add-port=2049/tcp
firewall-cmd --permanent --add-port=2049/udp
firewall-cmd --reload

# 配置NFS共享目录
vi /etc/exports
# 插入以下内容
/nfs 192.168.52.0/24(rw,no_root_squash,no_all_squash,sync)

# 重新加载NFS配置,启动服务,添加开机自启
exportfs -r && service rpcbind start && service nfs start && systemctl enable nfs-server

4.部署nfs客户端

# 查看共享目录列表。可跳过
showmount -e 192.168.52.141

# 挂载目录
mount -t nfs 192.168.52.141:/nfs /nfs

# 将挂载命令写入 /etc/fstab文件:开机时系统就自动挂载 NSF
vi /etc/fstab
# 追加插入以下内容
192.168.52.141:/nfs /nfs nfs defaults,vers=4.0

# 测试挂载目录:在/mynfs目录中创建文件,然后在NFS服务端的共享目录中查看文件是否存在,存在则代表共享成功。
# 卸载NFS目录
umount /nfs


NFS的套件结构

介绍

  • /etc/exports:NFS的主要配置文件。系统可能没有预设,所以这个文件不一定会存在,可能要使用 vi 主动的建立这个文件
  • /usr/sbin/exportfs:维护NFS共享资源的命令,可以利用这个命令重新共享 /etc/exports 变更的目录资源、将NFS Server分享的目录卸载或重新分享等等,这个指令是NFS系统里面相当重要的。
  • /usr/sbin/showmount:一个重要的NFS命令。exportfs是用在NFS Server端,而showmount则主要用在Client端。这个showmount可以用来察看NFS共享出来的目录资源。
  • /var/lib/nfs/*tab:在NFS服务器的登录档都放置到/var/lib/nfs/目录里面,在该目录下有两个比较重要的登录档,一个是etab ,主要记录了 NFS 所分享出来的目录的完整权限设定值;另一个xtab则记录曾经连结到此NFS主机的相关客户端资料。
  • /var/lib/nfs/rmtab:状态文件,列出了挂接导出文件的远程客户机清单。


/etc/exports配置文件的语法与参数

# 格式示例
# vi /etc/exports
/tmp         192.168.1.0/24(ro)   localhost(rw)   *.ev.ncku.edu.tw(ro,sync)
[分享目录]  [第一个主机(权限)]   [可用主机名]    [可用域名]

/etc/exports文件的内容非常简单,每一行由共享路径,客户端列表以及每个客户端后紧跟的访问选项构成:

[共享的目录] [主机名或IP(参数,参数)]

  • 参数是可选的,当不指定参数时,nfs将使用默认选项。默认的共享选项是 sync,ro,root_squash,no_delay
  • 当主机名或IP地址为空时,则代表共享给任意客户机提供服务。
  • 当将同一目录共享给多个客户机,但对每个客户机提供的权限不同时,可以这样:

    [共享的目录] [主机名1或IP1(参数1,参数2)] [主机名2或IP2(参数3,参数4)]

# NFS共享的常用参数(注意:参数之间只用逗号(,)分隔,中间不能有空格!):
    
ro        # read-only,只读访问权限
rw        # read-write,可读写的权限
sync    # 资料同步写入到内存与硬盘中
async    # 资料会先暂存于内存中,而非直接写入硬盘
secure    # NFS通过1024以下的安全TCP/IP端口发送
insecure    # NFS通过1024以上的端口发送
wdelay        # 如果多个客户要写入NFS目录,则归组写入(默认)
no_wdelay    # 如果多个客户要写入NFS目录,则立即写入,当使用async时,无需此设置。
hide        # 在NFS共享目录中不共享其子目录
no_hide        # 共享NFS目录的子目录
subtree_check        # 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check    # 和上面相对,不检查父目录权限
no_all_squash        # 保留共享文件的UID和GID(默认)
all_squash            # 不论登入 NFS 的使用者身份为何, 他的UID和GID映射匿名客户anonymous
                      # (通常也就是 nobody(nfsnobody)),适合公用目录。
root_squash            # 在登入NFS主机使用共享之目录的使用者如果是root时,那么这个使用者的权限将被映射成为匿名使用者
                      # 通常它的 UID 与 GID 都会变成nobody(nfsnobody) 那个系统帐号的身份的权限;(默认)  
no_root_squas        # 登入NFS主机使用共享目录的使用者,如果是root的话,那么对于这个共享的目录来说,它就具有root的权限!
                      # 这个项目『极不安全』,不建议使用!
anonuid=xxx            # 指定NFS服务器/etc/passwd文件中匿名客户的UID
anongid=xxx            # 指定NFS服务器/etc/passwd文件中匿名客户的GID


/etc/exports 中client的书写规则

  • 单个主机:可以用短名及完全限定名,或者用IP地址;

    例如student01、student01.flying.com.cn或者192.168.10.1都是合法的主机名。

  • Net-Group:可以列出/etc/netgroup文件中或NFS网组映射中定义的整组主机。网组名以@开头。
  • 通配符主机:.discuz.net *.*.comsenz.com
  • 掩码:192.168.1.0/255.255.255.0

实例

# vi /etc/exports

# 1.将/tmp共享出去给任意主机使用,所有人都可以读写、存取,同时让root写入的文件还是具有root的权限
  # 任何人都可以用 /tmp ,用通配字符(*)来处理主机名称,重点在no_root_squash
/tmp *(rw,no_root_squash)

# 2.同一目录针对不同范围开放不同权限
  # 将一个公共的目录/home/public公开出去,但是只有限定局域网内192.168.0.0/24这个网段可以读写,其他人则只能读取
  # 通配字符仅能用在主机名称的分辨上面,IP或网段就只能用192.168.0.0/24的状况,不可以使用192.168.0.*
/home/public 192.168.0.0/24(rw) *(ro)

# 3.仅给某个单一主机使用的目录设置
  # 将一个私人的目录 /home/test 开放给192.168.0.100这个Client端的机器来使用
/home/test    192.168.0.100(rw)         # 只要设定 IP 正确即可!

# 开放匿名登入的情况
  # 让*.linux.org网域的主机,登入我的NFS主机时,可以存取 /home/linux,但是其存资料的时候,使的UID与GID都变成40这个身份的使用者, 假设NFS服务器上的UID 40已经有设定妥当:
  # # 如果要开放匿名,那么重点是all_squash,并且要配合anonuid
/home/linux   *.linux.org(rw,all_squash,anonuid=40,anongid=40)


showmount:NFS的连接观察

showmount [-ae] [hostname|IP]
# 参数:
-a        # 这个参数是一般在NFS SERVER上使用,是用来显示已经mount上本机nfs目录的cline机器
-e        # 显示主机的 /etc/exports 所共享的目录。


exportfs:维护NFS共享资源

每次修改了配置文件后,可以用exportfs命令重新扫描/etc/exports文件,来使改动立刻生效。

exportfs [-aruv]
# 参数:
-a        # 全部挂载(或卸载)/etc/exports文件内的设置
-r        # 重新挂载/etc/exports里面的设置,此外,亦同步更新/etc/exports及/var/lib/nfs/xtab 的内容!
-u        # 卸载某一目录
-v        # 在export的时候,将分享的目录显示到屏幕上!

实例:

# 重新挂载一次 /etc/exports的设置
exportfs -arv
  # 输出:
  # exporting 192.168.0.100:/home/test
  # exporting 192.168.0.0/24:/home/public
  # exporting *.linux.org:/home/linux
  # exporting *:/home/public
  # exporting *:/tmp

# 全部卸载
exportfs -auv


/etc/fstab:开机自动挂载

etc/fstab文件的作用

磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载。

系统开机时会主动读取/etc/fstab这个文件中的内容,根据文件里面的配置挂载磁盘。这样只需要将磁盘的挂载信息写入这个文件中就不需要每次开机启动之后手动进行挂载了。

相关文章
|
5月前
|
存储 Kubernetes Docker
k8s持久化储存:pv,pvc和nfs等相关技术
k8s持久化储存:pv,pvc和nfs等相关技术
|
10月前
|
存储 Kubernetes 应用服务中间件
K8s不同node如何共享存储&&nfs 搭建(markdown版本)
K8s不同node如何共享存储&&nfs 搭建(markdown版本)
256 0
|
存储 负载均衡 应用服务中间件
【web项目】keepalived高可用+LVS负载均衡+nginx动静分离+nfs共享存储
【web项目】keepalived高可用+LVS负载均衡+nginx动静分离+nfs共享存储
223 0
【web项目】keepalived高可用+LVS负载均衡+nginx动静分离+nfs共享存储
|
存储 负载均衡 调度
|
存储 Java 应用服务中间件
|
存储 Kubernetes Docker
k8s持久化储存:pv,pvc和nfs等相关技术
k8s持久化储存:pv,pvc和nfs等相关技术
103 0
|
存储 网络协议 Linux
nfs共享存储部署
nfs部署 ​ NFS基于TCP/IP穿件的网络文件系统,NFS服务的实现依赖于RPC(远程调用服务)机制,才能完成远程到本地的映射过程,在centos 系统中,需要安装nfs-utils、rpcbind软件包来提供nfs共享服务,NFS用于共享发布和访问,而RPC用于过程调用。
198 0
nfs共享存储部署
|
Web App开发 存储 Docker
NFS PersistentVolume - 每天5分钟玩转 Docker 容器技术(151)
上一节我们介绍了 PV 和 PVC,本节通过 NFS 实践。
2549 0