NFS存储服务及部署

1 NFS简介

1.1 什么是NFS

NFS=Network File System=网络文件系统。
主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。
NFS客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录。
分布式文件系统:Moosefs(mfs)、GlusterFS、FastDFS(推荐)
NFS属于本地文件存储服务。
NFS主要用于存储web服务器上用户上传的数据信息,图片 附件 头像 视频 音频。

1.2 NFS存储服务价值

(1)可以实现数据统一共享存储
(2)节省架构服务运营成本

1.3 NFS存储服务的优缺点

优点:配置 安装简单
缺点:没有认证功能 ? ? ? ?分布式存储/ftp/samba
? ? ? ? ?无法支持高并发存储 ?日PV 2000万
? ?无法实现高可用 ? ? ?分布式存储/keepalived

1.4 实现Windows与linux文件数据共享

(1)FTP服务部署
(2)samba服务部署(可以让Windows与linux同时访问)

1.5 NFS网络文件共享系统由来


可以实现数据共享,数据统一一致,节省架构服务运营成本

1.6 NFS网络文件系统工作方式(存储原理)

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

1.7 NFS存储文件系统中两个重要服务

1 RPC服务? ? 2 NFS服务

1.7.1 RPC服务工作原理

因为NFS的各项功能都需要向RPC服务(rpcbind服务)注册,所以只有RPC服务才能获取到NFS服务的各项功能对应的端口号(port number)、PID、NFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务询问才能找到正确的端□。也就是说,NFS需要有RPC服务的协助才能成功对外提供服务。

1.7.2 NFS工作流程

1.7.3 NFS详细访问流程


当访问程序通过NFS客户端向NFS服务器存取文件时,其请求数据流程大致如下:
(1)首先用户访间网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这时NFS客户端(即执行程序的服务器)的RPC服务(rpcbind服务)就会通过网络向NFS服务器端的RPC服务(rpcbind服务)的111端口发出NFS文件存取功能的询间请求.
(2)NFS服务器端的RPC服务(rpcbind服务)找到对应的已注册的NFS端口后,通知NFS客户端的RPC服务。l
(3)此时NFS客户端获取到正确的端口,并与NFS daemon联机存取数据
(4)NFS客户端把数据存取成功后,返回给前端访间程序,告知用户存取结果,作为网站用户,就完成了一次存取操作。

2 NFS存储服务部署

RPC 远程过程调用程序。先启动PRC服务,然后在启动NFS。

2.1 服务端部署?

2.1.1 安装软件程序

yum install -y nfs-utils rpcbind
rpm -qa nfs-utils
rpm -qa rpcbind

2.1.2 编写配置文件

vim /etc/exports    #进入配置文件
/data 172.16.1.0/24(rw,sync)    #写入命令
# /data 可以进行共享存储目录
# 172.16.1.0/24(rw,sync)    允许存储数据网段信息(存储目录权限配置 存储数据方式配置)

sync=同步方式存储数据:用户有数据存储 ?---- ?存储服务器(磁盘中) ? ? ? ? ? 存储安全性高
async=异步方式存储数据:用户有数据存储 ?---- ?内存 --- 存储服务器(磁盘中) ?存储效率高

2.1.3 创建目录,对目录进行授权

mkdir /data
chown nfsnobody.nfsnobody /data

2.1.4 启动服务程序

systemctl start rpcbind
systemctl reload rpcbind    #重启rpcbind  平滑重启
systemctl enable rpcbind
systemctl start nfs
systemctl reload nfs            #重启nfs
systemctl enable nfs
### restart:将所有连接会话都会直接断开
### reload:  只会将没有数据传输链接断开,重新建立连接,让用户访问感受更好

2.2 客户端部署

2.2.1 安装相关软件

yum install -y nfs-utils

2.2.2 进行存储目录挂载

mount -t nfs  172.16.1.31:/data  /mnt

2.2.3 进行测试

