Linux 笔记 - 第二十一章 配置 NFS 服务
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux 笔记 - 第二十一章 配置 NFS 服务,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7631字,纯文字阅读大概需要11分钟。
内容图文
![Linux 笔记 - 第二十一章 配置 NFS 服务](/upload/InfoBanner/zyjiaocheng/953/83a9d67ef5734437be474cf4c5a562b3.jpg)
一、前言
NFS(Network File System,网络文件系统),主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。NFS 客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将 NFS 服务器端共享的数据目录挂载到 NFS 客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS 服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的 NFS 服务器的目录。
NFS 网络文件系统很像 Windows 系统网络驱动器映射,这也和 Linux 系统里的 samba 服务类似。只不过一般情况下,Windows 网络共享服务或 samba 服务用于办公局域网共享,而互联网中小型网站集群架构后端常用 NFS 进行数据共享。
在企业集群架构的工作场景中,NFS 网络文件系统一般被用来存储共享视频,图片,附件等静态资源文件,通常网站用户上传的文件都会放到 NFS 共享里,例如:BBS 产品的图片,附件,头像(注意网站 BBS 程序不要放 NFS 共享里),然后前端所有的节点访问这些静态资源时都会读取 NFS 存储上的资源。NFS 是当前互联网系统架构中最常用的数据存储服务之一,前面说过,中小型网站公司应用频率更高,大公司或门户除了使用 NFS 外,还可能会使用更为复杂的分布式文件系统,比如 Moosefs(mfs),GlusterFS,FastDFS 等。
举例来说,A 用户上传图片到 Web1 服务器,然后让 B 用户访问这张图片,结果B用户访问的请求分发到了 Web2,因为 Web2 上没有这张图片,这就导致它无法看到 A 用户上传的图片,如果此时有一个共享存储,A 用户上传图片的请求无论是分发到 Web1 还是 Web2上,最终都会存储到共享存储上,而在 B 用户访问图片时,无论请求分发到 Web1 还是 Web2 上,最终也都会去共享存储上找,这样就可以访问到需要的资源了。这个共享存储的位置可以通过开源软件和商业硬件实现,互联网中小型集群架构会用普通 PC 服务器配置 NFS 网络文件系统实现。
企业生产集群没有 NFS 共享存储访问示意图,如下:
企业生产集群有 NFS 共享存储访问示意图,如下:
NFS 系统原理示意图,如下:
在 NFS 服务器端设置好一个共享目录 /test 后,其他有权限访问 NFS 服务器端的客户端都可以将这个共享目录 /test 挂载到客户端本地的某个挂载点(其实就是一个目录,这个挂载点目录可以自己随意指定),图中两个 NFS 客户端本地挂载点分别为 /mnt 和 /tmp,不同客户端的挂载点可以不相同。
客户端正确挂载完毕后,就可以通过 NFS 客户端的挂载点所在的 /mnt 或 /tmp 目录查看到 NFS 服务器端 /test 共享出来的目录下的所有数据。在客户端上查看时,NFS 服务端的 /test 目录就相当于客户端本地的磁盘分区或目录,几乎感觉不到使用上的区别,根据 NFS 服务器端授予的 NFS 共享权限以及共享目录的本地系统权限,只要在指定的 NFS 客户端上操作挂载 /mnt 或 /tmp 的目录,就可以将数据轻松的存取到 NFS 服务器端上的 /test 目录中了。
以下准备两台 Linux 主机用来配置 NFS 服务:
NFS 服务端:主机名为 masternode,IP 地址为 192.168.150.140
NFS 客户端:主机名为 backupnode,IP 地址为 192.168.150.139
二、服务端配置 NFS
在 CentOS 上使用 NFS 服务需要安装两个包(ufs-utils 和 rpcbind),不过当使用 yum 工具安装 nfs-utils 时会一同安装 rpcbind,如下:
[root@masternode ~]# yum install -y nfs-utils
首先编辑配置文件,该文件默认为空,如下:
[root@masternode ~]# vim /etc/exports /data/nfs_share 192.168.150.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
添加了一行内容,该行内容分为三部分。第一部分是本地要共享出去的目录,第二部分是允许访问的主机(可以是一个 IP,或者是一个 IP 网段),第三部分就是小括号里面的一些权限。注意:地址和权限之间没有空格。关于第三部分有以下权限:
rw:表示读/写。
ro:表示只读。
sync:同步模式,表示内存中的数据实时写入磁盘。
async:非同步模式,表示内存中的数据定期写入磁盘。
no_root_squash:当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的 root 管理员。
root_squash:当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的匿名用户。
all_squash:无论 NFS 客户端使用什么账号访问,均映射为 NFS 服务器的匿名用户。
anonuid/anongid:要和 root_squash 以及 all_squash 选项一同使用,用于指定使用 NFS 的用户被限定后的 uid 和 gid。
编辑好配置文件后创建好相关目录并启动 NFS 服务,还有将其设置为开机启动,如下:
[root@masternode ~]# systemctl start rpcbind [root@masternode ~]# systemctl start nfs [root@masternode ~]# systemctl enable rpcbind [root@masternode ~]# systemctl enable nfs Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
在启动 NFS 服务之前,需要先启动 rpcbind 服务。由于在使用 NFS 服务进行文件共享之前,需要使用 RPC(Remote Procedure Call,远程过程调用)服务将 NFS 服务器的 IP 地址和端口号等信息发送给客户端。
三、客户端挂载 NFS
同样,在客户端机器上也安装 nfs-utils 包,如下:
[root@backupnode ~]# yum install -y nfs-utils
在客户端挂载 NFS 之前,我们可以使用 showmount 查看服务端共享了哪些目录,如下:
[root@backupnode ~]# showmount -e 192.168.150.140 Export list for 192.168.150.140: /data/nfs_share 192.168.150.0/24
其中 -e 选项表示 --exports,Show the NFS server's export list
挂载服务端共享的目录,如下:
[root@backupnode ~]# mount 192.168.150.140:/data/nfs_share /data/nfs_archive mount.nfs: mount point /data/nfs_archive does not exist [root@backupnode ~]# mkdir -p /data/nfs_archive [root@backupnode ~]# mount 192.168.150.140:/data/nfs_share /data/nfs_archive [root@backupnode ~]# df -hT /data/nfs_archive Filesystem Type Size Used Avail Use% Mounted on 192.168.150.140:/data/nfs_share nfs4 18G 1.4G 17G 8% /data/nfs_archive
可以发现在挂载前,必须首先创建挂载点。
[root@backupnode ~]# ls -ld /data/nfs_archive drwxr-xr-x 2 root root 6 Sep 9 22:07 /data/nfs_archive [root@backupnode ~]# cd /data/nfs_archive [root@backupnode nfs_archive]# touch /data/nfs_archive/test1.txt touch: cannot touch ‘test1.txt’: Permission denied
在客户端的挂载点中创建文件,发现权限不足,这是因为虽然你在客户端使用的是 root 用户,但是挂载后在新的挂载点中相当于被限制为 uid 为 1000 的用户,而该用户是没有权限在 /data/nfs_archive 中创建文件的,该目录所有者为 root:root,权限为 rwxr-xr-x
所以,我们现在服务端修改共享点权限,如下:
[root@masternode ~]# chmod 777 /data/nfs_share [root@masternode ~]# ls -ld /data/nfs_share drwxrwxrwx 2 root root 6 Sep 9 22:07 /data/nfs_share
然后再在客户端中创建测试文件,如下:
[root@backupnode ~]# ls -ld /data/nfs_archive drwxrwxrwx 2 root root 6 Sep 9 22:07 /data/nfs_archive [root@backupnode nfs_archive]# touch /data/nfs_archive/test1.txt [root@backupnode nfs_archive]# ls -l total 0 -rw-r--r-- 1 1000 1000 0 Sep 9 23:00 test1.txt [root@backupnode nfs_archive]# useradd ryan [root@backupnode nfs_archive]# id ryan uid=1000(ryan) gid=1000(ryan) groups=1000(ryan) [root@backupnode nfs_archive]# ls -l total 0 -rw-r--r-- 1 ryan ryan 0 Sep 9 23:00 test1.txt
可以发现,当在服务端修改共享点的权限后,在客户端也会相应的自动更新对应挂载点的权限。
四、exportfs 命令
当在服务端改变 /etc/exports 配置文件后,使用 exportfs 命令挂载不需要重启 NFS 服务,如下:
[root@masternode ~]# vim /etc/exports /data/nfs_share 192.168.150.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000) /data/nfs_common_share *(rw,sync,no_root_squash) [root@backupnode nfs_archive]# showmount -e 192.168.150.140 Export list for 192.168.150.140: /data/nfs_share 192.168.150.0/24
在服务端添加新的共享点之后,在客户端使用 showmount 查询不到。
然后在服务端使用 exportfs 命令后再查看,如下:
[root@masternode ~]# exportfs -arv exporting 192.168.150.0/24:/data/nfs_share exporting *:/data/nfs_common_share [root@backupnode nfs_archive]# showmount -e 192.168.150.140 Export list for 192.168.150.140: /data/nfs_common_share * /data/nfs_share 192.168.150.0/24
其中 exportfs 常用选项有:
-a:表示全部挂载或者卸载。
-r:表示重新挂载。
-u:表示卸载某一个目录。
-v:表示显示共享的目录。
五、启动挂载和自动挂载
我们将挂载信息写入到 /etc/fstab 中,这样远程共享资源就会自动随服务器开机而进行挂载,加入如下信息:
[root@backupnode ~]# vim /etc/fstab 192.168.150.140:/data/nfs_share /data/nfs_archive nfs defaults,nolock 0 0
但是,将挂载信息填入/etc/fstab 之后,无论该资源是否使用,系统在每次开机时都会自动将其挂载,可以安装 autofs 自动挂载服务,该程序是在用户需要使用该文件系统时才去动态挂载,从而节约了网络资源和服务器的硬件资源。
内容总结
以上是互联网集市为您收集整理的Linux 笔记 - 第二十一章 配置 NFS 服务全部内容,希望文章能够帮你解决Linux 笔记 - 第二十一章 配置 NFS 服务所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。