当前位置: 首页 > news >正文

NFS 服务器 iSCSI 服务器

NFS 服务器

一、NFS 服务介绍

NFS 是 Network File System 的缩写,即网络文件系统,最早由 Sun 公司开发,用来在 UNIX&Linux 系统间实现磁盘文件共享的一种方法。它的主要功能是通过网络让不同的主机系统之间可以共享文件或目录。

NFS 客户端(一般为应用服务器,例如 web)可以通过挂载(mount)的方式将 NFS 服务端共享的数据目录挂载到 NFS 客户端本地系统中(就是某一个挂载点下)。从 NFS 客户端的机器本地看,NFS 服务端共享的目录就好像是客户自己的磁盘分区或者目录一样,而实际上确是远端的 NFS 服务端的目录。

在企业集群架构的工作场景中,NFS 网络文件系统一般被用来存储共享视频、图片、附件等静态资源文件。一般是把网站用户上传的文件都放在 NFS 共享里,例如,BBS 产品的图片、附件、头像,特别是中小网站公司应用频率更高。

NFS 支持的功能相当的多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS 的功能所对应的端口没有固定住,而是随机取用一些未被使用的小于 1024 的端口提供服务。但如此一来客户端如何获得服务器端的相关端口呢?

此时我们就得需要远程过程调用(RPC)的服务!RPC 最主要的功能是注册每个 NFS 功能所对应的端口,并且汇报给客户端,让客户端可以连结到正确的端口。RPC 定义了一种进程间通过网络进行交互通信的机制,它允许客户端进程通过网络向远程服务进程请求服务,而不需要了解服务器底层的通信协议详细信息。

NFS 工作原理

  • NFS 客户端:用户进程 -> 本地文件访问 -> RPC 服务(portmap)-> TCP/IP 协议栈 -> 本地磁盘

  • NFS 服务器端:TCP/IP 协议栈 -> RPC 服务(portmap)-> NFS 服务 -> 本地文件访问 -> 本地磁盘

核心角色说明

  • NFS 服务器:导出文件系统目录及其内容。

  • NFS 客户端:挂载服务器导出的文件系统到本地。

二、NFS 服务部署

配置服务端

NFS 服务由nfs-utils软件包提供,RHEL8 默认安装了该软件包。以下是完整部署步骤:

# 1.安装软件包
[root@webapp ~ 15:55:32]# yum install -y nfs-utils
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                                      | 4.4 kB  00:00:00     
epel-debuginfo/x86_64/metalink                            | 3.6 kB  00:00:00     * epel: ftp-stud.hs-esslingen.de* epel-debuginfo: ftp-stud.hs-esslingen.de
base                                                      | 3.6 kB  00:00:00     
extras                                                    | 2.9 kB  00:00:00     
updates                                                   | 2.9 kB  00:00:00     
软件包 1:nfs-utils-1.3.0-0.68.el7.2.x86_64 已安装并且是最新版本# 2. 准备服务用到的各种材料,例如用户、目录等
[root@webapp ~ 17:19:31]# mkdir -p /shares/webapp
[root@webapp ~ 17:22:53]# echo Hello World From Nginx > /shares/webapp/index.html# 客户端nginx用户的UID为998,客户端nginx用户可以读写该目录
[root@webapp ~ 17:22:53]# echo Hello World From Nginx > /shares/webapp/index.html
[root@webapp ~ 17:23:05]# chown 998 /shares/webapp
[root@webapp ~ 17:23:36]# ll -d /shares/webapp/
drwxrwxr-x 2 chrony root 24 926 10:30 /shares/webapp/# 3. 配置服务器(修改配置文件)
[root@webapp ~ 17:26:19]# vim /etc/exports.d/webapp.exports/shares/webapp 192.168.237.0/24(rw)# 4. 启用并启动服务
[root@webapp ~ 17:26:39]# systemctl enable nfs-server.service --now
[root@webapp ~ 17:26:58]# systemctl is-active nfs-server.service 
active# 5. 配置防火墙
[root@webapp ~ 17:27:04]# systemctl is-active firewalld.service
unknown

配置客户端