客户端创建文件:
[[email protected] mnt]#ls
[[email protected] mnt]#touch test.txt
[[email protected] mnt]#ls
test.txt
服务端同步文件:
[[email protected] data]#ls
[[email protected] data]#ls
test.txt
服务端与客户端文件同步,则测试成功。

3 存储服务配置文件编写格式

3.1 配置文件exports参数

ro 只读配置,使存储目录权限位只读,使开发人员只能看
rw 读写权限
sync 同步存储数据
async 异步存储数据
all_squash 不论什么用户包括root,都映射为指定nfsnobody用户
no_all_squash? 对普通用户不做映射,无权限。root用户映射为nfsnobody
root_squash? 将root用户映射为指定nfsnobody用户,普通用户无权限
no_root_squash 将root用户不做映射,普通用户无权限
anonuid 指定uid,指定映射成什么用户
anongid 指定gid,指定映射成什么用户

在企业中,一般选用no_all_squash,root_squash。

3.1.1 all_squash映射实践

第一步:服务端修改服务配置文件

vim /etc/exports
/data  172.16.1.0/24(rw,sync,all_squash)
systemctl reload nfs 

第二步:客户端上传数据测试

[[email protected] mnt]#touch test.txt
[[email protected] mnt]#ll test.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jul 16 20:57 test.txt

3.1.2?no_all_squash映射实践

第一步:服务端修改服务配置文件

vim /etc/exports
/data  172.16.1.0/24(rw,sync,no_all_squash)
systemctl reload nfs 

第二步:客户端上传数据测试

[[email protected] mnt]# touch aaa.txt
[[email protected] mnt]# ll
-rw-rw-r-- 1     1017     1017  0 Jul 16 12:08 aaa.txt
### 用户传输数据身份没有变化,看用户uid信息

3.1.3?root_squash映射实践

第一步:服务端修改服务配置文件

vim /etc/exports
/data  172.16.1.0/24(rw,sync,root_squash)
systemctl reload nfs 

第二步:客户端上传数据测试

[[email protected] mnt]# touch bbb.txt
[ro[email protected] mnt]# ll
-rw-r--r-- 1 nfsnobody nfsnobody  0 Jul 16 12:19 bbb.txt
### root用户会映射为指定的nfsnobody用户

3.1.4?no_root_squash映射实践

第一步:服务端修改服务配置文件

vim /etc/exports
/data  172.16.1.0/24(rw,sync,no_root_squash)
systemctl reload nfs 

第二步:客户端上传数据测试

[[email protected] mnt]# touch ccc.txt
[[email protected] mnt]# ll
-rw-r--r-- 1 root      root       0 Jul 16 12:22 ccc.txt
### 将root用户不做映射

3.2 NFS客户端映射原理图

3.2.1 映射原理练习题

要求服务端:
/data/w ? 可读可写权限,所有用户都做映射, ?采用同步传输数据
/data/r ? 只能读取数据,只有root用户组映射,采用异步传输数据
要求客户端:
backup ? /data/w ?--挂载点 /data/w ? 可以存储数据 ?
web01 ? ?/data/r ?--挂载点 /data/r ? 不能存储数据
解决服务端:
(1)编写配置文件

vi /etc/exports
/data/w  172.16.1.0/24(rw,sync,all_squash)
/data/r  172.16.1.0/24(ro,async,root_squash)

(2)创建共享存储目录

web01:
mkdir /data/r
chown nfsnobody.nfsnobody /data/r
backup:
mkdir /data/w
chown nfsnobody.nfsnobody /data/w

(3)重启存储服务

systemctl reload nfs

解决客户端:
(1)创建挂载点目录

web01:mkdir /data/r
backup:mkdir /data/w

(2)进行挂载

web01
mount -t nfs 172.16.1.31:/data/r  /data/r
backup
mount -t nfs 172.16.1.31:/data/w  /data/w

(3)验证成功

