二十二、NFS和 iSCSI

wangzhaoyang 发布于 20 小时前 4 次阅读 网络工程中的Linux系统 无~ 2258 字


NFS(Network File System)是一种分布式文件系统协议,允许客户端系统通过网络访问服务器上的文件。它通常用于 UNIX 或 Linux 系统之间共享文件,提供类似本地磁盘的访问方式。

1. NFS 基本概念

  • NFS 服务器:存储共享文件的服务器。
  • NFS 客户端:访问共享文件的客户端。
  • NFS 共享:服务器上指定的文件或目录,可以通过 NFS 协议提供给客户端访问。
  • 挂载:客户端将服务器上的共享目录挂载到本地目录。

2. 安装 NFS 服务

在服务器端和客户端都需要安装相关的 NFS 服务工具。

2.1. 在 CentOS 8 系统上安装 NFS
  • 安装 NFS 服务器和客户端
  [root@localhost ~]# sudo dnf install nfs-utils
2.2. 启动 NFS 服务
  • 启动 NFS 服务并设置开机自启:
  [root@localhost ~]# sudo systemctl enable --now nfs-server

3. 配置 NFS 服务器

3.1. 配置共享目录
  • 创建一个共享目录:
  [root@localhost ~]# sudo mkdir /mnt/nfs_share
  [root@localhost ~]# sudo chown nobody:nogroup /mnt/nfs_share
  [root@localhost ~]# sudo chmod 777 /mnt/nfs_share
3.2. 配置 /etc/exports 文件
  • /etc/exports 文件用于定义哪些目录可以共享,以及允许哪些客户端访问。
    编辑 /etc/exports 文件并添加共享配置:
  [root@localhost ~]# sudo vim /etc/exports

在文件中添加如下内容:

  /mnt/nfs_share 192.168.1.0/24(rw,sync,no_root_squash)
  • /mnt/nfs_share:共享的目录路径。
  • 192.168.1.0/24:允许访问此共享的客户端子网。
  • (rw,sync,no_root_squash):权限设置,表示读写访问、同步操作、不将 root 权限映射为 nobody 用户。
3.3. 导出共享目录
  • 在修改 /etc/exports 文件后,使用 exportfs 命令重新加载配置:
  [root@localhost ~]# sudo exportfs -r
3.4. 防火墙配置
  • 如果防火墙启用了,需要允许 NFS 服务的相关端口通过:
  [root@localhost ~]# sudo firewall-cmd --permanent --add-service=nfs
  [root@localhost ~]# sudo firewall-cmd --permanent --add-service=mountd
  [root@localhost ~]# sudo firewall-cmd --permanent --add-service=rpc-bind
  [root@localhost ~]# sudo firewall-cmd --reload

4. 配置 NFS 客户端

4.1. 挂载 NFS 共享
  • 客户端挂载 NFS 共享目录到本地路径:
  [root@localhost ~]# sudo mkdir /mnt/nfs_client
  [root@localhost ~]# sudo mount -t nfs 192.168.1.100:/mnt/nfs_share /mnt/nfs_client
  • 192.168.1.100:NFS 服务器的 IP 地址。
  • /mnt/nfs_share:服务器上共享的目录路径。
  • /mnt/nfs_client:客户端上挂载点的本地路径。
4.2. 自动挂载配置
  • 如果希望每次启动时自动挂载 NFS 共享,可以编辑 /etc/fstab 文件:
  [root@localhost ~]# sudo nano /etc/fstab

添加以下行:

  192.168.1.100:/mnt/nfs_share /mnt/nfs_client nfs defaults 0 0
4.3. 查看挂载的 NFS 共享
  • 使用 mount 命令查看挂载状态:
  [root@localhost ~]# mount | grep nfs

5. NFS 常用操作

5.1. 检查 NFS 服务器的共享
  • 使用 showmount 命令查看 NFS 服务器上共享的目录:
  [root@localhost ~]# showmount -e 192.168.1.100
5.2. 卸载 NFS 共享
  • 使用 umount 命令卸载 NFS 共享:
  [root@localhost ~]# sudo umount /mnt/nfs_client
5.3. 查看 NFS 服务状态
  • 使用 systemctl 命令检查 NFS 服务的状态:
  [root@localhost ~]# sudo systemctl status nfs-server

6. NFS 配置优化

  • 性能优化:通过 NFS 的 asyncno_subtree_checkno_root_squash 等选项来提高性能或增加访问控制。
  • 安全性:为了提高安全性,可以通过 firewalldiptables 限制只允许特定的 IP 地址或子网访问 NFS 服务。

7. NFS 服务的常见问题

7.1. 客户端无法访问 NFS 共享
  • 检查客户端的挂载命令是否正确。
  • 检查防火墙配置是否正确,确保 NFS 相关端口开放。
7.2. 权限问题

配置文件:/etc/exports

格式:

<共享目录> <客户端IP>(<选项>)

共享权限选项

  • ro:只读权限,客户端只能读取。
  • rw:读写权限,客户端可以读取和写入。
  • sync:写操作同步,确保数据写入后再返回确认。
  • async:写操作异步,提高性能,但可能丢失数据。 用户映射选项
  • root_squash:将客户端的 root 用户映射为 nobody 用户(限制 root 权限)。
  • no_root_squash:允许客户端的 root 用户访问共享并保留 root 权限。
  • all_squash:所有客户端用户都映射为 nobody 用户(限制普通用户权限)。
  • no_all_squash:客户端的普通用户映射为本地相同 UID 和 GID 的用户(保留客户端用户权限)。 常见示例
  • 只读共享:
  /share 192.168.40.0/24(ro,sync)
  • 读写共享:
  /share 192.168.40.0/24(rw,sync)
  • 允许 root 用户访问:
  /share 192.168.40.0/24(rw,sync,no_root_squash)
  • 限制所有普通用户访问:
  /share 192.168.40.0/24(rw,sync,all_squash)

