02-nfs存储服务(代码片段)

zachariah9426 zachariah9426     2022-12-05     620

关键词:

1、NFS存储服务概念

NFS 是 Network File System 的缩写及网络文件系统。 NFS 主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录,NFS客户端可以通过挂载的方式将NFS服务端共享数据的文件目录挂载到本地挂载点,这样对本地挂载点目录中的数据进行操作其实就是操作NFS服务端共享数据的文件目录

为什么要使用数据存储共享服务?

  1. 实现多台服务器之间数据共享
  2. 实现多台服务器之间数据一致

2、NFS应用场景

没有共享存储的场景:

1、A 用户上传图片经过负载均衡,负载均衡将上传请求调度至 WEB1 服务器上。
2、B 用户访问 A 用户上传的图片,此时 B 用户被负载均衡调度至 WEB2 上,因为 WEB2 上没有这张图片,所以 B用户无法看到 A 用户传的图片

技术图片

有共享存储的场景:

1.A 用户上传图片无论被负载均衡调度至 WEB1 还是 WEB2, 最终数据都被写入至共享存储
2.B 用户访问 A 用户上传图片时,无论调度至 WEB1 还是 WEB2,最终都会上共享存储访问对应的文件,这样就可以访问到资源

技术图片

3、NFS和RPC

NFS服务必须依赖于RPC(远程调用服务)才能工作。因为NFS支持的功能特别多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会用一个随机未被使用的端口来传输数据,因此,NFS的功能所对应的端口无法固定。所以客户端要准确的获得NFS服务所使用的端口就需要RPC服务。RPC最主要的功能就是记录每个NFS功能所对应的端口号,并且在NFS客户端请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,让客户端可以链接到正确的端口上去,从而实现数据传输。

NFS服务启动时会随机取用多个端口,并主动向RPC服务注册取用的相关端口信息,这样,RPC服务就可以知道每个端口所对应的NFS功能,然后RPC服务使用固定的端口号111来监听NFS客户端提交的请求,并将正确的NFS端口答应给NFS客户端,这样一来,就可以让NFS客户端与服务端进行数据传输了。

4、NFS服务端部署

4-1 安装软件

yum -y install nfs-utils rpcbind

4-2 编写配置文件

[root@nfs ~]# vim /etc/exports
# 格式: 01 02(03)
#01: 设置数据存储的目录 /data
#02: 设置网络一个白名单 (允许哪些主机连接到存储服务器进行数据存储)
#03: 配置存储目录的权限信息 存储目录一些功能
/data   172.16.1.0/24(rw,sync)
#注意IP地址和小括号之间没有空格

4-3 创建共享数据目录并授权

[root@nfs ~]# mkdir /data -p
root@nfs ~]# chown -R nfsnobody.nfsnobody /data

4-4 启动服务

  1. 启动rpc服务,开启111端口
  2. 启动nfs服务
  3. 实现nfs服务进程和端口号的注册
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl enable rpcbind
[root@nfs ~]# systemctl start nfs
[root@nfs ~]# systemctl enable nfs
# 检查nfs服务进程与端口注册信息
[root@nfs01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24

5、客户端挂载部署

客户端安装nfs服务十分简单,只需要安装nfs软件包即可

# 1.安装NFS服务软件
[root@web01 ~]# yum -y install nfs
# 2.实现远程挂载共享目录
[root@web01 ~]# mount -t nfs 172.16.1.31:/data  /mnt
# 3.测试数据是否正常写入
[root@web01 ~]# echo "testtesttest" > /mnt/test.txt
[root@web01 ~]# cat /mnt/test.txt
testtesttest
  • 实现开机自动挂载
# 1.利用rc.local
echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
# 2.利用fstab文件
vim /etc/fstab
172.16.1.31:/data   /mnt   nfs  defaults   0 0
  • 卸载
[root@web01 ~]# umount /mnt

6、NFS存储目录权限

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 的用户 UID,必须存在系统

6-1 验证ro权限

  • 服务端配置
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(ro,sync,all_squash)

[root@nfs ~]# systemctl reload nfs  
# restart:将所有连接会话都会直接断开
# reload:  只会将没有数据传输链接断开,重新建立连接,让用户访问感受更好
  • 客户端挂载
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@web01 ~]# df -h
Filesystem         Size  Used Avail Use% Mounted on
devtmpfs           471M     0  471M   0% /dev
tmpfs              487M     0  487M   0% /dev/shm
tmpfs              487M   15M  472M   3% /run
tmpfs              487M     0  487M   0% /sys/fs/cgroup
/dev/sda2           14G  8.6G  5.4G  62% /
/dev/sda1          2.8G  272M  2.6G  10% /boot
tmpfs               98M   12K   98M   1% /run/user/42
tmpfs               98M     0   98M   0% /run/user/0
172.16.1.31:/data   14G  6.8G  7.3G  49% /mnt
  • 读写测试