[[email protected] r]#touch hh.txt
touch: cannot touch ‘hh.txt’: Read-only file system ### 只读权限,所以出现这种情况才是正常
[[email protected] w]#touch kk.txt        ### 读写权限,所以能创建
[[email protected] w]#ls
kk.txt

3.3 影响NFS服务存储权限原因

(1)服务端配置文件参数? ? exports文件里ro/rw参数
(2)服务端本身目录权限 ?
(3)服务端共享目录权限存在继承关系? ? 例如:/data,/data/r
? ?PS:建议设置共享目录时,不要存在父级与子级关系
(4)客户端挂载参数是否为 ro

4 NFS挂载常见问题

4.1 异常问题一

ls: cannot open directory .: Stale file handle ?(文件句柄错误)
出现原因: 当父级和子级目录同时进行挂载时,一旦父级目录取消共享,但是客户端还是处于挂载状态
问题解决: 将和父级目录有关的所有挂载点全部卸载,重新挂载

4.2 异常问题二

Cannot register service: RPC: Unable to receive;
出现原因: 服务启动顺序不正确
问题解决: 关闭所有服务,按顺序进行启动

4.3 异常问题三

出现挂载卡死情况
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
出现原因: 服务端开启防火墙,阻止客户端访问
问题解决: 关闭防火墙

4.4 异常问题四

服务端采用restart情况,会有一个90s延迟;造成客户端挂载好共享目录,90s内无法存储数据
出现原因:
cat /etc/sysconfig/nfs|grep 90
#NFSD_V4_GRACE=90
#NFSD_V4_LEASE=90

4.5 NFS存储排错原理

4.5.1 检查服务端服务是否启动

4.5.2 检查NFS服务是否向RPC服务注册

?未注册情况

[[email protected] ~]# rpcinfo -p localhost
program vers proto   port  service
100000    4   tcp    111  portmapper
100000    3   tcp    111  portmapper
100000    2   tcp    111  portmapper
100000    4   udp    111  portmapper
100000    3   udp    111  portmapper
100000    2   udp    111  portmapper

已经进行注册

[[email protected] ~]# rpcinfo -p localhost
program vers proto   port  service
100000    3   tcp    111  portmapper
100000    2   tcp    111  portmapper
100000    4   udp    111  portmapper
100000    3   udp    111  portmapper
100000    2   udp    111  portmapper
100005    1   udp  20048  mountd
100005    1   tcp  20048  mountd
100005    2   udp  20048  mountd
100005    2   tcp  20048  mountd
100005    3   udp  20048  mountd
100005    3   tcp  20048  mountd
100003    3   tcp   2049  nfs
100003    4   tcp   2049  nfs
100227    3   tcp   2049  nfs_acl
100003    3   udp   2049  nfs
100003    4   udp   2049  nfs
100227    3   udp   2049  nfs_acl
服务关闭在开启,有些端口会发生改变
100021    1   udp  60318  nlockmgr
100021    3   udp  60318  nlockmgr
100021    4   udp  60318  nlockmgr
100021    1   tcp  32828  nlockmgr
100021    3   tcp  32828  nlockmgr
100021    4   tcp  32828  nlockmgr

4.5.3 检查NFS服务是否存在共享目录

命令:showmount -e ?172.16.1.31? ? NFS没有安装,不能使用showmount

[[email protected] data]#showmount -e  172.16.1.31
Export list for 172.16.1.31:
/data/r 172.16.1.0/24
/data/w 172.16.1.0/24

4.6 NFS服务相关重要文件命令

/etc/exports    #配置文件
/var/lib/nfs/etab   #记录nfs服务默认配置参数信息
rpcinfo -p 172.16.1.31  #检查nfs是否向rpc注册
showmount -e 172.16.1.31    #检查nfs服务是否存在共享目录
/usr/sbin/exportfs  #可以平滑重启nfs服务,可以临时设置共享存储目录
平滑重启服务:exportfs -rv
临时创建目录:exportfs -o rw,sync  192.168.232.0/24:/data01

