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. ...
随机推荐
- Nginx打印json日志
1.修改配置,在http{}中添加 log_format access_json '{"@timestamp":"$time_iso8601",' '" ...
- Java泛型之通配符
原文点此链接 使用通配符的原因:Java中的数组是协变的,但是泛型不支持协变. 数组的协变 首先了解下什么是数组的协变,看下面的例子: Number[] nums = new Integer[10]; ...
- 最常见的Java面试题及答案汇总(三)
上一篇:最常见的Java面试题及答案汇总(二) 多线程 35. 并行和并发有什么区别? 并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔发生. 并行是在不同实体上的多个事 ...
- Java Web 应用概述
1.java Web 应用是建立在java语言基础上的企业web应用系统,oracle公司根据行业发展和便于开发制定了一套规范:Java EE规范,截至到当前(2016.3.11)是java EE7规 ...
- 【springcloud】Transaction rolled back because it has been marked as rollback-only
问题: 一个ajax请求,发生系统错误,错误内容:Transaction rolled back because it has been marked as rollback-only 原因是调用的s ...
- 【转帖】极简Docker和Kubernetes发展史
极简Docker和Kubernetes发展史 https://www.cnblogs.com/chenqionghe/p/11454248.html 2013年 Docker项目开源 2013年,以A ...
- DatabaseGeneratedOption
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 添加时 获取值 自增 默认值,,后期无法修改如:Id(AUTO_INCREMENT, ...
- Java集合框架(Java总结五)
”https://www.runoob.com/java/” 集合接口区别 List 接口存储一组不唯一,有序(插入顺序)的对象,允许有相同的元素. Set 接口存储一组唯一,无序的对象,不保存重复的 ...
- LInux因为缺失网关出现Name or service not known的解决方法
笔者使用的VMware和CentOS 7.0.在安装完镜像包后,便开始配置静态ip.命令如下 vi /etc/sysconfig/network-scripts/ifcfg-ens33 将BOOTPR ...
- C++ Primer第五版(中文带书签)
本想发github的(链接更稳定),但是大小超出限制了. 本文件为扫描件,还是在我找了大半天之后的结果.能找到的免费的貌似都是扫描件,在看了一百多页之后(我不喜欢文字不能选中的感觉),我果断买了纸质书 ...