centos7.9系统部署NFS详细流程—2023.04

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: centos7.9系统部署NFS详细流程—2023.04

NFS与RPC关系

简单点可以这么理解,RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。


NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。


RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。


RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。


因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动。每启动一个功能就会启用一些端口来传输数据,因此NFS的功能所对应的端口才没有固定,而是采用随机取用一些未被使用的小于724的端口来作为传输之用。但如此一来又造成客户端要连接服务器时的困扰,因为客户端要知道服务器端的相关端口才能够联机,


此时我们需要远程过程调用(RPC)的服务。RPC最主要的功能就是指定每个NFS功能所对应的端口号,并且回报给客户端,让客户端可以连接到正确的端口上。当服务器在启动NFS时会随机选用数个端口,并主动地向RPC注册。因此RPC可以知道每个端口对应的NFS功能。然后RPC固定使用端口111来监听客户端的请求并回报客户端正确的端口,所以可以让NFS的启动更为容易。


正因如此,启动NFS之前,要先启动RPC;否则NFS会无法向RPC注册。另外,重新启动RPC时原本注册的数据会不见,因此RPC重新启动后它管理的所有程序都需要重新启动以重新向RPC注册。

769cce050613470cba9c55336b316e50.png

当客户端有NFS文件要存取请求时,它如何向服务器端要求数据?

(1)客户端会向服务器端的RPC(port 111)发出NFS文件存取功能的询问请求。
(2)服务器端找到对应的已注册的NFS daemon端口后会回报给客户端。
(3)客户端了解正确的端口后,就可以直接与NFS守护进程来联机。


由于NFS的各项功能都必须要向RPC注册,因此RPC才能了解NFS服务的各项功能的port number、PID和NFS在主机所监听的IP等,而客户端才能够通过RPC的询问找到正确对应的端口。即NFS必须要有RPC存在时才能成功地提供服务,因此NFS实际上是RPC Server的一种。


前提

部署nfs需要提前准备好2台服务器,一台做为服务端,一台做为客户端

服务端:192.168.2.245

客户端:192.168.2.248


关闭防火墙和selinux

  1. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld


  1. 关闭SELinux
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config


安装 NFS 和 RPC

1. 所有主机操作

# 安装nfs与rpc
yum install -y nfs-utils rpcbind
# 查看是否安装成功
rpm -qa | grep nfs
rpm -qa | grep rpcbind


[root@k8s-nfs ~]# rpm -qa | grep nfs
libnfsidmap-0.25-19.el7.x86_64
nfs-utils-1.3.0-0.68.el7.2.x86_64
[root@k8s-nfs ~]# rpm -qa | grep rpcbind
rpcbind-0.2.0-49.el7.x86_64

2. 服务端配置操作——服务端192.168.2.245

# 创建共享存储文件夹
mkdir -p /nfs/data
#配置nfs
echo "/nfs/data *(rw,sync,no_root_squash)" >> /etc/exports  #表示所有客户端可挂载


#### 说明
# 输入以下内容,格式为:nfs共享目录 nfs客户端地址1(param1, param2,...) nfs客户端地址2(param1, param2,...)
# 如: /nfs/data 10.0.0.200/24(rw,async,no_root_squash)
# 固定网段所有IP可挂载
echo "/nfs/data 10.0.0.*(rw,sync,no_root_squash)" >> /etc/exports
# 固定网段固定IP区间可挂载
echo "/nfs/data 10.0.0.200/24(rw,sync,no_root_squash)" >> /etc/exports
# 所有客户端可挂载
echo "/nfs/data *(rw,sync,no_root_squash)" >> /etc/exports
# 1.使NFS配置生效
exportfs -r
# 2.设置开机自启动
systemctl enable rpcbind && systemctl start rpcbind
systemctl enable nfs && systemctl restart nfs
# 3.查看服务状态
systemctl status rpcbind
systemctl status nfs
# 4.服务器注册端口:111
rpcinfo -p   # 如果显示rpc 服务器注册的端口列表(端口:111),则启动成功
# 5.查看是否成功和可用的nfs地址:
[root@k8s-master1 ~]# showmount -e localhost
Export list for localhost:
/nfs/data *
# 6.看有哪些参数生效
[root@k8s-master1 ~]# cat /var/lib/nfs/etab
/nfs/data       *(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,no_root_squash,no_all_squash)

参数说明:

ro:只读设置,这样 NFS 客户端只能读、不能写(默认设置);

rw:读写设置,NFS 客户端可读写;

sync:将数据同步写入磁盘中,效率低,但可以保证数据的一致性(默认设置);

async:将数据先保存在内存缓冲区中,必要时才写入磁盘;如果服务器重新启动,这种行为可能会导致数据损坏,但效率

root_squash:当客户端用 root 用户访问该共享文件夹时,将 root 用户映射成匿名用户(默认设置);

no_root_squash:客户端的 root 用户不映射。这样客户端的 root 用户与服务端的 root 用户具有相同的访问权限,这可能会带来严重的安全影响。没有充分的理由,不应该指定此选项;

all_squash:客户端所有普通用户及所属组都映射为匿名用户及匿名用户组;「推荐设置」

no_all_squash:客户端所有普通用户及所属组不映射(默认设置);

subtree_check:如果共享,如:/usr/bin之类的子目录时,强制NFS检查父目录的权限;

no_subtree_check:即使共享 NFS 服务端的子目录时,nfs服务端也不检查其父目录的权限,这样可以提高效率(默认设置)

secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);

