Linux RPC 和 NFS 教程

RPC (Remote Procedure Call,远程过程调用)

基本概念

RPC 是一种网络通信协议,它允许程序像调用本地函数一样调用另一台计算机上的函数或服务,而不需要开发者显式地处理网络通信细节。

主要特点

  1. 透明性:调用远程服务就像调用本地函数一样简单

  2. 跨语言支持:不同语言编写的程序可以通过RPC通信

  3. 客户端-服务器模型:基于请求-响应模式工作

  4. 协议无关:可以在TCP、UDP等多种传输协议上实现

工作原理

  1. 客户端调用本地存根(stub)函数

  2. 存根将调用信息序列化并通过网络发送到服务器

  3. 服务器端存根接收并反序列化请求

  4. 服务器执行实际函数并将结果返回

  5. 客户端存根接收并返回结果给调用者

常见实现

  • Sun RPC (ONC RPC):Unix/Linux系统中常用的RPC实现

  • gRPC:Google开发的现代RPC框架

  • XML-RPC/SOAP:基于XML的RPC实现

NFS (Network File System,网络文件系统)

基本概念

NFS是由Sun公司开发的一种分布式文件系统协议,允许用户像访问本地文件一样访问网络上的文件。

主要特点

  1. 透明访问:远程文件系统可以像本地文件系统一样挂载和使用

  2. 跨平台:支持不同操作系统之间的文件共享

  3. 基于RPC:使用RPC机制进行通信

  4. 无状态设计:服务器不保存客户端状态信息(某些版本)

主要版本

  • NFSv2:早期版本,性能有限

  • NFSv3:增加了对大文件和异步写入的支持

  • NFSv4:引入了有状态协议、安全性增强等改进

  • NFSv4.1/NFSv4.2:最新版本,支持并行访问等高级特性

工作原理

  1. 客户端通过mount命令挂载远程NFS共享

  2. 客户端应用程序进行文件操作

  3. 客户端内核将文件操作转换为NFS协议请求

  4. 通过RPC机制将请求发送到NFS服务器

  5. 服务器执行实际文件操作并返回结果

依赖关系

NFS依赖于RPC服务(rpcbind)来管理端口映射和协议协商。在较新的NFSv4中,对RPC的依赖有所减少。

RPC与NFS的关系

  • NFS使用RPC作为其底层通信机制

  • RPC为NFS提供透明的网络通信能力

  • 在传统NFS实现中(特别是v2和v3),必须先启动RPC服务才能使用NFS

  • NFSv4减少了RPC依赖,但仍需要rpcbind服务进行初始端口映射

这两种技术共同构成了Unix/Linux系统中重要的网络资源共享基础架构。


一、RPC (Remote Procedure Call) 安装与配置

RPC 是 NFS 的基础服务,通常安装 NFS 时会自动安装 RPC 相关组件。

1. 检查 RPC 服务状态

复制代码
systemctl status rpcbind

2. 安装 RPC 服务(如果未安装)

在大多数 Linux 发行版中,rpcbind 是默认安装的。如果没有安装:

对于 Debian/Ubuntu:

复制代码
sudo apt-get install rpcbind

对于 CentOS/RHEL:

复制代码
sudo yum install rpcbind

3. 启动 RPC 服务

复制代码
sudo systemctl start rpcbind
sudo systemctl enable rpcbind

二、NFS (Network File System) 安装与配置

1. 安装 NFS 服务器

对于 Debian/Ubuntu:

复制代码
sudo apt-get install nfs-kernel-server

对于 CentOS/RHEL:

复制代码
sudo yum install nfs-utils

2. 配置 NFS 共享目录

创建共享目录
复制代码
sudo mkdir -p /shared
sudo chown nobody:nogroup /shared  # 设置权限
sudo chmod 777 /shared            # 设置可读写权限
编辑 exports 文件
复制代码
sudo nano /etc/exports

添加以下内容(根据需求调整):

复制代码
/shared *(rw,sync,no_subtree_check,no_root_squash)

或限制特定客户端访问:

复制代码
/shared client_ip(rw,sync,no_subtree_check)
应用配置
复制代码
sudo exportfs -a

3. 启动 NFS 服务

对于 Debian/Ubuntu:

复制代码
sudo systemctl start nfs-kernel-server
sudo systemctl enable nfs-kernel-server

对于 CentOS/RHEL:

复制代码
sudo systemctl start nfs-server
sudo systemctl enable nfs-server

4. 检查 NFS 服务状态

复制代码
sudo systemctl status nfs-kernel-server  # 或 nfs-server

三、客户端配置

1. 安装 NFS 客户端

对于 Debian/Ubuntu:

复制代码
sudo apt-get install nfs-common

对于 CentOS/RHEL:

复制代码
sudo yum install nfs-utils

2. 创建挂载点

复制代码
sudo mkdir -p /mnt/nfs/shared

3. 挂载 NFS 共享

复制代码
sudo mount server_ip:/shared /mnt/nfs/shared

4. 测试自动挂载(可选)

编辑 /etc/fstab 文件:

复制代码
server_ip:/shared /mnt/nfs/shared nfs defaults 0 0

四、防火墙配置

对于 CentOS/RHEL:

复制代码
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --reload

对于 Ubuntu/Debian:

复制代码
sudo ufw allow from client_ip to any port nfs
sudo ufw enable

五、验证安装

在服务器上查看共享列表:

复制代码
showmount -e localhost

在客户端上查看服务器共享:

复制代码
showmount -e server_ip

六、常见问题解决

  1. 连接被拒绝:

    • 确保 rpcbind 和 nfs 服务正在运行

    • 检查防火墙设置

  2. 权限问题:

    • 确保共享目录有正确的权限

    • 检查 /etc/exports 中的权限设置

  3. 挂载失败:

    • 使用 rpcinfo -p server_ip 检查 RPC 服务是否正常

    • 检查网络连接

相关推荐
A小辣椒19 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式