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. ...
随机推荐
- 【常用技巧】标准模板库(STL)
[常用技巧]标准模板库(STL) 在前几个章节中我们已经使用了诸如队列.堆.堆栈.vector 等标准模板库中的模板,切身感受到了它给我们带来的极大便利.在本节中,我们还要介绍两种标准模板——stri ...
- [转帖]在VirtualBox Linux 7u2 中安装Oracle RAC 12.2.0.1.0
https://xiaoyu.blog.csdn.net/article/details/81980936
- Python实现字典树
字典树,又称单词查找树,Trie 树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用字符串 ...
- redis源码分析(三)--rdb持久化
Redis rdb持久化 Redis支持两种持久化方式:rdb与aof.rdb将一个节点上的内存数据序列化后存储到磁盘中,序列化的数据以尽可能节约空间的方式存储,并非完全的ascii表示.它的优点在于 ...
- 改變帳款性質別以利排序沖帳才不會有問題,把19->17,把12->17
Cxrp400 應收 LET ls_sql = SELECT xrccdocno,xrccseq,xrcc001,xrca035,xrca014, , xrca015,xrca006,xrcc008, ...
- kafka学习笔记(一)——概述
1.kafka是什么? 官方说明是: Kafka是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域. 提到了两个概念: 发布/订阅模式 消息队列 下边来理解一下这两个名词. 2. ...
- MOOC C#笔记(一):数据类型
C#笔记 基础知识 一个C#程序主要包括以下部分: 命名空间声明(Namespace declaration) 一个 class Class 方法 Class 属性 一个 Main 方法 语句(Sta ...
- java转换编码报错java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern
Exception in thread "main" java.lang.IllegalArgumentException: URLDecoder: Illegal hex cha ...
- mongoDB 分组并对分组结果筛选类似于SQL中的(group by xxx having ) 附带Java代码
今天需要做一个筛选程序,因为数据放在mongodb中,没写过分组的查询语句,查了一些资料,终于写出来了,分享给各位小伙伴 需求是 查询 学员 在2019-07-29之后未同步的数据(同一个学员需要2条 ...
- C# vb .net实现胶片效果滤镜
在.net中,如何简单快捷地实现Photoshop滤镜组中的胶片效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一步 ...