Linux-存储服务之NFS
NFS介绍
NFS(Network File System)即网络文件系统,它最大的功能就是通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
NFS客户端一般是应用服务器(比如web,负载均衡等),可以通过挂载的方式将NFS服务器端共享的目录挂载到NFS客户端本地的目录下。
因为NFS支持的功能相当的多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS的功能所对应的端口才没有固定住,而是随机取用一些未被使用的小于1024的端口来作为传输之用。但如此一来又造成了客户端想要连上服务器时的困扰,因为客户端得要知道服务器端的相关端口才能够进行连接。
因此就需要远程过程调用(RPC)的服务,RPC最主要的功能就是在指定每个NFS功能所对应的port number,并且回报给客户端,让客户端可以连接正确的端口上去。那RPC又是如何知道每个NFS的端口呢?这是因为当服务器在启动NFS时会随机取用数个端口,并主动的想RPC注册,因此RPC可以知道每个端口对应的NFS功能,然后RPC又是固定使用port 111来监听客户端的需求并回报给客户端正确的端口,所以当然可以让NFS的启动更为轻松愉快了。
NFS在文件传送过程中依赖与RPC(远程过程调用)协议。NFS本身是没有提供信息传送的协议和功能的,但是能够用过网络进行图片,视频,附件等分享功能。只要用到NFS的地方都需要启动RPC服务,不论是NFS的服务端还是客户端。
NFS和RPC的关系:可以理解为NFS是一个网络文件系统(比喻为租房的房主),而RPC是负责信息的传输(中介),客户端(相当于租房的租客)。
NFS网络文件系统存在的意义
实现数据共享,数据保持一致。如图所示:

NFS网络文件系统工作方式
1、在nfs服务器端创建共享目录
2、通过mount网络挂载,将NFS服务端共享目录挂载到NFS客户端本地目录
3、NFS客户端在挂载目录上创建、删除、查看数据等操作,等价于在服务端进行的创建、删除、查看数据等操作。

如上图所示,在NFS服务器端设置一个共享目录/web后,其他有权限访问NFS服务器端的客户端都可以将这个共享目录/web挂载到客户端本地的某个挂载点(其实就是一个目录,这个挂载点可以自己随意指定),不同的客户端的挂载点可以不相同。
客户端正确挂载完毕后,就可以通过NFS客户端的挂载点所在的/opt/www目录查看到NFS服务端/web共享出来的目录下的所有数据。在客户端查看时,NFS服务端的/web目录就相当于客户端本地的磁盘分区或目录,几乎感觉不到使用上的区别,根据NFS服务器端授予的NFS共享权限以及共享目录的本地系统权限,只要在指定的NFS客户端操作挂载的/opt/www目录,就可以将数据轻松的存取到NFS服务器端上的/web目录中了。
NFS工作流程

RPC服务工作原理

