商家网站建设,星座 网站 建设,线上推广服务,阿里云怎么上传wordpressNFS
1. NFS工作原理
Linux中的网络文件系统NFS #xff08;Network File System#xff09;是一种分布式文件系统协议#xff0c;它允许用户在网络上远程访问和操作文件#xff0c;就好像这些文件存储在本地计算机上一样。NFS最初由Sun Microsystems在1980年代开发#…NFS
1. NFS工作原理
Linux中的网络文件系统NFS Network File System是一种分布式文件系统协议它允许用户在网络上远程访问和操作文件就好像这些文件存储在本地计算机上一样。NFS最初由Sun Microsystems在1980年代开发现在已成为UNIX和Linux操作系统中普遍支持的标准组件。以下是NFS工作原理的基本概述
1. NFS架构
NFS遵循客户端-服务器模型其中
服务器存储实际文件的系统并通过NFS服务向网络上的其他计算机提供这些文件的访问权限。客户端想要访问服务器上文件的系统。客户端通过网络使用NFS协议将远程文件系统挂载为本地文件系统从而实现对文件的操作。
2. NFS协议
NFS使用远程过程调用RPC来通信。RPC允许程序调用另一台计算机上的程序就像调用本地程序一样。NFS主要使用两个RPC程序一个用于挂载请求另一个用于实际的文件系统操作如打开、读取、写入、关闭文件等。
3. 工作流程 启动NFS服务首先NFS服务器需要配置并启动NFS服务包括设置哪些文件系统可以被NFS客户端访问以及定义访问控制如哪些客户端有权访问可执行的操作等。 挂载过程NFS客户端通过向NFS服务器发送挂载请求来开始通信。如果客户端被授权访问服务器响应此请求并允许客户端将服务器上的文件系统挂载为本地文件系统。 文件操作一旦挂载成功客户端上的应用程序和用户就可以像操作本地文件一样操作远程文件。所有操作请求如读取、写入文件都通过NFS协议发送给服务器由服务器执行实际操作后返回结果。
4. NFS版本
NFS有几个版本包括NFSv2、NFSv3、NFSv4每个版本都增加了新的特性和性能改进。NFSv4是最新的广泛采用版本引入了如状态持久性、更强的安全性和改进的性能等新特性。
5. 安全性
NFS的早期版本特别是NFSv2和NFSv3在设计时没有将安全性作为重点主要依赖网络安全和主机控制。NFSv4增加了更强的安全措施如Kerberos认证和加密传输。
结论
NFS通过其简单的客户端-服务器模型和协议有效地实现了分布式环境中的文件共享和访问。随着新版本的发布NFS不断增强其特性和安全性以满足现代网络环境的需求。
2. RPC工作原理
远程过程调用RPC是一种通信机制允许一台计算机客户端请求另一台计算机服务器上的程序或服务执行一个过程函数或方法就如同该过程是在本地执行一样。RPC抽象了底层的通信细节使开发人员能够专注于业务逻辑而不是网络交互的复杂性。这种方式简化了不同计算机之间的功能调用是分布式系统设计中的一个关键概念。以下是对RPC的进一步理解和组成部分的描述
核心概念
透明性RPC的设计目的之一是让远程服务调用看起来尽可能像是本地调用。这种透明性意味着开发人员可以像调用本地函数那样调用远程函数而不需要关心网络通信的复杂性。接口定义在RPC系统中服务提供方需要定义一个接口通常是一组可远程调用的函数或方法客户端根据这个接口进行编程发起远程调用。这个接口定义了可以远程调用的方法、它们的参数和返回类型。
工作流程
客户端发起调用当客户端需要执行远程过程时它会在本地生成一个对该远程过程的调用。请求序列化客户端的RPC框架将调用请求包括函数名、参数等序列化成一种格式例如JSON、XML、二进制等这样可以通过网络发送。发送请求序列化后的请求通过网络发送给服务器。服务器处理请求服务器接收到请求后RPC框架反序列化请求获取函数名和参数然后像调用本地函数一样调用相应的过程。返回结果服务器执行完毕后将结果序列化并发送回客户端。客户端接收结果客户端的RPC框架接收到结果反序列化它然后返回给调用者。
通信协议
RPC可以使用多种底层网络协议来传输数据包括TCP/IP、UDP等。选择哪种协议取决于应用的需求比如对性能、可靠性或数据完整性的不同要求。
应用和优势
RPC广泛用于构建分布式系统和微服务架构因为它能够
简化开发开发人员可以专注于业务逻辑而不是底层的网络通信细节。提高抽象级别通过使用高级的接口定义语言IDL可以在不同语言和平台之间进行通信增强系统的互操作性。支持多种语言RPC框架通常支持多种编程语言使得不同语言编写的系统组件能够轻松通信。
RPC的这些特性使其成为现代软件架构中不可或缺的技术之一尤其是在微服务架构的设计和实现中。
3. 注册中心
注册中心是分布式系统和微服务架构中的一个重要组成部分。注册中心在RPC系统中扮演着至关重要的角色特别是在服务发现和服务治理方面。下面我会详细解释注册中心的作用和它如何与RPC结合使用。
注册中心的作用
在分布式系统或微服务架构中注册中心负责存储服务的地址和元数据信息。它主要有以下几个作用
服务注册服务启动时会将自己的网络地址如IP和端口以及提供的功能服务的相关信息注册到注册中心。这个过程称为服务注册。服务发现客户端在需要调用某个服务时会向注册中心查询该服务的网络地址然后直接与服务进行通信。这个过程称为服务发现。负载均衡注册中心可能会存储多个实例的地址信息客户端可以根据某种策略如轮询、随机等从中选择一个进行调用从而实现负载均衡。健康检查注册中心通常会周期性地检查服务实例的健康状态不健康的实例会被暂时移除或标记以确保系统的稳定性。
注册中心与RPC的结合
在RPC系统中注册中心的使用解决了服务位置的硬编码问题提高了系统的灵活性和可维护性。与RPC结合使用时流程通常如下
服务提供者服务器启动时向注册中心注册自己提供的服务接口和地址信息。服务消费者客户端在需要调用远程服务时首先从注册中心查询该服务的地址。注册中心返回服务地址信息给客户端客户端根据这些信息使用RPC机制调用远程服务。客户端可以实现负载均衡从注册中心获取的多个服务实例中选择一个进行调用。服务提供者定期向注册中心发送心跳以证明自己是活跃的。注册中心也可以通过健康检查机制监控服务实例的状态。
常见的注册中心
在实践中有许多流行的注册中心解决方案包括
EurekaNetflix开发的服务发现工具是Spring Cloud体系中的一部分。Consul由HashiCorp开发提供了服务发现、健康检查和键值存储等功能。ZookeeperApache软件基金会的一个项目常用于Kafka和Hadoop等分布式系统的协调服务。Nacos阿里巴巴开源的服务发现和配置管理工具支持微服务架构。
注册中心不仅简化了服务之间的通信还为服务的可扩展性、动态性和高可用性提供了基础设施支持。
4.安装配置NFS
# 安装nfs-utils包nfs服务在centos7以前叫nfs,centos7以后叫nfs-server。并且在安装的过程会自动处理依赖关系其中包括注册中心rpcbind
[rootRocky9 ~]# yum install nfs-utils
Dependencies resolved.
Package Architecture Version Repository SizeInstalling:nfs-utils x86_64 1:2.5.4-20.el9 baseos 425 k
Installing dependencies:gssproxy x86_64 0.8.4-6.el9 baseos 108 kkeyutils x86_64 1.6.3-1.el9 baseos 72 klibev x86_64 4.33-5.el9 baseos 52 klibnfsidmap x86_64 1:2.5.4-20.el9 baseos 60 klibverto-libev x86_64 0.3.2-3.el9 baseos 13 krpcbind x86_64 1.2.6-5.el9 baseos 56 ksssd-nfs-idmap x86_64 2.9.1-4.el9_3.5 baseos 42 kTransaction SummaryInstall 8 PackagesTotal download size: 827 k
Installed size: 2.1 M
Is this ok [y/N]:[rootRocky9 ~]#systemctl enable --now nfs-server
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[rootRocky9 ~]#systemctl status nfs-server
[rootRocky9 data]# systemctl status nfs-server
● nfs-server.service - NFS server and servicesLoaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; preset: disabled)Drop-In: /run/systemd/generator/nfs-server.service.d└─order-with-mounts.confActive: active (exited) since Tue 2024-04-09 09:21:58 CST; 5h 41min agoProcess: 831 ExecStartPre/usr/sbin/exportfs -r (codeexited, status0/SUCCESS)Process: 837 ExecStart/usr/sbin/rpc.nfsd (codeexited, status0/SUCCESS)Process: 1010 ExecStart/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (codeexited, status0/SUCCESS)Main PID: 1010 (codeexited, status0/SUCCESS)CPU: 34msApr 09 09:21:57 Rocky9.3 systemd[1]: Starting NFS server and services...
Apr 09 09:21:58 Rocky9.3 systemd[1]: Finished NFS server and services.
[rootRocky9 data]#配置文件
vi /etc/exports
vi /etc/exports.d/*.exports基本格式
共享目录 客户端(选项1, 选项2, ...)共享目录 这是您想要共享的本地文件系统路径。 客户端 可以是单个客户端的 IP 地址或主机名。 也可以是一个 IP 网段例如192.168.1.0/24。 使用 * 表示允许所有客户端访问。 使用 group 表示允许属于某个 NIS 组的所有客户端访问。 选项 rw: 允许读写访问如果没有指定 rw 或 ro默认是 ro。ro: 只读访问。sync: 同步写操作保证数据一致性。async: 异步写操作提高性能但可能牺牲数据一致性。no_root_squash: 默认情况下来自客户端的root用户会被映射到匿名用户通常是nobody这个选项禁用这种行为。root_squash: 启用root用户映射到匿名用户这是默认行为。all_squash: 将所有远程用户映射到匿名用户。no_subtree_check: 如果共享的不是整个文件系统NFS会进行子树检查。这个选项禁用子树检查可能提高性能但增加风险。subtree_check: 启用子树检查这是默认行为。secure: 使用1024以下的TCP/IP端口进行通信这是默认行为。insecure: 允许使用1024以上的端口某些客户端可能需要这个选项。anonuid 和 anongid: 指定匿名用户的UID和GID通常与 all_squash 一起使用。
示例
vim /etc/exports
/data/nfsdir1 *(rw,no_root_squash,all_squash,anonuid88,anongid88)#或者
[rootRocky9 data]# vim /etc/exports.d/test.exports
/data/nfsdir2 *(rw)
[rootRocky9 data]# exportfs -r
[rootRocky9 data]# exportfs -v
/data/nfsdir1 10.0.0.107(sync,wdelay,hide,no_subtree_check,secsys,rw,secure,root_squash,no_all_squash)
/data/nfsdir1 world(sync,wdelay,hide,no_subtree_check,anonuid88,anongid88,secsys,ro,secure,no_root_squash,all_squash)
/data/nfsdir2 world(sync,wdelay,hide,no_subtree_check,secsys,rw,secure,root_squash,no_all_squash)
[rootRocky9 data]##查看
[rootubuntu2204 nfs]#showmount -e 10.0.0.137
Export list for 10.0.0.137:
/data/nfsdir2 *
/data/nfsdir1 (everyone)修改完以后生效
[rootRocky9 data]# exportfs -r
[rootRocky9 data]#
[rootRocky9 data]# exportfs -v
/data/nfsdir1 world(sync,wdelay,hide,no_subtree_check,anonuid88,anongid88,secsys,rw,secure,no_root_squash,all_squash)客户端挂载
#centos/rocky上面客户端安装
[rootRocky9 ~]# yum -y install nfs-utils
#Ubuntu客户端安装不叫这个是nfs-common
[rootUbuntu22 ~]#apt install -y nfs-common
[rootRocky9 ~]# showmount -e 10.0.0.137
Export list for 10.0.0.137:
/data/nfsdir1 (everyone)
[rootRocky9 ~]#
#临时挂载
[rootRocky9 ~]# mount 10.0.0.137:/data/nfsdir1 /mnt/nfs
#永久挂载
[rootRocky9 ~]# vim /etc/fstab
10.0.0.137:/data/nfsdir1 /mnt/nfs nfs _netdev 0 0
[rootRocky9 ~]# mount -a
mount: (hint) your fstab has been modified, but systemd still usesthe old version; use systemctl daemon-reload to reload.
#如果出现上面提示执行下面命令即可
[rootRocky9 ~]# systemctl daemon-reload
# _netdev:没有网络的时候不挂载