## root用户测试
# 写入测试,不能写入
[root@web01 ~]# echo "hello,hello" > /mnt/hello.txt
-bash: /mnt/hello.txt: Read-only file system
# 读取测试,可以正常读取数据
[root@web01 ~]# cat /mnt/test.txt 
hello,hello

## 普通用户测试
# 读取测试,可以正常读取数据
[python@web01 ~]$ cat /mnt/test.txt 
hello,hello
# 写入测试,不能写入
[python@web01 ~]$ echo "hello" >  /mnt/hello.txt
-bash: /mnt/hello.txt: Read-only file system

6-2 验证all_squash、anonuid、anongid 权限

  • 服务端配置:
[root@nfs ~]# cat /etc/exports 
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=1005,anongid=1005)
  • 创建用户并授权:
[root@nfs ~]# useradd -M -u 1005 www -s /sbin/nologin        
[root@nfs ~]# id www
uid=1005(www) gid=1005(www) groups=1005(www)
[root@nfs01 ~]# chown -R www:www /data/
[root@nfs ~]# ll /data/ -d
drwxr-xr-x. 5 www www 67 Jul  7 23:08 /data/
  • 重启NFS服务
[root@nfs ~]# systemctl reload nfs
[root@nfs ~]# systemctl reload nfs
  • 客户端操作:
# 1.创建www用户uid=1005 gid=1005
[root@web01 ~]# useradd -M -u 1005 www -s /sbin/nologin
# 写入数据测试
[root@web01 ~]# echo ‘hello‘ > /mnt/hello.txt
[root@web01 ~]# ll /mnt/hello.txt
-rw-r--r-- 1 www www 6 Jul  8 00:07 /mnt/hello.txt

# 读取数据测试
[root@web01 ~]# cat /mnt/hello.txt 
hello

7、查看NFS端口

[root@nfs ~]# rpcinfo  -p
   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
    100024    1   udp  57640  status
    100024    1   tcp  56096  status
    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  56967  nlockmgr
    100021    3   udp  56967  nlockmgr
    100021    4   udp  56967  nlockmgr
    100021    1   tcp  44817  nlockmgr
    100021    3   tcp  44817  nlockmgr
    100021    4   tcp  44817  nlockmgr

8、客户端mount命令参数

rw   	--- 实现挂载后挂载点目录可读可写  (默认)
ro   	--- 实现挂载后挂载点目录可读可写
suid 	--- 在共享目录中可以让setuid权限位生效  (默认)
nosuid 	--- 在共享目录中可以让setuid权限位失效   提供共享目录的安全性
exec 	--- 共享目录中的执行文件可以直接执行
noexec 	--- 共享目录中的执行文件可以无法直接执行 提供共享目录的安全性
auto 	--- 可以实现自动挂载     mount -a 实现加载fstab文件自动挂载
noauto 	--- 不可以实现自动挂载
nouser 	--- 禁止普通用户可以卸载挂载点
user 	--- 允许普通用户可以卸载挂载点


nfs(代码片段)

使用roles实现一键部署nfs环境准备主机名安装服务wanlanweb01nfs客户端10.0.0.7172.16.1.7web02nfs客户端10.0.0.8172.16.1.8nfsnfs服务端10.0.0.9172.16.1.9backupbackup服务端10.0.0.41172.16.1.41流程分析1.安装ansible2.优化ansible3.推送公钥4.开启防火墙5.开启8044 查看详情

mount(代码片段)

mount挂载环境准备主机名安装服务wanlanweb01nfs客户端10.0.0.7172.16.1.7web02nfs客户端10.0.0.8172.16.1.8nfsnfs服务端10.0.0.9172.16.1.9流程分析1.安装ansible2.优化ansible3.推送公钥4.开启防火墙5.开启80443873nfs等端口和服务白名单6.关闭selinux7.创建同... 查看详情

02—nfs服务器的原理和部署

...共享资源。在负载均衡的集群中,使用NFS协议来共享数据存储。NFS协议。2、限制在局域网使用:NFS没有用户认证机制,而且数据在网络上明文传输。(安全性差)3、NFS服务的实现依赖于RPC(远程过程调用)机制,以完成远程到本... 查看详情

