NFS存储

基于CentOS 搭建NFS服务器

1. 什么是NFS?

NFS:Network File System的缩写,是一个基于网络的文件系统。NFS是一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。NFS数据传输基于RPC协议,RPC为Remote Procedure Call的简写。NFS的服务端和客户端本身无法直接通信,需要借助RPC来完成。

2. NFS应用场景

A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C分别去挂载A共享的数据目录,从而B和C访问到的数据和A上的一致。可以通过NFS实现服务器间实时的数据共享。

3. NFS原理图

nfs

NFS服务端启动NFS服务,NFS服务作为服务在系统中启动,但不监听任何端口,监听端口完成TCP/IP通信的工作由RPCbind服务产生的RPC协议实现。服务端借助RPC协议为客户端提供服务,该协议由RPC服务实现。RPC服务在Centos5及之前被称为portmap,6及以后的版本被称为RPCbind。

4. 原理细节

RPC服务监听端口,当通信时

  1. 先由客户端和服务端的RPC协议相互通信
  2. NFS服务端会在RPC协议中注册一个端口
  3. 服务端的NFS服务告诉本地RPC自己通信的端口
  4. 服务端RPC服务告诉客户端的RPC服务该通信端口
  5. 最后NFS客户端主机与服务端NFS的端口通信实现数据传输。

5. NFS服务端安装配置

1. 安装NFS服务端(10.1.11.58)

1. 查看系统是否已安装NFS

[root@k8s-node-58 ~] rpm -qa | grep nfs
[root@k8s-node-58 ~] rpm -qa | grep rpcbind

2. 安装NFS

[root@k8s-node-58 ~] yum -y install nfs-utils rpcbind

3. 服务端配置

在NFS服务端上创建共享目录/export/nfs并设置权限

[root@k8s-node-58 ~] mkdir -p /export/nfs
[root@k8s-node-58 ~] chmod 666 /export/nfs/

4. 编辑export文件

[root@k8s-node-58 ~] vim /etc/exports 
/export/nfs 10.1.11.58/24(rw,no_root_squash,no_all_squash,sync)

5 常见的参数有

1. ro/rw

该目录分享的权限是可擦写 (read-write) 或只读 (read-only),但最终能不能读写,还是与文件系统的 rwx 及身份有关。

2. sync/async

sync 代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘!

3. no_root_squash/root_squash

客户端使用 NFS 文件系统的账号若为 root 时,系统该如何判断这个账号的身份?预设的情况下,客户端 root 的身份会由 root_squash 的设定压缩成 nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行!

4. all_squash

不论登入 NFS 的使用者身份为何, 他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) 啦!

5. anonuid/anongid

anon 意指 anonymous (匿名者) 前面关于 *_squash 提到的匿名用户的 UID 设定值,通常为 nobody(nfsnobody),但是你可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于你的 /etc/passwd 当中! anonuid 指的是 UID 而 anongid 则是群组的 GID 啰。

6. 配置生效

[root@k8s-node-58 ~] exportfs -r

7. 启动rpcbind、nfs服务

[root@k8s-node-58 ~] service rpcbind start

8. 查看 RPC 服务的注册状况

[root@k8s-node-58 ~] 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
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100024    1   udp  56277  status
    100005    2   tcp  20048  mountd
    100024    1   tcp  52230  status
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  48359  nlockmgr
    100021    3   udp  48359  nlockmgr
    100021    4   udp  48359  nlockmgr
    100021    1   tcp  42394  nlockmgr
    100021    3   tcp  42394  nlockmgr
    100021    4   tcp  42394  nlockmgr
选项与参数:
-p :针对某 IP (未写则预设为本机) 显示出所有的 port 与 porgram 的信息;
-t :针对某主机的某支程序检查其 TCP 封包所在的软件版本;
-u :针对某主机的某支程序检查其 UDP 封包所在的软件版本;

在你的 NFS 服务器设定妥当之后,我们可以在 server 端先自我测试一下是否可以联机喔!就是利用 showmount 这个指令来查阅!

[root@k8s-node-58 ~] showmount -e localhost
Export list for localhost:
/data/nfs *
选项与参数:
-a :显示目前主机与客户端的 NFS 联机分享的状态;
-e :显示某部主机的 /etc/exports 所分享的目录数据。

2. 客户端配置(10.1.11.41)

1. 安装nfs-utils客户端

[root@k8s-node-58 ~] yum -y install nfs-utils

2. 创建挂载目录

[root@bogon ~] mkdir -p /data/nfs

3. 查看服务器抛出的共享目录信息

[root@k8s-node-58 ~] showmount -e 10.1.11.58
Export list for 10.1.11.58:
/export/nfs 10.1.11.58/24
[root@bogon ~] mount -t nfs 10.1.11.58:/export/nfs /data/nfs

6. 测试结果

[root@k8s-master ~] df -h
10.1.11.58:/data/nfs      17G   12G  5.8G  67% /data

7. 卸载

[root@k8s-node-58 ~]# umount /data
posted @ 2021-02-10 00:39  ttlv  阅读(363)  评论(0编辑  收藏  举报