NFS 服务器&&iSCSI 服务器

文章目录

NFS 服务器

NFS 服务介绍

NFS 是 Network File System 的缩写,即网络文件系统,最早由 Sun 公司开发,用来在 UNIX&Linux 系统间实现磁盘文件共享的一种方法。它的主要功能是通过网络让不同的主机系统之间可以共享文件或目录。NFS 客户端 (一般为应用服务器,例如 web) 可以通过挂载(mount)的方式将 NFS 服务端共享的数据目录挂载到 NFS 客户端本地系统中 (就是某一个挂载点下)。从 NFS 客户端的机器本地看,NFS 服务端共享的目录就好像是客户自己的磁盘分区或者目录一样,而实际上确是远端的 NFS 服务端的目录1。

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

NFS 支持的功能相当的多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS 的功能所对应的端口没有固定住,而是随机取用一些未被使用的小于 1024 的端口提供服务3。此时需要远程过程调用(RPC)的服务,RPC 最主要的功能是注册每个 NFS 功能所对应的端口,并且汇报给客户端,让客户端可以连结到正确的端口。RPC 定义了一种进程间通过网络进行交互通信的机制,它允许客户端进程通过网络向远程服务进程请求服务,而不需要了解服务器底层的通信协议详细信息4。

  • NFS 服务器:导出文件系统目录及其内容5。
  • NFS 客户端:挂载服务器导出的文件系统到本地6。

部署服务

NFS 服务由 nfs-utils 软件包提供,RHEL8 默认安装了该软件包7。

配置服务端

  1. 安装软件包

    bash 复制代码
    [root@server ~ 16:54:26]# yum install -y nfs-utils
  2. 准备服务用到的各种材料,例如用户、目录等

    bash 复制代码
    [root@server ~ 16:56:06]# mkdir -p /shares/webapp/
    [root@server ~ 16:57:28]# echo Hello World From Nginx > /shares/webapp/index.html 
    
    # 客户端nginx用户的UID为998,客户端nginx用户可以读写该目录
    [root@server ~ 16:58:33]# chown 998 /shares/webapp
    [root@server ~ 16:59:51]# ll -d /shares/webapp
    drwxr-xr-x 2 998 root 42 9月  26 10:31 /shares/webapp
    1. 配置服务器(修改配置文件)

      bash 复制代码
      [root@server ~ 17:03:45]# vim /etc/exports.d/webapp.exports
    2. 启用并启动服务

      bash 复制代码
      [root@server ~ 17:05:21]# systemctl enable nfs-server.service --now
      [root@server ~ 17:05:33]# systemctl is-active nfs-server.service 
      active
    3. 配置防火墙

      bash 复制代码
      [root@server ~ 17:06:05]# systemctl is-active firewalld.service 
      unknown

配置客户端

  1. 准备web服务器

    bash 复制代码
    [root@webapp ~ 15:57:36]# yum install -y nginx
    
    [root@webapp ~ 17:08:29]# id nginx
    uid=998(nginx) gid=996(nginx) 组=996(nginx)
    [root@webapp ~ 17:08:48]# systemctl enable nginx.service --now
    Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
  2. 安装NFS客户端

    bash 复制代码
    [root@webapp ~ 17:09:39]# yum install -y nfs-utils
  3. 查看共享并挂载

    bash 复制代码
    [root@webapp ~ 17:09:56]# showmount -e 10.1.8.10
    Export list for 10.1.8.10:
    /shares/webapp 10.1.8.0/24
    
    [root@webapp ~ 17:11:16]# mount 10.1.8.10:/shares/webapp /usr/share/nginx/html
    [root@webapp ~ 17:12:09]# df -h /usr/share/nginx/html
    文件系统                  容量  已用  可用 已用% 挂载点
    10.1.8.10:/shares/webapp   50G  1.6G   49G    4% /usr/share/nginx/html
  4. 测试web服务器页面

    bash 复制代码
    [root@webapp ~ 17:13:23]# curl 10.1.8.11
    Hello World From Nginx
  5. 持久化挂载

    bash 复制代码
    [root@webapp ~ 17:13:32]# vim /etc/fstab 
    # 最后添加一条记录
    10.1.8.10:/shares/webapp /usr/share/nginx/html nfs defaults        0 0

6.重启服务器验证

挂载选项补充说明:

客户端的root对于服务器端来说 啥也不是。

默认情况,服务端共享的目录,客户端的root是只具备other用户的权限。