# 1. 准备web服务器
[root@backup ~ 15:59:37]# yum install -y nginx
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                                      | 4.4 kB  00:00:00     
epel-debuginfo/x86_64/metalink                            | 3.6 kB  00:00:00     * epel: ftp-stud.hs-esslingen.de* epel-debuginfo: ftp-stud.hs-esslingen.de
base                                                      | 3.6 kB  00:00:00     
extras                                                    | 2.9 kB  00:00:00     
updates                                                   | 2.9 kB  00:00:00     
软件包 1:nginx-1.20.1-10.el7.x86_64 已安装并且是最新版本# 2. 安装NFS客户端
[root@backup ~ 17:28:51]# yum install -y nfs-utils
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile* epel: ftp-stud.hs-esslingen.de* epel-debuginfo: ftp-stud.hs-esslingen.de
软件包 1:nfs-utils-1.3.0-0.68.el7.2.x86_64 已安装并且是最新版本# 3. 查看共享并挂载
[root@backup ~ 17:29:06]# showmount -e 192.168.237.106
Export list for 192.168.237.106:
/shares/webapp 192.168.237.0/24
[root@backup ~ 17:29:34]# mount 192.168.237.106:/shares/webapp /usr/share/nginx/html
[root@backup ~ 17:30:01]# df -h /usr/share/nginx/html
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   47G  3.3G   44G    7% /# 4. 测试web服务器页面
[root@webapp ~ 17:27:19]# curl 192.168.237.107
Hello World From Nginx# 5. 持久化挂载
[root@webapp ~ 17:31:14]# vim /etc/fstab
#最后添加一条记录
192.168.237.106:/shares/webapp /user/share/nginx/html nfs defaults      0 0
挂载选项补充说明:
客户端的root对于服务器端来说 啥也不是。
默认情况,服务端共享的目录,客户端的root是只具备other用户的权限。
默认共享选项包含root_squash,压缩root权限为nobody。
可以使用选项no_root_squash

iSCSI 服务器

一、iSCSI 服务介绍

1. 核心概念定义

  • SCSI:Small Computer System Interface(小型计算机系统接口),是用于计算机与智能设备(硬盘、软驱、光驱、打印机、扫描仪等)之间连接的标准。

  • iSCSI:Internet Small Computer System Interface(Internet 小型计算机系统接口),又称 IP SAN,由 IBM 公司研发的 IP SAN 技术。该技术将现有 SCSI 接口与以太网技术结合,基于 TCP/IP 协议连接 iSCSI 服务端(Target)和客户端(Initiator),使封装后的 SCSI 数据包可在互联网传输,最终实现 iSCSI 服务端为客户端提供存储服务。

配置 iSCSI 存储

配置服务端