4.7 NFS服务客户端挂载

4.7.1 如何进行挂载

mount -t nfs 172.16.1.31:/data  /mnt

4.7.2 如何开机挂载

方法一:vi /etc/rc.local
mount -t nfs 172.16.1.31:/data  /mnt
方法二:vi /etc/fstab文件
172.16.1.31:/data   /mnt    nfs  defaults   0 0

centos6 ?
启动系统 -- 加载fstab -- 启动network网络服务 -- netfs(在系统启动完毕之后,再次加载fstab)
centos7
启动系统 -- 加载fstab -- 启动network网络服务 -- remote-fs.target(在系统启动完毕之后,再次加载fstab)

4.7.3 启动nfs服务客户端很慢

出现原因:在客户端上配置自动nfs服务挂载 ? --- 耦合度太高
解决问题:
(1)取消自动挂载
(2)启动顺序 先开启后端服务(nfs mysql backup 缓存服务)? 在开启前端服务(web服务 负载均衡服务)

4.7.4 挂载参数说明

rw 让挂载点目录具有可读可写权限? ?相反ro
suid=setuid 让挂载点目录中的文件特殊权限位生效 ? ?相反nosuid ?安全
dev 让挂载点目录存储设备文件保持属性不变
exec 让挂载点目录中的执行文件可以执行? ?相反noexec
auto(mount -a) 让挂载点目录实现快速自动挂载? 相反noauto
nouser 让普通用户是否可以卸载和挂载目录? ?相反user
async 数据异步存储概念,相反sync同步存储
noatime 访问文件时不更新文件的inode时间戳,高并发环境下,推荐显示应用该选项,可以提高系统I/O性能。性能优化
nodiratime 不更新文件系统上的directory inode时间戳,高并发环境,推荐显式应用该选项,可以提高系统I/O性能。性能优化
remount 在不进行卸载挂载点时,直接重新挂载修改挂载参数
文件系统只读:mount -o remount,rw / 解决
rsize=262144 设置一个缓存区 262144字节 ?设置大小和内存有关 ?
用户 (读取) --- web01 /data ?2M --- nfs /data 10M 压力大 ??
wsize=262144 设置一个缓冲区 262144字节
用户(存储) ?--- web01 /data 10M --- nfs /data 10M 压力大
hard? 当服务端处于关闭状态,客户端会处于一直挂载
soft? 当服务端处于关闭状态,不会一直挂载?
proto=tcp? 挂载协议

客户端重要文件:/proc/mounts ?--- 查看到mount挂载命令默认参数信息
强行进行卸载:umount -lf

4 补充:下载软件出现异常

(1)更新yum源
(2)利用rpm安装软件 获得rpcbind软件包

vim /etc/yum.conf
cachedir=/var/cache/yum/$basearch/$releasever   --- 下载软件保存路径
keepcache=1                                     --- 下载软件保留下来,不要被删除
rpm -ivh  rpcbind-0.2.0-47.el7.x86_64.rpm.rpm       --- 安装rpcbind

原文地址:https://www.cnblogs.com/basa/p/11217871.html

时间: 2024-10-07 09:28:27

NFS存储服务及部署的相关文章

NFS存储服务部署(上)

作者:George 归档:学习笔记 2018/1/24 NFS存储服务部署(上) 1.1 NFS服务介绍 1.1.1 什么是NFS? 1. NFS--Network File Systemt网络文件系统,叫称为网络共享文件系统 2. 作用:通过网络(一般为局域网)让不同主机系统之间可以共享文件 3. NFS服务和winodws系统的网络共享很相似,但NFS无法部署在windows上 4. windows与linux网络共享使用FTP.samba,它们都支持windows与linux之间共享 5.

部署NFS存储服务(下)