默认共享选项包含root_squash,压缩root权限为nobody。

可以使用选项no_root_squash

配置 iSCSI 存储

iSCSI 服务器

iSCSI 服务介绍

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

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

  • 通常,iSCSI 使用专用的 10Gb 以太网或更高速的网络,以最大化性能。
  • 从物理服务器到存储的电缆通常封闭在数据中心内,且理想情况下不直接连接到 LAN 网络,因此 SAN 流量通常不加密(以最大化性能)。若需实现 WAN 安全,iSCSI 管理员可使用 IPsec 加密流量。

iSCSI 架构

iSCSI 服务采用 C/S 架构,客户端系统上访问的 iSCSI 目标会显示为本地未格式化的 SCSI 块设备,等同于通过 SCSI 布线、FC 直连或 FC 交换光线连接的设备。

核心组件说明

组件 说明
Initiator iSCSI 客户端,通常以软件方式部署,也可使用 iSCSI Host Bus Adapters(HBAs)硬件;必须具有唯一名称(IQN)
Target iSCSI 服务器上的存储资源,必须具有唯一名称(IQN);每个目标提供一个或多个块设备(LUN),一台服务器可提供多个目标
IQN(iSCSI Qualified Name) 全球唯一名称,用于标识发起者和目标,格式:iqn.YYYY-MM.com.reversed.domain:name_string- YYYY-MM:年和月(如 2020 年 6 月为 2020-06,确保唯一性)- com.reversed.domain:反向域名(如 server.redhat.fun 的反向域名为 cloud.laoma.www)- name_string:标识特定目标,若服务器仅一个目标可省略
Portal 指定服务器监听的地址和端口(如 172.25.250.50:3260)
LUN(Logical Unit Number) 代表 Target 提供的块设备,每个目标可提供一个或多个 LUN
ACL(Access Control List) 使用 Initiator 的 IQN 限制客户端访问 Target
TPG(Target Portal Group) 目标的完整配置,包含 Portal、LUN 和 ACL;几乎所有目标使用一个 TPG,高级配置可定义多个
discovery 查询服务器上的 Target 列表
login 向 Target 验证,验证通过后可使用 Target 提供的块设备

配置服务端

bash 复制代码
[root@server ~ 17:24:14]# yum install -y targetcli targetd
  1. 启用并启动服务

    bash 复制代码
    [root@server ~ 17:26:10]# systemctl enable target --now
    Created symlink from /etc/systemd/system/multi-user.target.wants/target.service to /usr/lib/systemd/system/target.service.
  2. 准备共享块设备

    server端添加一个200G SATA接口硬盘

    创建分区1 100G 空间分享给客户端

    bash 复制代码
    [root@server ~ 17:28:09]# lsblk 
    NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda               8:0    0  100G  0 disk 
    ├─sda1            8:1    0    1G  0 part /boot
    └─sda2            8:2    0   99G  0 part 
      ├─centos-root 253:0    0   50G  0 lvm  /
      ├─centos-swap 253:1    0    2G  0 lvm  [SWAP]
      └─centos-home 253:2    0   47G  0 lvm  /home
    sdb               8:16   0  200G  0 disk 
    sr0              11:0    1  4.4G  0 rom  
    
    [root@server ~ 17:29:38]# parted /dev/sdb mklabel gpt
    信息: You may need to update /etc/fstab.
    
                                                                         [root@server ~ 17:30:59]# parted /dev/sdb unit MiB mkpart dbapp 1 102401
    信息: You may need to update /etc/fstab.
    
                                                                         [root@server ~ 17:32:53]# 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.配置共享块存储

    bash 复制代码
    [root@server ~ 17:39:51]# targetc
    targetcli   targetclid  targetctl   
    [root@server ~ 17:39:51]# targetcli
    Warning: Could not load preferences file /root/.targetcli/prefs.bin.
    targetcli shell version 2.1.53
    Copyright 2011-2013 by Datera, Inc and others.
    For help on commands, type 'help'.
    
    /> 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/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]
    /> /iscsi/ create iqn.2025-09.cloud.laoma.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.laoma.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.server.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]
    /iscsi/iqn.20...x8664:db/tpg1> acls/ create iqn.2025-09.cloud.wsc.server.x8664:webapp
    Created Node ACL for iqn.2025-09.cloud.wsc.server.x8664:webapp
    /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.wsc.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.wsc.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
    Global pref auto_save_on_exit=true
    Configuration saved to /etc/target/saveconfig.json
        
        

