您的位置:首页 > 数据库 > MySQL

NFS服务搭建与配置(NFS介绍、NFS服务端安装配置、NFS配置选项)

2018-08-25 23:46 916 查看

NFS介绍

NFS百度百科

一、NFS服务简介

NFS 就是 Network FileSystem 的缩写,最早之前是由sun 这家公司所发展出来的。 它最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享个别的档案 (share files)。所以,你也可以简单的将他看做是一个文件服务器 (file server) 呢!这个 NFS 服务器可以让你的 PC 来将网络远程的 NFS 服务器分享的目录,挂载到本地端的机器当中, 在本地端的机器看起来,那个远程主机的目录就好像是自己的一个磁盘分区槽一样 (partition)!使用上面相当的便利!

因为 NFS 支持的功能相当的多,而不同的功能都会使用不同的程序来启动, 每启动一个功能就会启用一些端口来传输数据,因此, NFS 的功能所对应的端口才没有固定住, 而是随机取用一些未被使用的小于 1024 的埠口来作为传输之用。但如此一来又造成客户端想要连上服务器时的困扰, 因为客户端得要知道服务器端的相关埠口才能够联机吧!

此时我们就得需要远程过程调用 (RPC) 的服务啦!RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的埠口上去。 那 RPC 又是如何知道每个 NFS 的埠口呢?这是因为当服务器在启动 NFS 时会随机取用数个埠口,并主动的向 RPC 注册,因此 RPC 可以知道每个埠口对应的 NFS 功能,然后 RPC 又是固定使用 port 111 来监听客户端的需求并回报客户端正确的埠口, 所以当然可以让 NFS 的启动更为轻松愉快了!

所以你要注意,要启动 NFS 之前,RPC 就要先启动了,否则 NFS 会无法向 RPC 注册。 另外,RPC 若重新启动时,原本注册的数据会不见,因此 RPC 重新启动后,它管理的所有服务都需要重新启动来重新向 RPC 注册。

当客户端有 NFS 档案存取需求时,他会如何向服务器端要求数据呢?

客户端会向服务器端的 RPC (port 111) 发出 NFS 档案存取功能的询问要求;

服务器端找到对应的已注册的 NFS daemon 埠口后,会回报给客户端;

客户端了解正确的埠口后,就可以直接与 NFS daemon 来联机。

由于 NFS 的各项功能都必须要向 RPC 来注册,如此一来 RPC 才能了解 NFS 这个服务的各项功能之 port number, PID, NFS 在服务器所监听的 IP 等等,而客户端才能够透过 RPC 的询问找到正确对应的埠口。 也就是说,NFS 必须要有 RPC 存在时才能成功的提供服务,因此我们称 NFS 为 RPC server 的一种。事实上,有很多这样的服务器都是向 RPC 注册的,举例来说,NIS (Network Information Service) 也是 RPC server 的一种呢

应用场景:

A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C分别去挂载A共享的数据目录,从而B和C访问到的数据和A上的一致

应用场景图示:



NFS原理图



NFS服务端安装配置

首先我们准备工作:两台Linux虚拟机,一台做客户端,另外一台做服务端;此教程我们使用Yolks2机器做服务端,Yokls1机器做客户端;

Yolks2机器ip : 192.168.248.129

Yolks1机器ip : 192.168.248.128

1.两台机器都yum安装rpcbind

yum install -y nfs-utils rpcbind

2.Yolks2机器创建共享的目录并且设置对应的权限:此处我们定为**/home/nfstestdir**

mkdir /home/nfstestdir #创建分享目录
chmod 777 /home/nfstestdir #设置目录权限

3.Yolks2机器编辑文件**/etc/exports**加入以下配置:

/home/nfstestdir  192.168.248.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)

文件中小括号后边的权限对应关系如下:

权限作用
rw读写
ro只读
sync同步模式,内存数据实时写入磁盘
async非同步模式
no_root_squash客户端挂载NFS共享目录后,root用户不受约束,权限很大
root_squash与上面选项相对,客户端上的root用户收到约束,被限定成某个普通用户
all_squash客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户
anonuid/anongid和上面几个选项搭配使用,定义被限定用户的uid和gid
4.查看监听端口:111

[root@yolks2 ~]# netstat -lntp|grep 111
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      513/rpcbind
tcp6       0      0 :::111                  :::*                    LISTEN      513/rpcbind

一般安装rpcbind之后就会启动服务,111端口也会存在,如果不存在则使用下面的命令启动,或者重启Liunx机器再次查看即可;

5.可能会用到的命令

systemctl start rpcbind #启动rpcbind
systemctl start nfs #启动
systemctl enable rpcbind #设置rpcbind开机启动
systemctl enable nfs #设置nfs开机启动

6.Yolks1客户端查看在nfs服务器端是否有权限

[root@yolks-001 ~]# showmount -e 192.168.248.129
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host) #提示网络不通

为了测似,我们暂时先关掉防火墙和selinux

systemctl stop firewalld
setenforce 0

再次尝试检查权限:已经正常列出目录

[root@yolks-001 ~]# showmount -e 192.168.248.129
Export list for 192.168.248.129:
/home/nfstestdir 192.168.248.0/24

ps:如果还不可以,尝试检查开启rpcbind和nfs

7.客户端将nfs共享目录挂载到本地机器

mount -t nfs 192.168.248.129:/home/nfstestdir /mnt/

查看是否挂载成功:最后一行已经显示出来远程目录

[root@yolks-001 ~]# df -h
文件系统                          容量  已用  可用 已用% 挂载点
/dev/sda3                          18G  4.3G   14G   24% /
devtmpfs                          901M     0  901M    0% /dev
tmpfs                             911M     0  911M    0% /dev/shm
tmpfs                             911M  8.7M  903M    1% /run
tmpfs                             911M     0  911M    0% /sys/fs/cgroup
/dev/sda1                         197M  158M   39M   81% /boot
tmpfs                             183M     0  183M    0% /run/user/0
192.168.248.129:/home/nfstestdir   18G  3.6G   15G   21% /mnt

8.客户端机器在本地创建文件进行测试

[root@yolks-001 ~]# cd /mnt/
[root@yolks-001 mnt]# ls
[root@yolks-001 mnt]# echo "this is test nfs file" >> yolks.file
[root@yolks-001 mnt]# ls -lh
总用量 4.0K
-rw-r--r-- 1 yolks yolks 22 8月  25 23:39 yolks.file

9.服务器端/home/nfstestdir进行查看是否有客户端新建的文件

[root@yolks2 ~]# ls -lh /home/nfstestdir/
总用量 4.0K
-rw-r--r-- 1 mysql mysql 22 8月  25 23:39 yolks.file

10.两边看到自己的属主:属组都为自己

原因是挂载到目录,无论哪个用户操作的文件,最后显示都为1000,即以机器上id为1000的属主、属组显示

起作用的代码anonuid、anongid

192.168.248.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)

Yolks2机器查看mysql用户

[root@yolks2 ~]# id mysql
uid=1000(mysql) gid=1000(mysql) 组=1000(mysql)

Yolks1机器客户端查看yolks用户

[root@yolks-001 mnt]# id yolks
uid=1000(yolks) gid=1000(yolks) 组=1000(yolks)

参考资料

参考青衫lys博客地址:Linux下NFS服务器的搭建与配置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息