NFS部署示例
| 操作系统 | 角色 | IP | HOST |
|---|---|---|---|
| CentOS release 7.4 | NFS Server | 192.168.1.31 | nfs-server.com |
| CentOS release 7.4 | NFS Client1 (web server1) | 192.168.1.32 | nfs-client1.com |
| CentOS release 7.4 | NFS Client2 (web server2) | 192.168.1.33 | nfs-client2.com |
说明:
这里NFS客户端是web服务器,站点目录挂载NFS服务端。
实验环境关闭防火墙、selinux、时间同步等
具体操作步骤
服务端安装配置
1)检查是否安装NFS、RPC服务
[root@nfs-server ~]# rpm -aq |egrep "nfs-utils|rpcbind"
rpcbind-0.2.-.el7.x86_64
nfs-utils-1.3.-0.48.el7.x86_64 # 如果没有安装则进行安装
# yum -y install nfs-utils rpcbind
2)启动rpc和nfs服务
[root@nfs-server ~]# systemctl start rpcbind
[root@nfs-server ~]# systemctl enable rpcbind
[root@nfs-server ~]# systemctl start nfs
3)可以通过rpcinfo -p localhost可以查看到绑定了nfs
[root@nfs-server ~]# rpcinfo -p localhost
program vers proto port service
tcp portmapper
tcp portmapper
tcp portmapper
udp portmapper
udp portmapper
udp portmapper
udp mountd
tcp mountd
udp mountd
tcp mountd
udp mountd
tcp mountd
udp status
tcp status
tcp nfs
tcp nfs
tcp nfs_acl
udp nfs
udp nfs
udp nfs_acl
udp nlockmgr
udp nlockmgr
udp nlockmgr
tcp nlockmgr
tcp nlockmgr
tcp nlockmgr
4)配置共享目录并重启nfs
[root@nfs-server ~]# mkdir /web
[root@nfs-server ~]# vim /etc/exports
/web 192.168.1.0/(rw,sync,no_root_squash) #不压制root(当client端使用root挂载时,也有root权限)
[root@nfs-server ~]# systemctl restart nfs
[root@nfs-server ~]# exportfs -v
/web 192.168.1.0/(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
客户端挂载测试
1)创建挂载目录并进行挂载
[root@nfs-client1 ~]# mkdir /opt/www
[root@nfs-client1 ~]# showmount -e 192.168.1.31 #查看服务器共享目录
Export list for 192.168.1.31:
/web 192.168.1.0/
[root@nfs-client1 ~]# mount -t nfs 192.168.1.31:/web /opt/www/
[root@nfs-client1 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 20G .6G 16G % /
devtmpfs 473M 473M % /dev
tmpfs 489M 489M % /dev/shm
tmpfs 489M 14M 475M % /run
tmpfs 489M 489M % /sys/fs/cgroup
/dev/sda1 497M 154M 344M % /boot
tmpfs 98M 98M % /run/user/
192.168.1.31:/web 20G .6G 16G % /opt/www
[root@nfs-client1 ~]#
[root@nfs-client1 ~]# vim /etc/fstab #开机自动挂载
192.168.1.31:/web /opt/www nfs defaults
2)在client1上的/opt/www创建一个测试文件
[root@nfs-client1 ~]# echo "client1 create test file" >> /opt/www/client1.txt
3)回到nfs上进行查看
[root@nfs-server ~]# ll /web/
总用量
-rw-r--r-- root root 8月 : client1.txt
4)安装nginx并配置站点目录为/opt/www
[root@nfs-client1 ~]# yum -y install nginx
[root@nfs-client1 ~]# vim /etc/nginx/nginx.conf
server {
listen default_server;
listen [::]: default_server;
server_name _;
root /opt/www;
...
[root@nfs-client1 ~]# systemctl start nginx
上面的步骤同样在client2上面操作。
在nfs服务端创建站点首页,访问client客户端测试
[root@nfs-server ~]# ll /web/
总用量
-rw-r--r-- root root 8月 : client1.txt
-rw-r--r-- root root 8月 : client2.txt [root@nfs-server ~]# echo "<h1>NFS server</h1>" >> /web/index.html #nfs服务端共享目录创建首页文件
[root@nfs-server ~]# curl 192.168.1.32
<h1>NFS server</h1>
[root@nfs-server ~]#
[root@nfs-server ~]# curl 192.168.1.33
<h1>NFS server</h1> [root@nfs-client1 ~]# ll /opt/www/ #nfs客户端1上查看
总用量
-rw-r--r-- root root 8月 : client1.txt
-rw-r--r-- root root 8月 : client2.txt
-rw-r--r-- root root 8月 : index.html [root@nfs-client2 ~]# ll /opt/www/ #nfs客户端2上查看
总用量
-rw-r--r-- root root 8月 : client1.txt
-rw-r--r-- root root 8月 : client2.txt
-rw-r--r-- root root 8月 : index.html
通过测试可以看出,客户端挂载后,就完全相当于自己的一个目录或者文件,在负载均衡架构中一般通过这种方式做共享存储。
NFS配置参数说明
nfs共享参数及作用
通过 man exports可以查看帮助手册
| 共享参数 | 作用 |
|---|---|
| rw* | 读写权限 |
| ro | 只读权限 |
| root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用) |
| no_root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(常用) |
| all_squash | 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用) |
| no_all_squash | 无论NFS客户端使用什么账户访问,都不进行压缩 |
| sync* | 同时将数据写入到内存与硬盘中,保证不丢失数据 |
| async | 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 |
| anonuid* | 配置all_squash使用,指定NFS的用户UID,必须存在系统 |
| anongid* | 配置all_squash使用,指定NFS的用户GID,必须存在系统 |
配置实例说明
[root@nfs-server ~]# cat /etc/exports
#/web 192.168.1.0/(rw,sync,no_root_squash) #不压制root(当client端使用root挂载时,也有root权限)
/web 192.168.1.32(rw,sync,no_root_squash) 192.168.1.33(rw,sync,all_squash,anonuid=,anongid=)
#[共享目录] [客户端地址1(权限)] [客户端地址2(权限)]
、共享目录:每一行最前面是共享出来的目录,比如上面我要共享/web目录,那么此选项就可以直接写/web目录,这个目录可以依照不同的权限共享给不同的目录。
、客户端地址:客户端地址能够设置一个网络,也可以是单个主机。参数:如上面的读写权限rw,同步更新sync等待。 、客户端地址可以使用完整的IP或者网络号,例如192.168.1.33或192.168.1./
、同样可以使用主机名,但是这个主机名必须要在/etc/hosts中存在,或者可以通过DNS找到才行。
Linux-存储服务之NFS的更多相关文章
- Linux网络服务12——NFS共享服务
Linux网络服务12--NFS共享服务 一.NFS简介 端口号:TCP.UDP 111端口 NFS(Network File System)网络文件系统,是一种基于TCP/IP传输的网络文件系统协议 ...
- Linux文件共享服务之NFS
NFS(Network File System) 网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可 ...
- NFS存储服务
NFS存储服务笔记======================================================================NFS共享存储是什么: 英文名-Netwo ...
- NFS存储服务及部署
1 NFS简介 1.1 什么是NFS NFS=Network File System=网络文件系统.主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户端(一般为应用服 ...
- Linux文件共享服务之Samba
目录 Samba Samba的配置 Samba Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ...
- Linux文件共享服务之Vsftp
目录 FTP Vsftp服务的搭建 ftp.sftp.vsftp.vsftpd的区别 FTP FTP的工作原理: FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道.控制通道是和FTP服务器进 ...
- Linux NFS存储服务部署
什么是NFS 中文意思是网络文件系统,主要功能是通过网络(一般是局域网)让不同主机之间可以共享文件或目录 NFS属于本地文件存储服务 缺点1: 1 2 3 4 5 6 7 windows上无法使用 ...
- Linux(10):期中架构(2)--- NFS存储服务 & 实时同步
1. 共享存储服务概念: # NFS是Network File System的缩写,中文意思是网络文件系统, # 它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录. 2. ...
- 使用URLOS在linux系统中极速部署NFS共享存储服务
如何在linux系统里搭建NFS服务?其实我们只需要安装一个URLOS面板,然后就能在3分钟内将NFS服务部署完成.近日,URLOS在应用市场中上架了一款NFS应用,它可以让我们的节点主机在3分钟内极 ...
- linux服务之nfs
开发语言:rpc编程环境 服务器端:在linux平台下部署 客户端:一般是cli界面下的mount命令 相关包:rpcbind,nfs-utils 背景 http://nfs.sourceforge. ...
随机推荐
- Nexus上传npm包
1.创建npm仓库 私服仓库npm-hosted 代理仓库npm-proxy npm-group 创建成功 在工程的根目录下创建文件 .npmrc registry=http://xxx:8081/n ...
- ros 源码安装
版本lunar, 系统版本debian 9.8 参考: http://wiki.ros.org/lunar/Installation/Source 1. Installing bootstrap de ...
- php异常处理小总结
2019年8月23日10:56:31 php很多开发不习惯使用异常处理,因为web开发,重在于快速开发,易用性,高性能,不强调程序健壮性 php的异常使用其实不是太完善,易用性也差点,当然这个对比其他 ...
- SecureCRT-登录unix/linux服务器主机的软件
百度百科说辞: SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件. SecureCRT支持SSH,同时支持Te ...
- WINGIDE 激活失败
WINGIDE 7.1 激活失败 WINGIDE 7.0 激活成功 1 下载 https://www.7down.com/soft/94270.html 2 安装 3 激活 step 1: st ...
- Java开发笔记(一百四十四)实现FXML对应的控制器
前面介绍了如何通过fxml文件编排界面布局,可是光有静态界面根本没法处理业务,必须另外书写业务逻辑的代码,方能响应各按钮的单击事件,并将业务结果即使呈现到界面上.显然,fxml内部写不了Java代码, ...
- BJFU-216-基于链式存储结构的图书信息表的修改
#include<stdio.h> #include<stdlib.h> #define MAX 100 typedef struct Book{ double no; cha ...
- Delphi快递鸟【支持快递查询和单号识别】
作者QQ:(648437169) 点击下载➨Delphi快递鸟 [delphi快递鸟]支持快递查询.单号识别.
- day09——初识函数
day09 函数的定义 # len() s = 'alexdsb' count = 0 for i in s: count += 1 print(count) s = [1,2,23,3,4,5,6] ...
- C#类型成员:构造函数
一.构造函数 构造函数是类的特殊方法,它永远不会返回值(即使是void),并且方法名和类名相同,同样支持重载.在使用new关键字创建对象时构造函数被间接调用,为对象初始化字段和属性的值. 无参构造函数 ...