作者:Georgekai 归档:学习笔记 2018/1/25 部署NFS存储服务(下) 2.1 服务端有关的配置 2.1.1 练习题:共享不同的俩个目录,分别赋予读和写权限 服务端部署过程: 第一个里程:编写nfs配置文件 vim /etc/exports /data/w  172.16.1.0/24(rw,sync,all_squash) /data/r  172.16.1.0/24(ro,sync,all_squash) 注:服务端配置文件中,尽量避免继承权限的发生(因权限大的会生效) 第二

NFS存储服务(下)

第1章 回顾及练习 1.1  回顾总结 1.1.1 NFS存储服务是什么? 网络文件系统,实现数据共享统一一致 1.1.2 NFS工作原理 1. 什么是rpc服务 rpc服务类似于中介,nfs服务将启动的进程和端口信息,向rpc服务进行注册 nfs客户端向rpc服务发出请求,进行共享目录挂载,从而实现通过网络存储数据信息 2. 服务端做了三件事: ①. 首先启动rpc服务 ②. 其次启动nfs服务 ③. nfs服务向rpc服务进行注册,只注册一次(如果nfs服务进行了重启,会再次注册) 3. 客

NFS存储服务深度实践

第1章 NFS介绍 1.1 什么是NFS? NFS 是Network File System的缩写,中文意思是网络文件系统.它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下).从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录. NFS网络文件系统

NFS存储服务(上)

第1章 NFS介绍 1.1 什么是NFS NFS是Network File System的缩写,中文意思是网络文件系统 它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录 NFS==网络共享文件系统 互联网中小型网站集群架构后端常用NFS进行数据共享 如果大型网站,那么有可能还会用到更复杂的分布式文件系统,例如:Moosefs(mfs).GlusterFS.FastDFS 扩展:NFS网络文件系统很像Windows系统的网络共享,但是无法部署在windows系统上,NF

Linux(10):期中架构(2)--- NFS存储服务

1. 共享存储服务概念: # NFS是Network File System的缩写,中文意思是网络文件系统, # 它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录. 2. NFS共享存储服务的应用: # 将数据存储到一台服务器上,实现数据统一一致,共享访问 # NFS存储服务器中主要存储哪些信息:用户上传的图片 音频 视频 附件等信息 # NFS服务是分为服务端和客户端 # 存储服务器:NFS服务端 网站web服务器:NFS客户端 # 实现共享存储好处: 01. 实现

openstack-mitaka之块存储服务安装部署(controller)

1.以root用户登陆mysql,创建cinder数据库,并授权相应的权限 2.创建服务证书 1)创建cinder用户 2)将cinder用户添加到admin角色组 3)创建服务实体 3.创建块存储服务API端点 4.安装相关软件包 5.配置相关文件,编辑/etc/cinder/cinder.conf 1)[database]设置数据库连接 2)[DEFAULT]设置rabbitMQ消息队列.设置认证服务.设置my_ip 3)[oslo_messaging_rabbit]设置消息队列 4)[ke

LAMP集群项目五 部署NFS存储服务并设置WEB服务挂载

yum install nfs-utils portmap -y 在centos6.5中portmap已经改为rpcbind 先启动rpcbind /etc/init.d/rpcbind start /etc/init.d/nfs start mkdir /backup   创建一个共享目录\ 确保nfsnobody都是同一个uid : 65534 ,否则不是一个权限 grep  nfsnobody  /etc/passwd vim  /etc/exports /backup 192.168.1

NFS存储服务

一.NFS 原理图 二.NFS 原理描述 2.1:什么是NFS NFS中文名字:网络共享存储,就是通过网络共享目录,让网络上的其他服务器能够挂载访问共享目录的数据(NFS一般都是用来存放视频.附件.图片等静态数据的). NFS是通过网络来进行服务端和客户端数据传输的,那么只要是通过网络的就一定会有端口,那NFS的端口是什么呢?很失望的是NFS的端口是随机的,每次重启服务端口都会改变. 那么客户端是怎样知道服务端的端口的呢?其实NFS服务器是通过远程过程调用(RPC)协议/服务来实现的,也就是说R