配置客户端

  1. 安装软件包

    bash 复制代码
    [root@client ~ 17:23:11]# yum install -y iscsi-initiator-utils
  2. 设置客户端的IQN

    bash 复制代码
    [root@client ~ 18:01:32]# vim /etc/iscsi/initiatorname.iscsi 

    3.扫描目标

bash 复制代码
[root@client ~ 18:04:38]#  iscsiadm -m discovery -t st -p 10.1.8.10
10.1.8.10:3260,1 iqn.2025-09.cloud.laoma.server.x8664:db

#选项说明:
-m discovery 发现模式
-t st 找target(sendtarget)
-p 10.1.8.10 服务地址

4.挂载设备

bash 复制代码
[root@client ~ 18:11:15]# iscsiadm -m node -T iqn.2025-09.cloud.laoma.server.x8664:db -l
Logging in to [iface: default, target: iqn.2025-09.cloud.laoma.server.x8664:db, portal: 10.1.8.10,3260] (multiple)
Login to [iface: default, target: iqn.2025-09.cloud.laoma.server.x8664:db, portal: 10.1.8.10,3260] successful.

#选项说明:
-m node 登录模式
-T iqn.2025-09.cloud.laoma.server.x8664:db 服务器IQN
-l login

5.识别为本地硬盘 sdb

复制代码
[root@client ~ 18:13:45]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  100G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   99G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  ├─centos-swap 253:1    0    2G  0 lvm  [SWAP]
  └─centos-home 253:2    0   47G  0 lvm  /home
sdb               8:16   0  100G  0 disk 
sr0              11:0    1  4.4G  0 rom  
  1. 使用存储
bash 复制代码
[root@client ~ 18:14:18]# mkfs.xfs /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=6553600 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=26214400, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=12800, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0


[root@client ~ 18:14:36]# vim /etc/fstab 
# 最后添加一条记录
/dev/sdb /usr/share/nginx/html xfs defaults        0 0

[root@client ~ 18:18:05]# tail -n 1 /etc/fstab
/dev/sdb /usr/share/nginx/html xfs defaults 


[root@webapp ~ 18:23:49]# mount -a
[root@webapp ~ 18:24:23]# df /usr/share/nginx/html/
文件系统           1K-块  已用      可用 已用% 挂载点
/dev/sdb       104806400 32992 104773408    1% /usr/share/nginx/html

[root@webapp ~ 18:25:06]#  echo Hello data From iSCSI for nginx > /usr/share/nginx/html/index.html
[root@webapp ~ 18:25:29]# curl http://10.1.8.11/
Hello data From iSCSI for nginx

oot@webapp ~ 18:23:49]# mount -a

root@webapp \~ 18:24:23\]# df /usr/share/nginx/html/ 文件系统 1K-块 已用 可用 已用% 挂载点 /dev/sdb 104806400 32992 104773408 1% /usr/share/nginx/html \[root@webapp \~ 18:25:06\]# echo Hello data From iSCSI for nginx \> /usr/share/nginx/html/index.html \[root@webapp \~ 18:25:29\]# curl http://10.1.8.11/ Hello data From iSCSI for nginx ``` ```

相关推荐
准时准点睡觉2 小时前
SQL Server提示:安装程序无法与下载服务器联系。请提供 Microsoft机器学习服务器安装文件的位置。。。。
服务器·sql
爱学习的小道长2 小时前
Python调用优云智算安装的ComfyUI服务器
服务器·开发语言·python
云游2 小时前
Zabbix7.4.8(一):通过Zabbix agent 2监控postgresql相关指标
运维·postgresql·zabbix
你什么冠军?2 小时前
linux入门4.5(NFS服务器和iSCSI服务器)
linux·运维·服务器
什么半岛铁盒2 小时前
C++项目:仿muduo库高并发服务器------EventLoop模块的设计
linux·服务器·c++·mysql·ubuntu
Kaede62 小时前
如何快速排查服务器宕机故障
运维·服务器
Rhys..4 小时前
敏捷(Agile)流程
运维·敏捷流程
dessler5 小时前
Hadoop HDFS-认证(Kerberos) 部署与配置
linux·运维·hdfs
云游5 小时前
IP地址管理:docker方式部署phpIPAMv1.7.3
运维·docker·ip·ipv4·ipv6