day35 nfs共享服务器的学习

news/2025/3/22 22:41:40/文章来源:https://www.cnblogs.com/yangzaikai/p/18787252

day35 nfs共享服务器的学习

1.企业集群为什么要共享服务器

没有共享服务器

先看一下没有共享服务器的问题

A用户上传啦图片到web01的服务器,然后B用户访问但是负载均衡服务器把请求分发到了web02的服务器上,导致B用户查看不了图片。

配置啦共享服务器

无论是用户把图片发送给web01还是其他,最终都会存储在共享服务器中,用户无论是访问服务器A,B.C其最终都会放送到共享服务器中。
这样就能够访问到该资源。

2.什么是NFS

3.学习NFS的任务的背景


4.NFS的框架图

NFS程序运行以后,产生以下的组件

  • RPC (remote producedures Call protocal):远程过程协议,他是一种通过网络从远程计算机上请求的服务,不需要了解底层网络技术的协议
  • rpcblind 负载NFS的数据传输,远程的过程的调用 tcp/udp 端口111
  • nfs-utils 控制共享的服务那些的文件,权限的管理

5.什么是RPc

远程过程调用,相对应的就是,本地过程调用。
rpc一般是开发中的网络编程知识1.于超老师本地写好了一个代码文件,如hello-world.py ,本地运行该程序,这就是本地过程调用(执行程序,拿到结果)2.远程过程调用
于超老师在将代码文件放在远程服务器上,在自己笔记本上,远程调用、执行该代码文件,执行结果会通过网络把数据发回来,这就是远程过程调用

简单来说:远程调用

同样是洗衣服,一个是在家里洗,一个是远程洗

1.本地调用: 自己在家洗衣服2.远程调用: 自己在外面,打电话叫爸帮忙洗衣服

6. NFS和Rpc的关系

我们已知NFS是通过网络进行数据的传输(网络文件系统),因此NFS会使用一些port来进行传输

既然NFS在传输数据的时候,怎么知道NFS服务器使用的端口是哪一个?
那么nfs传输数据的时候,怎么知道NFS服务器使用了哪一个端口
这就由rpc这个服务器所决定。
1.NFS服务端启动后、将自己的端口信息,注册到rpcbind服务中
2.NFS客户端通过TCP/IP的方式,连接到NFS服务端提供的rpcbind服务,并且从该服务中获取具体的端口信息
3.NFS客户端拿到具体端口信息后,将自己需要执行的函数,通过网络发给NFS服务端对应的端口
4.NFS服务端接收到请求后,通过rpc.nfsd进程判断该客户端是否有权限连接
5.NFS服务端的rpc.mount进程判断客户端是否有对应的操作权限
6.最终NFS服务端会将客户端请求的函数,识别为本地可以执行的命令,传递给内核、最终内核驱动硬件结论、nfs的客户端、服务端之间的通信基于rpc协议,且必须运行rpcbind服务

7.rpcbind服务

  • 该服务用于,nfs启动后,将端口,注册到rpcblind服务中

然后在由rpcblind 分配端口





NFS配置的文件和语法

机器准备

nfs服务端   nfs-31多个nfs客户端    web-7最终完成效果让web-7 可以读写 nfs共享的静态文件数据

常见的配置文件和语法

nginx.conf:
http {server {}}
rsyncd.conf:
global -----全局的变量xxx= xxxuid= xxxgid=xxx[备份的模块名]针对该模块的参数path=xxx
/etc/yum.repos.d/Centos.repo[epel]
xx=xssssss
json 类的配置的文件
{“key”:"value"}

......

1.配置文件的语法

默认的配置文件是/etc/export

文件的路径: /etc/exports
exports 的配置的语法NFS共享的目录 ,NFS客户端的地址(参数1,参数2) 客户端的地址(参数1,参数2)例如:------模板
/   hostname1(rw) hostname2(rw,no_root_sqash)
/pub *(rw)------->样例
/home/chao  123.206.16.61(rw)参数的解释:
1.FNS共享的目录,为NFS服务要共享的实际的目录。必须是绝对的路径,注意本地的权限2.NFS的客户端,也是NFS服务端授权的可以访问的共享的目录

NFS共享的目录 NFS的客户端地址(参数1,参数2)


nfs限定网站的写法参考表

nfs客户端地址说明

客户端地址 具体地址 说明
单一客户端 192.168.178.142 用的少
整个网段 192.168.178.0/24 24表示子网掩码255.255.255.0,指定网段,用的较多192.168.178.1~ 192.168.178.254 张老三 192.168.178.54
授权域名客户端 nfs.yuchaoit.cn 弃用
授权整个域名客户端 *.yuchaoit.cn 弃用