insecure:允许客户端从大于1024的tcp/ip端口连接服务器;

wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);

no_wdelay:若有写操作则立即执行,当使用async时,无需此设置;

anonuid=xxx:将远程访问的所有用户主都映射为匿名用户主账户,并指定该匿名用户主为本地用户主(UID=xxx);

anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组为本地用户组(GID=xxx);


3. 客户端操作——192.168.2.248

# 1.创建挂载的文件夹
mkdir -p /data/nfs
# 2.查看挂载ip
[root@k8s-node1 nfs]# showmount -e 192.168.2.245  # 服务端IP
Export list for 192.168.2.245:
/nfs/data *
# 3.挂载
mount -t nfs 192.168.2.245:/nfs/data /data/nfs
# 其中:
# mount:表示挂载命令
# -t:表示挂载选项
# nfs:挂载的协议
# 10.0.0.200:nfs服务器的ip地址
# /nfs/data:nfs服务器的共享目录
# /data/nfs:本机客户端要挂载的目录
# 4.查看磁盘
df -h
Filesystem                Size  Used Avail Use% Mounted on
devtmpfs                  471M     0  471M   0% /dev
tmpfs                     487M     0  487M   0% /dev/shm
tmpfs                     487M  8.4M  478M   2% /run
tmpfs                     487M     0  487M   0% /sys/fs/cgroup
/dev/sda3                  78G  5.1G   73G   7% /
/dev/sda1                 297M  152M  145M  52% /boot
tmpfs                      98M   12K   98M   1% /run/user/42
tmpfs                      98M     0   98M   0% /run/user/0
192.168.2.245:/nfs/data   50G  4.2G   46G   9% /root/data/nfs


# 查看是否挂载成功,客户端执行
[root@k8s-node1 nfs]# cat /etc/fstab
#192.168.2.245:/nfs/data /data/nfs nfs defaults 1 1

测试

测试挂载:

可以进入客户端的/data/nfs目录,创建一个文件,然后去nfs服务器(服务端)查看/nfs/data目录中是否有该文件,若有则共享成功。反之在nfs服务器操作/nfs目录,查看本机客户端的目录是否共享。

#客户端:
touch a.txt
echo "11111" >>a.txt
服务端查看是否同步
#服务端
echo "222222" >>a.txt
客户端查看是否同步

数据同步说明挂载成功


取消挂载

  1. 查看挂载情况df -h

4c645571137b4b4d8f75334885369eb9.png

2、取消挂载:
注意:需要在客户端执行,并且需要退出挂载路径,回到根目录下,否则就会报错umount.nfs4: /root/data/nfs: device is busy

# 方法:
cd 
umount /root/data/nfs    #/root/data/nfs 为客户端挂载目录


00a69bbbf6ae462da29dbeac0e68dadc.png

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7天前
|
Linux 虚拟化 数据安全/隐私保护
部署05-VMwareWorkstation中安装CentOS7 Linux操作系统, VMware部署CentOS系统第一步,下载Linux系统,/不要忘, CentOS -7-x86_64-DVD
部署05-VMwareWorkstation中安装CentOS7 Linux操作系统, VMware部署CentOS系统第一步,下载Linux系统,/不要忘, CentOS -7-x86_64-DVD
|
5天前
|
Linux
CentOS 7 上挂载硬盘到系统
在 CentOS 7 中挂载硬盘,步骤包括:1、查找未挂载磁盘;2、创建分区;3、格式化为 ext4;4创建挂载点;5、挂载硬盘;6、检查挂载状态;7、 编辑 `/etc/fstab` 以实现开机自动挂载。
|
16天前
|
弹性计算 安全 Cloud Native
Alibaba Cloud Linux镜像系统超好用!兼容CentOS生态,性能稳定性绝对可以!
Alibaba Cloud Linux是阿里云的自研Linux发行版,兼容CentOS/RHEL,提供长期免费支持。它针对云服务器ECS优化,适用于多种场景,如Web服务、云原生应用等。Alibaba Cloud Linux 3基于Anolis OS 8,提供安全、高性能、十年维护及丰富的开源生态。用户可在ECS购买时选择镜像安装,支持多架构并提供热补丁、解决方案和快速启动版。更换ECS操作系统是免费的。
83 5
|
7天前
|
关系型数据库 MySQL Linux
Linux部署实战前言,MySQL在CentOS安装【单机软件】,MySQL的安装需要root权限,yum install mysql,systemctl enable mysqld开机自启的意思
Linux部署实战前言,MySQL在CentOS安装【单机软件】,MySQL的安装需要root权限,yum install mysql,systemctl enable mysqld开机自启的意思
|
9天前
|
Linux Shell 数据安全/隐私保护
centos 开机启动流程、开机运行级别
centos 开机启动流程、开机运行级别
|
14天前
|
Java Linux 网络安全
技术心得记录:将centos7打造成桌面系统
技术心得记录:将centos7打造成桌面系统
31 0
|
18天前
|
Java Linux
IDEA远程调试Centos部署的jar包
IDEA远程调试Centos部署的jar包
15 0
|
22天前
|
Java Linux
杨校老师课堂之CentOS7部署开发环境Jdk1.8【Linux】
杨校老师课堂之CentOS7部署开发环境Jdk1.8【Linux】
25 0
|
1月前
|
开发工具
centos8 yum安装mysql8 流程配置
centos8 yum安装mysql8 流程配置
212 0
|
1月前
|
Ubuntu Linux
查看Linux系统是Ubuntu还是CentOS
查看Linux系统是Ubuntu还是CentOS
59 0