8. 相关命令汇总

命令描述
sudo systemctl start nfs-server启动 NFS 服务器
sudo systemctl stop nfs-server停止 NFS 服务器
sudo exportfs -r重新加载 NFS 共享配置
sudo showmount -e <IP>显示 NFS 服务器上共享的目录
sudo mount -t nfs <IP>:/path /mnt挂载 NFS 共享目录到本地
sudo umount /mnt/nfs_client卸载 NFS 共享目录
sudo systemctl status nfs-server查看 NFS 服务器状态

1. iSCSI 概述

iSCSI(Internet Small Computer System Interface)是一种基于 IP 网络的存储协议,允许客户端(称为 iSCSI 发起者)通过网络访问存储设备(称为 iSCSI 目标)。它通过使用现有的以太网基础设施来传输 SCSI 命令,并使存储设备看起来像本地磁盘一样被操作。

2. iSCSI 组件

  • iSCSI 发起者(Initiator):请求存储服务的客户端,通常是操作系统。
  • iSCSI 目标(Target):提供存储服务的设备,通常是 SAN 存储或使用 iSCSI 软件构建的存储服务器。

3. iSCSI 配置流程

iSCSI 配置一般包括两大部分:目标端(Target)和发起端(Initiator)。以下是典型的配置流程:

3.1 iSCSI 目标配置

  1. 安装 iSCSI 目标软件: 在 Linux 上,常见的 iSCSI 目标软件是 targetcliLIO。 在 CentOS 8 上安装 targetcli
   sudo dnf install targetcli
  1. 创建存储设备(LUN): 假设我们要共享 /dev/sdb 作为 iSCSI 目标。
   sudo targetcli
   /backstores/block create name=mydisk dev=/dev/sdb
  1. 创建 iSCSI 目标: 目标 ID 是用来标识 iSCSI 目标的标识符,通常是一个整数。
   /iscsi create iqn.2024-12.com.example:storage.target1
  1. 映射存储设备到目标: 将刚才创建的存储设备映射到目标。
   /iscsi/iqn.2024-12.com.example:storage.target1/tpg1/luns create /backstores/block/mydisk
  1. 配置访问控制: 允许特定的发起者连接到此 iSCSI 目标。
   /iscsi/iqn.2024-12.com.example:storage.target1/tpg1/acls create iqn.2024-12.com.example:initiator1
  1. 启动 iSCSI 服务: 配置完成后,需要启动 iSCSI 目标服务。
   sudo systemctl start target
   sudo systemctl enable target

3.2 iSCSI 发起者配置

在 iSCSI 发起端,你需要连接到 iSCSI 目标。

  1. 安装 iSCSI 发起者软件: 在 CentOS 8 上,可以通过以下命令安装 iSCSI 发起者。
   sudo dnf install iscsi-initiator-utils
  1. 启动并启用 iSCSI 服务
   sudo systemctl start iscsi
   sudo systemctl enable iscsi
  1. 发现 iSCSI 目标: 使用 iscsiadm 工具发现目标设备,假设目标的 IP 地址是 192.168.100.16
   sudo iscsiadm -m discovery -t st -p 192.168.100.16
  1. 登录 iSCSI 目标: 一旦发现目标,就可以登录到目标。
   sudo iscsiadm -m node -T iqn.2024-12.com.example:storage.target1 -p 192.168.100.16 --login
  1. 验证连接: 使用 lsblkfdisk -l 查看新挂载的设备。
   lsblk
  1. 创建文件系统并挂载: 假设新设备为 /dev/sdb,可以创建文件系统并挂载它。
   sudo mkfs.ext4 /dev/sdb
   sudo mount /dev/sdb /mnt

3.3 iSCSI 发起者自动登录

如果你希望发起者在重启后自动登录到目标,可以使用以下命令设置自动登录:

sudo iscsiadm -m node -T iqn.2024-12.com.example:storage.target1 -p 192.168.1.100 --op update --name node.startup --value automatic

4. 常见问题及解决方法

  • iSCSI 目标不可访问:检查防火墙设置,确保 iSCSI 端口(默认端口为 3260)没有被阻止。
  sudo firewall-cmd --add-port=3260/tcp --permanent
  sudo firewall-cmd --reload
  • 连接失败:检查发起者和目标之间的网络连接,确保没有防火墙或网络故障。
  • 磁盘映射错误:确认 LUN 是否正确映射到目标,使用 targetcli 检查目标配置。

5. iSCSI 安全性

  • 使用 CHAP(挑战握手认证协议) 进行身份验证。可以在
  targetcli

中配置目标的 CHAP 密码,并在发起者端使用相应的配置进行登录。

  /iscsi/iqn.2024-12.com.example:storage.target1/tpg1/set attribute authentication=0

6. iSCSI 性能调优

  • 使用 多路径 I/O(MPIO) 优化存储性能。安装 device-mapper-multipath 包,并配置多个路径到 iSCSI 目标。
  • 配置 网络优化,例如启用 Jumbo Frames、使用 10Gbps 网络连接等。