CentOS7安装配置 NFS
一、NFS 简介
NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

1.1 nfs为什么需要RPC?
RPC(NFS服务需要依赖RPC服务,这个比较重要) 要想了解NFS,必然要提到RPC这个服务。 因为NFS支持的功能还是比较多的,并且不同的功能都会使用不同的程序来启动。每启动一个功能就会启用一些端口来传输数据,因此NFS的功能所对应的端口才没有固定,而是采用随机取用一些未被使用的小于1024的端口来作为传输之用。但如此一来又造成客户端要连接服务器时的困扰,因为客户端要知道服务器端的相关端口才能够联机,此时我们需要远程过程调用(RPC)的服务。 RPC最主要的功能就是指定每个NFS功能所对应的端口号,并且回报给客户端,让客户端可以连接到正确的端口上。当服务器在启动NFS时会随机选用数个端口,并主动地向RPC注册。因此RPC可以知道每个端口对应的NFS功能。然后RPC固定使用端口111来监听客户端的请求并回报客户端正确的端口,所以可以让NFS的启动更为容易。 注意,启动NFS之前,要先启动RPC服务;否则NFS无法向RPC注册。另外,重新启动RPC时原本注册的数据会不见,因此RPC重新启动后它管理的所有程序都需要重新启动以重新向RPC注册,比如NFS服务。
其实,我们可以简单的理解为:NFS当作RPC服务中的一种,同时将RPC服务当作NFS服务器与NFS客户端的中间接口人,就是说NFS客户端访问NFS服务器,必须经过RPC这个接口人,才可以去访问。
1.2 NFS的工作流程
1、由程序在NFS客户端发起存取文件的请求,客户端本地的RPC(rpcbind)服务会通过网络向NFS服务端的RPC的111端口发出文件存取功能的请求。`
2、NFS服务端的RPC找到对应已注册的NFS端口,通知客户端RPC服务。
3、客户端获取正确的端口,并与NFS daemon联机存取数据。
4、存取数据成功后,返回前端访问程序,完成一次存取操作。
二、NFS服务安装配置
安装rpcbind、nfs-utils
yum install rpcbind nfs-utils |
设置开机自启动
systemctl enable rpcbind |
查看当前服务状态(暂时不要启动nfs-server, 等下面固定好nfs服务端口后再启动,可以避免重启电脑)
[root@test002 ~]# systemctl status rpcbind |
看nfs服务向rpc注册的端口信息(当前nfs-server 没有启动,所有没有注册端口)
[root@test002 ~]# rpcinfo -p |
如果你此时启动nfs,可以发现nfs 随机注册的端口如下(暂时不要启动nfs-server, 等下面固定好nfs服务端口后再启动,可以避免重启电脑)
[root@test006 ~]# rpcinfo -p |
三、防火墙设置
NFS 的防火墙特别难设定规则,为什么呢?因为除了固定的port 111, 2049 之外, 还有很多不固定的端口是由rpc.mountd, rpc.rquotad 等服务所开启的。因此我们需要在/etc/sysconfig/nfs 指定特定的端口,这样每次启动nfs 时,相关服务启动的端口就会固定,如此一来, 我们就能够设定正确的防火墙了!
3.1 固定nfs服务端口
固定端口nfs 2049、portmapper111 ,另外3个服务端口可设置为mountd 892、rpc.statd 662、 nlockmgr 32803、32769
具体配置:
1.修改/etc/sysconfig/nfs文件,将下列内容的注释去掉,如果没有则添加:
# Port rpc.mountd should listen on. |
2. vim /etc/modprobe.d/lockd.conf
# Set the TCP port that the NFS lock manager should use. |
固定之后,启动nfs-server服务,后执行rpcinfo -p命令,查看nfs向rpc注册的端口
(如果你已经启动过nfs-server服务,则光重启NFS服务不能解决问题,需要重启电脑,才能将端口固定)
[root@test006 ~]# rpcinfo -p |
3.2 配置防火墙:
编辑firewalld中nfs服务的配置文件:
cp /usr/lib/firewalld/services/nfs.xml /etc/firewalld/services/
将刚才固定的那几个端口加入配置文件:
<?xml version="1.0" encoding="utf-8"?> |
开启nfs
[root@test006 nfs]# firewall-cmd --permanent --zone=public --add-service=nfs |
四、挂载
4.1 exports文件配置格式
NFS共享的目录 NFS客户端地址1(参数1,参数2,...) 客户端地址2(参数1,参数2,...) |
说明:
NFS共享目录:
要用绝对路径,可被nfsnobody读写。 |
NFS客户端地址:
指定IP: 192.168.0.1 |
参数:
| 参数值 | 内容说明 |
|---|---|
| rw ro | 该目录分享的权限是可擦写(read-write) 或只读(read-only),但最终能不能读写,还是与文件系统的rwx 及身份有关。 |
| sync async | sync 代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘! |
| no_root_squash root_squash | 客户端使用NFS 文件系统的账号若为 root 时,系统该如何判断这个账号的身份?预设的情况下,客户端root 的身份会由root_squash 的设定压缩成nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行! |
| all_squash | 不论登入NFS 的使用者身份为何, 他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) 啦! |
| anonuid anongid | anon 意指anonymous (匿名者) 前面关于*_squash 提到的匿名用户的UID 设定值,通常为nobody(nfsnobody),但是你可以自行设定这个UID 的值!当然,这个UID 必需要存在于你的/etc/passwd 当中!anonuid 指的是UID 而anongid 则是群组的GID 啰。 |
4.2 Server创建nfs共享
假如uid=1001 gid=1001是应用用户
mkdir -p /opt/nfsshare |
重新加载nfs配置
[root@test006 ~]# exportfs -rv |
客户端查看nfs服务器挂载情况
showmount -e 172.17.84.71 |
4.3 Client端挂载
挂载测试
mkdir -p /mnt/nfsshare |
写入fstab
[root@mysql002 ~]# tail -n 1 /etc/fstab |
因为ID不一致的问题 建议Client端新建相同uid和gid的用户
五、autofs实现自动挂载
参考:autofs
5.1 客户端安装autofs
yum install autofs -y |
5.2 挂载为本地的非一级目录
将192.168.0.103:/data目录挂载到192.168.0.104的/dir1/dir2目录
查看服务端共享
[root@mysql002 ~]# showmount -e 192.168.0.103 |
修改客户端vim /etc/auto.master,添加以下内容, 意思是系统访问dir1下面的文件的时候,去/etc/auto.nfs 去查找nfs的配置
/dir1 /etc/auto.nfs |
/etc/auto.nfs 内容如下,文件需要新建
[root@mysql002 dir2]# cat /etc/auto.nfs |
5.3 挂载位本地的一级目录
修改客户端vim /etc/auto.master,添加以下内容,
/- /etc/auto.nfs |
/etc/auto.nfs 内容如下,文件需要新建
/data -fstype=nfs 192.168.0.103:/data |
五、常见错误
1 . 在CentOS7服务器上配置NFS服务并共享出目录后,发现客户端不能Mount共享出的目录,错误提示:
[NFS mount Error] System Error: No route to host. |
关闭服务器端的防火墙后,问题解决,说明是防火墙端口的问题。
2 client端无法读写
- 确保nfs-server /etc/exports中开启了rw
- 确保client端映射到server端的用户对于server端的目录有读写权限(涉及到uid,gid是否被压缩)
- 确保client端挂载参数包含rw
参考
CHAPTER 8. NETWORK FILE SYSTEM (NFS)
https://www.howtoforge.com/tutorial/setting-up-an-nfs-server-and-client-on-centos-7/
sysctl.conf禁用ipv6导致nfs无法启动的问题解决
CentOS7安装配置 NFS的更多相关文章
- (转)Centos7安装配置NFS服务和挂载
Centos7安装配置NFS服务和挂载 原文:https://www.u22e.com/601.html NFS简介 NFS(Network File System)即网络文件系统,是FreeBSD支 ...
- centos7安装配置NFS文件共享存储
一,环境介绍 本实验使用了两台centos7虚拟机,其中 服务器:192.168.1.188 客户端:192.168.1.189 二,实验步骤 192.168.1.1 ...
- Centos7安装配置NFS服务和挂载
现在有3台服务器 s1(主),s2(从), s3(从)需要实现文件实时同步,我们可以安装Nfs服务端和客户端来实现! 一.安装 NFS 服务器所需的软件包: 1 yum install -y nf ...
- Centos7 安装配置NFS
一.安装 NFS 服务器所需的软件包 # yum install -y nfs-utils 二.编辑exports文件 # vim /etc/exports /data/disk1/video *(a ...
- centos7安装配置nfs
操作系统版本:3.10.0-123.el7.x86_64 192.168.137.11 nfs服务端 192.168.137.10 nfs客户端 一.安装nfs服务端(在192.168.137.1 ...
- Centos7安装配置gitlab
Centos7安装配置gitlab 这篇文字我会介绍在Centos7上安装gitlab,配置gitlab的smtp,并且创建项目demo. sudo yum install openssh-serve ...
- CentOS 7 安装配置 NFS
CentOS 7 安装配置 NFS 环境 nps 192.168.1.97 client 192.168.1.98 一.yum 安装 yum -y install nfs-utils rpcbind ...
- Centos7安装配置Apache+PHP+Mysql+phpmyadmin
转载自: Centos7安装配置Apache+PHP+Mysql+phpmyadmin 一.安装Apache yum install httpd 安装成功后,Apache操作命令: systemctl ...
- <转>CentOS 7 安装配置 NFS
CentOS 7 安装配置 NFS 环境 nps 192.168.1.97 client 192.168.1.98 一.yum 安装 yum -y install nfs-utils rpcbind ...
随机推荐
- java 不利用第三个变量的情况下将值互换
package com.zcj.eg001; public class VarChange { public static void main(String[] args) { int a = 10; ...
- UI测试框架
1. 从上到下共分成4层: 用例层 组件管理层 元素管理层 公共数据层 2. 用例层: 将每条用例使用参数化, 公共参数存储到"公共数据层", 中间参数通过组件层传递 3. ...
- python Mysql 多条件查询
做项目时,遇到一场景,前端至少传入一个参数,最多传入四个参数,根据单参数或者组合参数,从数据库筛选数据. 作为一个小白,思考之,从数学的角度,\(C_4^1 + C_4^2+C_4^3+C_4^4=1 ...
- 订阅者模式,公众号、B站、快手用了都说好!
大家好,今天和大家来聊一个新的设计模式--订阅者模式. 这个模式在我们的生活当中非常常见,可以说是几乎所有的媒体平台都用或多或少地用到了这个模式.比如公众号,我们来仔细梳理一下公众号这个平台当中的整个 ...
- 使用Jmeter对SHA1加密接口进行性能测试
性能测试过程中,有时候会遇到需要对信息头进行加密鉴权,下面我就来介绍如何针对SHA1加密鉴权开发性能测试脚本1.首先了解原理,就是需要对如下三个参数进行SHA1加密,(AppSecret + Nonc ...
- What is :: (double colon) in Python when subscripting sequences?
What is :: (double colon) in Python when subscripting sequences? 15 Extended Slices https://docs.pyt ...
- the code has to work especially hard to keep things in the same thread
django/asgiref: ASGI specification and utilities https://github.com/django/asgiref/
- Jackson学习
Jackson 是一个能够将java对象序列化为JSON字符串,也能够将JSON字符串反序列化为java对象的框架. 本文的所有内容都可以从 Java JSON Jackson Introductio ...
- 时间模块,os模块,sys模块
时间模块 和时间有关系的我们就要用到时间模块.在使用模块之前,应该首先导入这个模块. #常用方法 1.time.sleep(secs) (线程)推迟指定的时间运行.单位为秒. 2.time.time( ...
- 一次SQL盲注记录
背景:遇到一个sql注入,数字型布尔盲注+waf(直接超时那种),只要能出用户名,数据库名即可. 解决办法: 因为可以只要能出user(),database()即可,所以用不着SELECT,那么问题就 ...