# 1. 安装软件包
[root@webapp ~ 20:44:40]#  yum install -y targetcli targetd
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                                      | 4.4 kB  00:00:00     
epel-debuginfo/x86_64/metalink                            | 3.6 kB  00:00:00     * epel: ftp-stud.hs-esslingen.de* epel-debuginfo: ftp-stud.hs-esslingen.de
base                                                      | 3.6 kB  00:00:00     
extras                                                    | 2.9 kB  00:00:00     
updates                                                   | 2.9 kB  00:00:00     
软件包 targetcli-2.1.53-1.el7_9.noarch 已安装并且是最新版本
软件包 targetd-0.8.6-1.el7.noarch 已安装并且是最新版本# 2. 启用并启动服务
[root@webapp ~ 20:48:43]# systemctl enable target --now# 3. 准备共享块设备
server端添加一个200G SATA接口硬盘
创建分区1 100G 空间分享给客户端
[root@webapp ~ 20:49:08]# parted /dev/sdb mklabel gpt
警告: The existing disk label on /dev/sdb will be destroyed and all data on this
disk will be lost. Do you want to continue?
是/Yes/否/No? y                                                           
错误: Partition(s) 1 on /dev/sdb have been written, but we have been unable to
inform the kernel of the change, probably because it/they are in use.  As a
result, the old partition(s) will remain in use.  You should reboot now before
making further changes.
忽略/Ignore/放弃/Cancel? Ignore                                           
信息: You may need to update /etc/fstab.[root@webapp ~ 20:49:59]# parted /dev/sdb unit MiB mkpart dbapp 1 102401  
信息: You may need to update /etc/fstab.[root@webapp ~ 20:50:06]# lsblk /dev/sdb
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   0  200G  0 disk 
└─sdb1   8:17   0  100G  0 part # 4. 配置共享块存储
[root@webapp ~ 20:50:20]# targetcli
/> ls
o- / ................................................................................... [...]o- backstores ........................................................................ [...]| o- block ............................................................ [Storage Objects: 0]| o- fileio ........................................................... [Storage Objects: 0]| o- pscsi ............................................................ [Storage Objects: 0]| o- ramdisk .......................................................... [Storage Objects: 0]o- iscsi ...................................................................... [Targets: 0]o- loopback ................................................................... [Targets: 0#  /backstores 提供后端存储
#  /iscsi 配置如何共享后端存储##  后端存储添加块设备
/> /backstores/block create dev=/dev/sdb1 name=db01
Created block storage object db01 using /dev/sdb1.
/> ls /backstores/block/
o- block ................................................................ [Storage Objects: 1]o- db01 ...................................... [/dev/sdb1 (100.0GiB) write-thru deactivated]o- alua ................................................................. [ALUA Groups: 1]o- default_tg_pt_gp ..................................... [ALUA state: Active/optimized##  配置如何共享后端存储# 创建target,后续客户端 会扫描 target
target名称使用IQN来表示
不管是客户端还是服务端都通过IQN来表示自己。/> /iscsi/ create iqn.2025-09.cloud.zlx.server.x8664:db
Created target iqn.2025-09.cloud.laoma.server.x8664:db.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/> ls /iscsi/
o- iscsi ........................................................................ [Targets: 1]o- iqn.2025-09.cloud.zlx.server.x8664:db ....................................... [TPGs: 1]o- tpg1 ........................................................... [no-gen-acls, no-auth]o- acls ...................................................................... [ACLs: 0]o- luns ...................................................................... [LUNs: 0]o- portals ................................................................ [Portals: 1]o- 0.0.0.0:3260 ................................................................. [OK# 切换相应目录
/> cd /iscsi/iqn.2025-09.cloud.laoma.zlx.x8664:db/tpg1/
/iscsi/iqn.20...x8664:db/tpg1> ls
o- tpg1 ............................................................... [no-gen-acls, no-auth]o- acls .......................................................................... [ACLs: 0]o- luns .......................................................................... [LUNs: 0]o- portals .................................................................... [Portals: 1]o- 0.0.0.0:3260 ..................................................................... [OK# 配置放行客户端(iqn.2025-09.cloud.zlx.server.x8664:db)
/iscsi/iqn.20...x8664:db/tpg1> acls/ create iqn.2025-09.cloud.laoma.server.x8664:webapp
Created Node ACL for iqn.2025-09.cloud.laoma.server.x8664:webapp
Created mapped LUN 0.# 配置客户端可以访问的设备
/iscsi/iqn.20...x8664:db/tpg1> luns/ create /backstores/block/db01 
Created LUN 0.
Created LUN 0->0 mapping in node ACL iqn.2025-09.cloud.laoma.server.x8664:webapp# 验证配置
/iscsi/iqn.20...x8664:db/tpg1> ls
o- tpg1 ............................................................... [no-gen-acls, no-auth]o- acls .......................................................................... [ACLs: 1]| o- iqn.2025-09.cloud.zlx.server.x8664:webapp .............................. [Mapped LUNs: 1]|   o- mapped_lun0 .................................................. [lun0 block/db01 (rw)]o- luns .......................................................................... [LUNs: 1]| o- lun0 ...................................... [block/db01 (/dev/sdb1) (default_tg_pt_gp)]o- portals .................................................................... [Portals: 1]o- 0.0.0.0:3260 ..................................................................... [OK]# 退出配置
/iscsi/iqn.20...x8664:db/tpg1> exit

配置客户端

# 1. 安装软件包
[root@backup ~ 20:45:02]# yum install -y iscsi-initiator-utils
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                                      | 4.4 kB  00:00:00     
epel-debuginfo/x86_64/metalink                            | 3.6 kB  00:00:00     * epel: ftp-stud.hs-esslingen.de* epel-debuginfo: ftp-stud.hs-esslingen.de
base                                                      | 3.6 kB  00:00:00     
extras                                                    | 2.9 kB  00:00:00     
updates                                                   | 2.9 kB  00:00:00     
软件包 iscsi-initiator-utils-6.2.0.874-22.el7_9.x86_64 已安装并且是最新版本
无须任何处理# 2. 设置客户端的IQN
[root@backup ~ 20:55:56]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2025-09.cloud.zlx.webapp.x8664:webapp# 3. 扫描目标
[root@backup ~ 20:57:10]#  iscsiadm -m discovery -t st -p 192.168.237.106
192.168.237.106:3260,1 iqn.2025-09.cloud.zlx.webapp.x8664.db# 4. 挂载设备
[root@backup ~ 20:57:59]# iscsiadm -m node -Tiqn.2025-09.cloud.zlx.webapp.x8664.db -l
Logging in to [iface: default, target: iqn.2025-09.cloud.zlx.webapp.x8664.db, portal: 192.168.237.110,3260] (multiple)# 5. 识别为本地硬盘 sdb
[root@backup ~ 20:59:01]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda               8:0    0   50G  0 disk  
├─sda1            8:1    0    1G  0 part  /boot
└─sda2            8:2    0   49G  0 part  ├─centos-root 253:0    0   47G  0 lvm   /└─centos-swap 253:1    0    2G  0 lvm   [SWAP]
sdb               8:16   0  100G  0 disk  
└─mpatha        253:2    0  100G  0 mpath 
sr0              11:0    1  4.4G  0 rom   # 6. 使用存储
[root@backup ~ 20:59:04]# mkfs.xfs /dev/sdb
[root@backup ~ 20:59:23]# vim /etc/fstab
#最后添加一条记录
/dev/mapper/mpatha /usr/share/nginx/html xfs _netdev    0 0[root@backup ~ 20:59:37]#  mount -a
[root@backup ~ 21:00:17]#  df /usr/share/nginx/html/
文件系统                   1K-块    已用     可用 已用% 挂载点
/dev/mapper/centos-root 49250820 3426940 45823880    7% /[root@backup ~ 21:00:35]# echo Hello data From iSCSI for nginx > /usr/share/nginx/html/index.html
[root@backup ~ 21:00:50]# curl http://192.168.237.107/
Hello data From iSCSI for nginx
http://www.dtcms.com/a/414180.html

相关文章:

  • display this 概念、故障排错及题目
  • whisper-large-v3部署详细步骤,包括cpu和gpu方式,跟着做一次成功
  • 个人用云计算学习笔记 --16(DHCP 服务器)
  • 【Linux】基础IO与文件描述符
  • ​​FFmpeg 教程:从入门到精通,探索多媒体处理的瑞士军刀​
  • 使用ffmpeg8.0的whisper模块语音识别
  • 免费版Markdown 编辑器:Typora
  • 个人建网站有什么好处网站运营需要 做哪些工作
  • MySQL库、表的操作
  • FileProvider 配置必须针对 Android 7.0+(API 24+)做兼容
  • 混合止损策略在加密货币交易中的应用
  • Java模拟实现socket通信
  • iSCSI服务器
  • PyQt5 界面美化:从基础到高级的完整指南
  • 【Linux系列】让 Vim “跑”起来:实现一个会动的进度条
  • 上海商务网站建设wordpress 云相册
  • LLM - 构建AI智能体的完整指南:7步流程图与框架实战
  • springboot523基于Spring Boot的大学校园生活信息平台的设计与实现
  • Kubernetes 安全管理:认证、授权与准入控制全面解析
  • 江苏省住房城乡建设厅门户网站淄博企业网站
  • SpringBoot整合JakartaMail,实现发送邮箱功能
  • 开发 Flutter Windows 应用,如何安装工具链工具链和SDK
  • 杂记 10
  • 错误解决:Flutter找不到合适的Visual Studio 工具链
  • 基于KingbaseES集群管理实战:从部署运维到高可用架构深度解析
  • NXP - 用MCUXpresso IDE v25.6.136的工具链编译Smoothieware固件工程
  • 【影刀RPA】手机应用自动化
  • 有什么字体设计网站网站建设中的安全问题
  • 【开题答辩全过程】以 SpringBoot房屋出租管理系统为例,包含答辩的问题和答案
  • QT6中Column View与QUndoView功能与用法