02—nfs服务器的原理和部署

...共享资源。在负载均衡的集群中,使用NFS协议来共享数据存储。NFS协议。2、限制在局域网使用:NFS没有用户认证机制,而且数据在网络上明文传输。(安全性差)3、NFS服务的实现依赖于RPC(远程过程调用)机制,以完成远程到本... 查看详情

渗透测试-nfs安全(代码片段)

...自己的年龄都大]的网络文件系统,不过,相对比较稳定,由服务端和客户端组成[即C/S架构],服务端主要负责提供共享目录[一般为web的用户数据存放目录,专门用来存放用户上传的各类静态数据],而客户端则负责存取该共享目录中的数... 查看详情

powershellazure文件存储服务电源外壳设置(代码片段)

查看详情

linux(10):期中架构---nfs存储服务(代码片段)

1.共享存储服务概念:#NFS是NetworkFileSystem的缩写,中文意思是网络文件系统,#它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。2.NFS共享存储服务的应用:#将数据存储到一台服务器上,实现... 查看详情

openstack之部署块存储服务cinder(代码片段)

块存储服务简介部署环境在控制节点上安装和配置块设备存储服务(cinder)安装并配置一个存储节点图形化界面访问简介OpenStack块存储服务(cinder)为虚拟机添加持久的存储,块存储提供一个基础设施为了管理卷,... 查看详情

javascript从服务器脚本执行存储过程(代码片段)

查看详情

nfs共享存储服务的部署(代码片段)

NFS共享存储服务的部署NFS(NetworkFileSystem)即网络文件系统主要用于存储web服务器上用户上传的数据信息,图片?附件?头像?视频?音频NFS网络文件系统工作方式1、在nfs服务端创建共享目录2、通过mount?网路挂载,将NFS客户端本地目... 查看详情

openstack搭建企业私有云六:块存储服务(持续更新...)(代码片段)

块存储服务概览OpenStack块存储服务(cinder)为虚拟机添加持久的存储,块存储提供一个基础设施为了管理卷,以及和OpenStack计算服务交互,为实例提供卷。此服务也会激活管理卷的快照和卷类型的功能。?块存储服务(cinder)为实例... 查看详情

markdownwindows服务器2016性能卷测试-块存储(代码片段)

查看详情

⚡超容易的nfs存储服务搭建流程⚡(代码片段)

文章目录一、NFS存储服务概念介绍二、NFS服务软件的基本作用三、NFS服务存储数据原理四、服务端NFS服务部署流程🔅1.检查相应存储软件是否安装🔅2.编写配置文件🔅3.创建共享目录信息,目录授权🔅4.启动nfs相关... 查看详情

499本地存储(代码片段)

什么时候会用到本地存储?本地存储的作用?1.记住用户名和密码、或者自动登录2.未登录状态下,加入购物车的信息一般也先存储在本地,当登录后,把信息存储到服务器上(目的是多平台数据共享)3.对于非实时刷新数据,可... 查看详情

openstack安装文档(08)--块存储服务(代码片段)

块存储服务— 安装并配置控制节点:在控制节点上操作:  先决条件:1、数据库相关操作。#mysql-uroot-p***>CREATEDATABASEcinder;>GRANTALLPRIVILEGESONcinder.*TO‘cinder‘@‘localhost‘IDENTIFIEDBY‘CINDER_DBPASS‘;>GRANTALLPRIVIL 查看详情

可视化的对象存储服务(代码片段)

可视化的对象存储服务MinIO简介安装MinIOConsole使用客户端使用MinIOClient常用命令MinIOClient安装及配置MinIOClient常用操作兼容AWSS3MinIO简介MinIO是一款基于Go语言的高性能对象存储服务,它采用了ApacheLicensev2.0开源协议,非常适... 查看详情

openstack存储服务cinder介绍和控制节点部署(代码片段)

Cinder介绍    OpenStack块存储服务(cinder)为虚拟机添加持久的存储,块存储提供一个基础设施为了管理卷,以及和OpenStack计算服务交互,为实例提供卷。此服务也会激活管理卷的快照和卷类型的功能。块存储服务通常... 查看详情

nfs共享存储(代码片段)

目录环境准备NFS服务端NFS客户端httpd服务环境准备主机名wanIPlanIP角色web0110.0.0.7172.16.1.7nfs的客户端web0210.0.0.8172.16.1.8nfs的客户端nfs10.0.0.31172.16.1.31nfs的服务端NFS服务端NFS(NetworkFileSystem)和RPC(RemoteProcedureCall)部署NFS服务端,需要... 查看详情