2.NFS服务端的部署

1,准备好服务端的机器2.安装nfs工具包
yum install nfs-utils rpcbind -y3.修改配置文件,填写为你所需要的共享的参数,先学一学该软件的配置的语法,每一个配置稳健的语法各不相同,以及共享文件,文件权限的设定
[root@nfs-31 ~]#cat /etc/exports4. 设置一个共享 /nfs-data文件夹,运行172.16.1.0局域网内的用户可以访问,权限是只读mkdir /nfs-data --->创建文件夹vim /etc/exports/nfs-data 172.16.1.0/24(ro)---->这个不完全哦完全的在下面↓5.注意要先启动rpcbind服务
确保如下2个进程都运行,rpc服务才正常,如果想停止rpc服务,也是关闭这俩进程
rpcbind.servicerpcbind.socketsystemctl start rpcbind.service
systemctl start rpcbind.socket6.运行nfs服务,每次启动nfs,nfs的端口号在不断的变化
systemctl start nfs7.检查nfs共享的情况
[root@nfs-31 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/nfs-data 172.16.1.0/248.客户端可以挂载使用了,9.修改服务端的nfs配置文件,允许读写操作
root_squash 这个参数,就是将客户端机器在nfs中创建的数据,用于改为nfsnobody[root@nfs-31 ~]#cat /etc/exports
/nfs-data  172.16.1.0/24(rw,root_squash)还需要修改该共享文件夹的权限
chown -R nfsnobody:nfsnobody  /nfs-data10.nfs配置文件修改后无需重启使用重新加载,防止nfs的端口号的变化
方法1
systemctl reload  nfs方法2,更新nfs的配置文件设置
[root@nfs-31 ~]#exportfs -r

3.NFS客户端的部署

1.查看客户端的挂载的情况
mount -l
2.查看磁盘分区的挂载的情况
df -h3.挂载nfs参看nfs
首先客户端要下载nfs的文件的系统yum install -y nfs-utils --->下载nfs格式的系统[root@web-7 ~]# mount -t nfs 172.16.1.31:/nfs-data  /test-nfs/   --->挂载4.尝试读写的数据
ls /test-nfstouch /test-nfs/hello.log  # 发现没有权限5.更新服务端的权限,再次进行测试数据的操作
[root@web-7 test-nfs]# 
[root@web-7 test-nfs]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Mar 23 00:57 hellp-yzk.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Mar 23 01:26 可以吗
[root@web-7 test-nfs]# echo '可以了yzk' >> /test-nfs/hellp-yzk.txt 
[root@web-7 test-nfs]# cat  /test-nfs/hellp-yzk.txt 
可以了yzk
[root@web-7 test-nfs]# 

.4关于nfs挂载参数的所有的解释

ro 只读
rw 读写
root_squash 当nfs客户端以root访问时,它的权限映射为NFS服务端的匿名用户,它的用户ID/GID会变成nfsnobody
no_root_squash 同上,但映射客户端的root为服务器的root,不安全,避免使用
all_squash 所有nfs客户端用户映射为匿名用户,生产常用参数,降低用户权限,增大安全性。
sync 数据同步写入到内存与硬盘,优点数据安全,缺点性能较差
async 数据写入到内存,再写入硬盘,效率高,但可能内存数据会丢/etc/exports  man 5 exports共享目录        共享选项
/nfs/share      *(ro,sync)共享主机:
*   :代表所有主机
192.168.0.0/24:代表共享给某个网段
192.168.0.0/24(rw) 192.168.1.0/24(ro) :代表共享给不同网段
192.168.0.254:共享给某个IP
*.yuchaoit.cn:代表共享给某个域下的所有主机共享选项:
ro:只读,不常用
rw:读写
sync:实时同步,直接写入磁盘
async:异步,先缓存在内存再同步磁盘
anonuid:设置访问nfs服务的用户的uid,uid需要在/etc/passwd中存在
anongid:设置访问nfs服务的用户的gid
root_squash :默认选项 root用户创建的文件的属主和属组都变成nfsnobody,其他人nfs-server端是它自己,client端是nobody。
no_root_squash:root用户创建的文件属主和属组还是root,其他人server端是它自己uid,client端是nobody。
all_squash: 不管是root还是其他普通用户创建的文件的属主和属组都是nfsnobody说明:
请用如下的参数,即可,生产环境用这个anonuid和anongid参数和all_squash一起使用。all_squash表示不管是root还是其他普通用户从客户端所创建的文件在服务器端的拥有者和所属组都是nfsnobody;服务端为了对文件做相应管理,可以设置anonuid和anongid进而指定文件的拥有者和所属组

5.NFS结合nginx实现共享存储

  • 安装部署nfs服务端

  • 生产环境下的参数

    rw,rsync,call_squash,anonuid,anongid

rw
rsyncall_squash  ----> 将nfs的客户端的任意的用户,在共享的目录下的操作,全部改为nfsnobody,以实现权限的控制web-7 /test-nfs 172.16.1.31:/nfs-data
无论是root 还是一般的普通的用户读写 /test-nfs创建的数据,都会被改为user, group 都是默认的nfsnobodyanonuid = id号
anongid = gid号集合这俩参数,就可以限制在 该nfs共享目录下的所有用户操作,统一被限制为了某个指定的用户

image-20220422120344144

任务的需求:
1.nginx的启动用户必须是www,uid是 1500,不允许登录
2.nfs共享存储用户也是www,uid是 1500,不允许登录,允许读写3.nginx网站可以正常读写共享存储资料
先挂载nfs4.修改nginx网页,加载该用户自己创建的图片信息吗5.模拟用户访问该nginx网站
任务需求
1.nginx的启动用户必须是www,uid是 1500,不允许登录useradd  www -u 1500 -M -s /sbin/nologin1.0 安装nginx
yum install nginx -y1.1 修改nginx配置文件,指定是www用户运行
vim /etc/nginx/nginx.conf
修改如下
user www;1.2 启动nginx
systemctl start nginx 1.3 检查nginx进程
[root@web-7 ~]#ps -ef|grep nginx
root       5038      1  0 12:07 ?        00:00:00 nginx: master process /usr/sbin/nginx
www        5040   5038  0 12:07 ?        00:00:00 nginx: worker process2.nfs共享存储用户也是www,uid是 1500,不允许登录,允许读写修改nfs配置文件如下,限定客户端在该目录中的操作,权限都被转化为www用户限制nginx机器才能访问[root@nfs-31 ~]#mkdir /nfs-nginx
[root@nfs-31 ~]#useradd  www -u 1500 -M -s /sbin/nologin修改配置文件
[root@nfs-31 ~]#cat /etc/exports
/nfs-data *(rw,all_squash)/nfs-nginx     172.16.1.7(rw,sync,all_squash,anonuid=1500,anongid=1500)3.重新加载nfs(reload是针对已经有进程在运行了,重新读取配置文件)
你是新安装的机器nfs,还能reload吗?systemctl reload nfs4.修改共享目录的属主、属组为www
[root@nfs-31 /nfs-nginx]#chown -R www.www /nfs-nginx/
[root@nfs-31 /nfs-nginx]#ll -d /nfs-nginx/
drwxr-xr-x 2 www www 6 Apr 22 12:09 /nfs-nginx/3.nginx网站可以正常读写共享存储资料
先挂载nfs
mount -t nfs 172.16.1.31:/nfs-nginx /usr/share/nginx/html/[root@web-7 ~]#df -h |grep nginx
172.16.1.31:/nfs-nginx    17G  1.6G   16G  10% /usr/share/nginx/html客户端生成网页,和图片等静态资源,查看是否写入到NFS服务端
[root@web-7 ~]#vim /usr/share/nginx/html/index.html模拟用普通用户,到该nginx目录下,生成一个数据图片
[client01@web-7 /usr/share/nginx/html]$wget -O  /usr/share/nginx/html/liyunlong.jpg  https://inews.gtimg.com/newsapp_bt/0/8823765779/10004.修改nginx网页,加载该用户自己创建的图片信息吗
[client01@web-7 /usr/share/nginx/html]$cat index.html 
<meta charset=utf-8>
把我李云龙的意大利炮拿来<img src='./liyunlong.jpg'>5.模拟用户访问该nginx网站
http://10.0.0.7/

NFS故障案例

1.客户端未挂载NFS

[root@web-7 ~]#
[root@web-7 ~]#umount /usr/share/nginx/html
[root@web-7 ~]#重新挂载
mount -t nfs 172.16.1.31:/nfs-nginx /usr/share/nginx/html/

2.服务端出问题,。nfs挂了

导致nginx页面卡死,nginx网页目录操作也都卡死

此时明确了共享存储出问题了

去共享存储NFS服务器上找原因

发现nfs挂了,重启即可
systemctl restart nfs

3.nfs修复后,客户端的挂载可以恢复

4.如果真的nfs死机了,且暂时无法恢复,你还得快速恢复网站的业务,可以强制取消挂载

使用强制卸载参数
,先看看挂载了什么mount -l |grep nfsumount -fl 挂载点  # 取消挂载即可然后最终还是要以恢复NFS为主

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/903653.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nature Communications | 全基因组沉默子图谱揭示人类细胞基因调控新机制

摘要总结 这篇文章是2025年1月发表在《Nature Communications》杂志上的一篇研究,标题为“Uncovering the whole genome silencers of human cells via Ss-STARR-seq”。这篇文章通过开发一种名为Ss-STARR-seq的高通量筛选技术,首次在全基因组范围内系统性鉴定了人类细胞中的…

数据结构3

基本数据处理技术概率论与数理统计1-基本概念 概率论与数理统计2-基本数据结构 概率论与数理统计3-基本数据处理技术 基本的数据处理技术 查找 查找的基本概念 在哪里找:查找表是由同一类型的数据元素(或记录)构成的集合,集合中的数据元素之间关系松散。 按什么查找:根据给…

NSSCTF ROUND#28 动态调试 WriteUp

WriteUp 题目信息 来源:NSSCTF 名称:ROUND#28 动态调试 分类:Reverse 描述:无题目链接: https://www.nssctf.cn/contest/732/解题思路 首先使用DIE对文件进行查壳,发现这是一个无壳的32位ELF文件。于是使用32位IDA对文件进行反汇编,得到伪代码如下:为方便阅读伪代码,修…

Video Analysis Assignment

This scene is what the heroine saw from a begin sycarmore at the first time . It was this landscape that awake the heroine of her father’s word: “ A painting is more than the sum of its parts”. This scene is shot from the big sycarmore and it is a estab…

AI一键生成流程图架构图甘特图饼图等可视化图形 原创

AI脑图除了使用文字、语音、图片、文件、网页和视频等一键生成思维导图外,现在也可以支持一键生成流程图、架构图、甘特图等可视化图形了,使用非常简单,告诉AI脑图你想要生成什么图,大概不到两分钟就会制作好并以图片回复给你啦。 支持的可视化图形有: 流程图 例如向AI脑图…

Atcoder ABC398.F - ABCBA 题解 KMP的next函数

题目链接:https://atcoder.jp/contests/abc398/tasks/abc398_f 题目大意: 给你一个字符串 \(s\),要求在字符串 \(s\) 的末尾添加尽可能少的字符使其变成一个回文串。 解题思路: 首先,设输入的字符串为 \(s = s_1 s_2 \ldots s_n\),设字符串 \(s\) 翻转后的字符串为 \(s\)…

方法的定义和调用

//方法的应用 package Base; public class Demon16 { public static void main(String[] args) {// TODO Auto-generated method stubint max=max(10,10);System.out.println(max); } //比大小 public static int max(int num1,int num2) {int result=0;if(num1==num2) {System…

浅说线性差分和树上差分

目录线性差分正常思路差分思路二维差分的定义二维差分的解释例题1 地毯树上差分引入点差分例题1——wwx的出玩分析与解答例题2——松鼠的新家分析与解答边差分例题1——边差分模版分析与解答例题2——运输计划分析与解答 线性差分 当我们这里有\(n\)个数,现在我要对其中一段进…

Spring 事务失效

场景1:代码:执行结果:异常抛出,但是数据没有回滚。 代理对象调用 b() 方法 没有开启事务:普通对象调用a() 方法开启事务:在b() 方法上加入事务注解,开启事务就没问题:本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.com/czzz/p/18787133

征程 6X CAMSYS 性能测试方案介绍

1.性能测试方法原理 CAMSYS 其性能指标主要包括:帧率、延迟,以及系统的 DDR 带宽、CPU 占用率等。 对于帧率、延迟,通过在驱动中创建 trace event,分别记录通路上的每个 IP,每帧开始处理(frame_start)和结束处理(frame_end)的时间戳信息和帧信息,来实现帧率计算和延迟…

数据结构2

概率论与数理统计1-基本概念 概率论与数理统计2-基本数据结构 概率论与数理统计3-基本数据处理技术 基本的数据结构 - 数据结构- 数据的逻辑结构- 线性结构- 线性表- 栈(特殊的线性表)- 队列(特殊的线性表)- 字符串- 数组- 广义表- 非线性结构- 树型结构- 图型结构- 数据的存储…

day7 刷牛客华为机试题+学java

https://www.nowcoder.com/exam/oj/ta?page=1&tpId=37&type=37 字符串 第一题:第二题: 省行版:逻辑版:java网课学习: 多态调用成员变量,编译看左边,运行也看左边。调用成员方法时,编译看左边,运行看右边。if(a instanceof Dog d) 导包final 修饰引用类型地址…