个人用云计算学习笔记 --18(NFS 服务器、iSCSI 服务器)
文章目录
- NFS 服务器
- 一、NFS 服务基础概念
- 工作逻辑
- 二、NFS 与 RPC 的关联
- 1. NFS 的端口特性
- 2. RPC 的作用
- 三、NFS 服务部署(基于 RHEL8)
- 1. 软件包基础
- 2. 部署步骤(命令行)
- 四、NFS 导出配置(服务端共享规则)
- 1. 配置文件说明
- 2. 客户端指定方式(常用)
- 3. 核心导出选项
- 4. 配置生效命令
- 五、NFS 导出监视(服务端)
- 六、NFS 客户端配置
- 1. 客户端操作步骤(命令行)
- 2. 持久化挂载(重启后仍生效)
- iSCSI 服务器
- 一、iSCSI 服务基础
- 1. 概念定义
- 2. 关键特性
- 二、iSCSI 核心组件
- 三、iSCSI Target 配置(服务端)
- 1. 前期准备:部署软件与基础配置
- 2. targetcli 工具特性
- 3. 核心配置步骤(交互式示例)
- (1)配置 backstore 对象
- (2)配置 Target IQN
- (3)配置 LUN
- (4)配置 ACL(允许客户端访问)
- (5)配置 Portal(指定监听 IP)
- 4. 非交互式配置(命令行模式)
- 四、iSCSI 客户端配置(访问存储)
- 1. 前期准备:安装与配置启动器
- 2. 连接 iSCSI 目标
- (1)发现目标
- (2)登录目标
- (3)验证设备
- 3. 格式化与持久化挂载
- (1)格式化设备
- (2)持久化挂载
- 4. 断开目标连接
- 五、故障处理
- 1. 登录失败(发现成功但登录失败)
- 六、多路径访问(提升可用性与性能)
- 1. 概念与作用
- 2. 服务端准备(配置双 Portal)
- 3. 客户端配置多路径
- (1)安装与启用
- (2)多路径设备位置
- 4. 多路径监控与策略
- (1)监控命令
- (2)路径组策略
- (3)故障切换逻辑
- 5. 多路径配置文件(/etc/multipath.conf)
- (1)配置结构与优先级
- (2)关键配置项
- 6. 多路径设备管理
- (1)增加分区
- (2)删除多路径
NFS 服务器
一、NFS 服务基础概念
工作逻辑
- 客户端视角:NFS 客户端(多为应用服务器,如 web 服务器)通过 “挂载(mount)” 操作,将 NFS 服务端的共享目录挂载到本地挂载点,从本地看,该共享目录如同自身磁盘分区 / 目录,实际存储在远端服务端。
- 企业应用场景:在企业集群架构中,主要用于存储视频、图片、附件等静态资源,例如中小网站的 BBS 图片、用户头像、上传附件等,统一存放在 NFS 共享目录中。
二、NFS 与 RPC 的关联
1. NFS 的端口特性
NFS 支持功能多,每个功能需启动对应程序并占用端口,但端口不固定,随机使用未被占用的小于 1024 的端口,导致客户端无法直接获取服务端端口。
2. RPC 的作用
- 全称:远程过程调用(Remote Procedure Call)。
- 核心功能:注册 NFS 各功能对应的端口,并向客户端汇报,使客户端能连接到正确端口;同时定义进程间网络交互通信机制,让客户端无需了解服务器底层通信协议即可请求服务。
- 关键组件:依赖
portmap
服务实现端口注册与映射。
三、NFS 服务部署(基于 RHEL8)
1. 软件包基础
NFS 服务由nfs-utils
软件包提供,RHEL8 默认已安装,若需手动安装可执行对应命令。
2. 部署步骤(命令行)
步骤 | 操作目的 | 执行命令 | |
---|---|---|---|
1 | 安装nfs-utils 软件包 | [root@server~]# dnf install -y nfs-utils | |
2 | 准备共享目录所属用户(指定 UID=1000,避免权限问题) | 1. 创建用户:[root@server~]# useradd -u 1000 laoma 2. 设置密码:`[root@server~]# echo redhat | passwd --stdin laoma` |
3 | 创建共享目录并设置权限 | 1. 创建目录:[root@server~]# mkdir /shares/nfs 2. 更改所有者:[root@server~]# chown laoma /shares/nfs | |
4 | 启用并启动 NFS 服务 | [root@server~]# systemctl enable nfs-server --now | |
5 | 配置防火墙(开放 NFS 相关服务端口) | 1. 永久开放服务:[root@server~]# firewall-cmd --permanent --add-service=nfs --add-service=rpc-bind --add-service=mountd 2. 重载防火墙:[root@server~]# firewall-cmd --reload |
四、NFS 导出配置(服务端共享规则)
1. 配置文件说明
- 主配置文件:
/etc/exports
。 - 辅助配置目录:
/etc/exports.d/
,该目录下以.exports
结尾的文件均生效,相比直接编辑主文件,更易管理且能降低配置破坏风险。 - 语法规则:每一行对应一个 “导出点”,格式为
[共享目录路径] [客户端1] [选项1] [客户端2] [选项2]...
,且禁止将 SMB 共享目录作为 NFS 共享目录,否则可能导致文件损坏或一致性问题。
2. 客户端指定方式(常用)
客户端类型 | 示例 | 说明 |
---|---|---|
可解析 DNS 主机名 | /shares/nfs client.redhat.fun | 仅client.redhat.fun 主机可挂载该目录 |
DNS 通配符 | /shares/nfs *.redhat.fun | redhat.fun 域下所有主机可访问 |
IPv4 地址 | /shares/nfs 10.1.8.11 | 仅10.1.8.11 这一 IP 可访问 |
IPv4 网络 | /shares/nfs 10.1.8.0/24 或 /shares/nfs 10.1.8.0/255.255.255.0 | 10.1.8.0/24 网段所有主机可访问 |
IPv6 地址 | /shares/nfs fde2:6494:1e09:2::20 | 仅该 IPv6 地址主机可访问 |
IPv6 网络 | /shares/nfs fde2:6494:1e09:2::/64 | 该 IPv6 网段所有主机可访问 |
多客户端 | /shares/nfs 10.1.8.0/24 client.redhat.fun *.example.net | 多个客户端用空格分隔,均能访问 |
3. 核心导出选项
选项 | 功能说明 | 示例 |
---|---|---|
rw | 允许客户端读 / 写访问(默认是ro 只读) | /shares/nfs client.redhat.fun(rw) (该主机有读写权限) |
no_root_squash | 禁用 “root 用户映射”:默认客户端 root 用户访问时,服务端将其视为nobody 用户;启用此选项后,客户端 root 可拥有服务端实际 root 权限(RHEL7 映射nfsnobody ,RHEL8 映射nobody ) | /shares/nfs client.redhat.fun(rw,no_root_squash) |
4. 配置生效命令
修改导出配置后,需执行以下命令使更改生效:
- 方式 1:
[root@server~]# exportfs -r
(重新读取配置) - 方式 2:
[root@server~]# systemctl reload nfs-server
(重载 NFS 服务) - 方式 3:
[root@server~]# exportfs -av
(显示详细信息并生效)
五、NFS 导出监视(服务端)
通过exportfs
命令查看当前导出状态:
- 查看导出的目录与客户端:
[root@server~]# exportfs
,示例输出:/shares/nfs 10.1.8.0/24
- 查看导出目录及选项(含默认选项):
[root@server~]# exportfs -v
,示例输出:/shares/nfs 10.1.8.0/24(sync,rw,secure,no_root_squash,...)
六、NFS 客户端配置
1. 客户端操作步骤(命令行)
步骤 | 操作目的 | 执行命令 |
---|---|---|
1 | 安装nfs-utils 软件包 | [root@client~]# dnf install -y nfs-utils |
2 | 创建与服务端一致 UID 的用户(避免权限问题) | [root@client~]# useradd -u 1000 laoma |
3 | 查看服务端提供的共享目录 | [laoma@client~]$ showmount -e server (server 为服务端主机名 / IP),示例输出:Export list for server: /shares/nfs 10.1.8.0/24 |
4 | 创建本地挂载点并挂载 | 1. 创建挂载点:[root@client~]# mkdir /mnt/nfs 2. 挂载 NFS 共享:[root@client~]# mount -t nfs server:/shares/nfs /mnt/nfs |
5 | 权限验证 | 1. root 用户无权限创建文件:[root@client~]# touch /mnt/nfs/root-f1 (提示Permission denied )2. laoma 用户有权创建文件:[laoma@client~]$ touch /mnt/nfs/laoma-f1 |
2. 持久化挂载(重启后仍生效)
编辑/etc/fstab
文件,添加以下内容:
server:/shares/nfs /mnt/nfs nfs defaults 0 0
- 格式说明:
[服务端共享路径] [本地挂载点] [文件系统类型] [挂载选项] [dump备份标记] [fsck检查顺序]
iSCSI 服务器
一、iSCSI 服务基础
1. 概念定义
- SCSI:小型计算机系统接口,是计算机与硬盘、光驱、打印机等智能设备的连接标准。
- iSCSI(Internet Small Computer System Interface):又称 IPSAN,由 IBM 研发,将 SCSI 接口与以太网技术结合,基于 TCP/IP 协议连接服务端(Target)和客户端(Initiator),实现 SCSI 数据包在互联网传输,最终让服务端为客户端提供存储服务。
2. 关键特性
- 网络要求:通常使用专用 10Gb 以太网或更高速网络,以最大化性能。
- 流量安全:数据中心内 SAN 流量一般不加密(提升性能),若需 WAN 安全,管理员可通过 IPsec 加密流量。
- 架构模式:采用 C/S 架构,客户端的 iSCSI 目标显示为本地未格式化 SCSI 块设备,与 SCSI 布线、FC 直连等方式连接的设备功能等同。
二、iSCSI 核心组件
组件名称 | 英文全称 | 功能说明 | 关键要求 / 格式 |
---|---|---|---|
发起者 | Initiator | iSCSI 客户端,可软件部署或使用 iSCSI HBA 硬件,需唯一标识 | 必须有唯一 IQN |
目标 | Target | iSCSI 服务器上的存储资源,提供块设备或逻辑单元(LUN) | 需唯一 IQN,一台服务器可提供多个目标,多数目标仅提供一个设备 |
全球唯一名称 | IQN(iSCSI Qualified Name) | 标识 Initiator 和 Target 的全球唯一名称 | 格式:iqn.YYYY-MM.com.reversed.domain:name_string例:iqn.2024-12.cloud.qy:disk1,YYYY-MM 为创建年月,确保唯一性 |
门户 | Portal | 指定服务器监听的地址和端口 | 例:172.25.250.50:3260 |
逻辑单元号 | LUN(Logical Unit Number) | 代表 Target 提供的块设备 | 每个 Target 可提供一个或多个 LUN |
访问控制列表 | ACL(Access Control List) | 限制客户端访问 Target 的权限 | 通过 Initiator 的 IQN 实现访问控制 |
目标门户组 | TPG(Target Portal Group) | Target 的完整配置集合 | 包含 Portal、LUN 和 ACL,多数 Target 用一个 TPG,高级配置可多个 |
发现 | Discovery | 查询服务器上的 Target 列表 | 客户端获取可连接 Target 的必要步骤 |
登录 | Login | 客户端向 Target 验证身份 | 验证通过后可使用 Target 提供的块设备 |
三、iSCSI Target 配置(服务端)
1. 前期准备:部署软件与基础配置
-
安装软件:使用
dnf install -y targetcli
安装 targetcli 工具(提供 targetcli 命令)。 -
启用服务:通过
systemctl enable --now target
启用并启动 target 服务。 -
配置防火墙
:开放 iSCSI 目标服务端口,命令如下:
firewall-cmd --permanent --add-service=iscsi-target firewall-cmd --reload
2. targetcli 工具特性
- 支持交互式和非交互式执行。
- 采用分层树组织目标对象,支持 Linux 常用导航命令(cd、ls、pwd)。
- 支持 Tab 键补全,配置保存在
/etc/target/saveconfig.json
(退出交互式模式自动保存,非交互式需显式执行targetcli saveconfig
)。
3. 核心配置步骤(交互式示例)
(1)配置 backstore 对象
backstore 是 Target 的存储来源,有 4 种类型:
类型 | 说明 | 示例命令 |
---|---|---|
block | 服务器中的块设备(磁盘、分区、逻辑卷) | cd /backstores/block``create myblock1 /dev/vdb (创建名为 myblock1,关联 /dev/vdb 的 block 对象) |
fileio | 本地文件系统中的常规文件(作为磁盘映像) | cd /backstores/fileio``create myfile1 /data/disk.img 10G (创建 10G 大小的文件映像) |
pscsi | 物理 SCSI 设备,允许客户端访问服务器物理 SCSI 设备 | cd /backstores/pscsi``create mypscsi1 /dev/sdc |
ramdisk | 内存中的磁盘设备,数据不持久(重启丢失) | cd /backstores/ramdisk``create myram1 5G (创建 5G 内存磁盘) |
(2)配置 Target IQN
进入 iscsi 目录创建 IQN:
cd /iscsi
create iqn.2024-12.cloud.qy:disk1 # 创建IQN为iqn.2024-12.cloud.qy:disk1的Target
创建后自动生成默认 TPG(含监听所有 IP 的 Portal:0.0.0.0:3260)。
(3)配置 LUN
将 backstore 对象映射为 LUN,供客户端访问:
cd /iscsi/iqn.2024-12.cloud.qy:disk1/tpg1/luns
create /backstores/block/myblock1 # 将myblock1映射为LUN 0
(4)配置 ACL(允许客户端访问)
通过客户端 IQN 授权访问,客户端 IQN 存储在/etc/iscsi/initiatorname.iscsi
:
cd /iscsi/iqn.2024-12.cloud.qy:disk1/tpg1/acls
create iqn.2021-05.fun.redhat.server:client # 允许该IQN的客户端访问
(5)配置 Portal(指定监听 IP)
删除默认全 IP 监听,配置指定 IP:
cd /iscsi/iqn.2024-12.cloud.qy:disk1/tpg1/portals
delete 0.0.0.0 3260 # 删除默认Portal
create 10.1.8.10 3260 # 配置监听10.1.8.10:3260
4. 非交互式配置(命令行模式)
直接通过一条命令完成配置,示例:
# 创建backstore
targetcli /backstores/block create myblock1 /dev/vdb
# 创建Target IQN
targetcli /iscsi create iqn.2024-12.cloud.qy:disk1
# 配置LUN
targetcli /iscsi/iqn.2024-12.cloud.qy:disk1/tpg1/luns create /backstores/block/myblock1
# 配置ACL
targetcli /iscsi/iqn.2024-12.cloud.qy:disk1/tpg1/acls create iqn.2021-05.fun.redhat.server:client
# 配置Portal
targetcli /iscsi/iqn.2024-12.cloud.qy:disk1/tpg1/portals delete 0.0.0.0 3260
targetcli /iscsi/iqn.2024-12.cloud.qy:disk1/tpg1/portals create 10.1.8.10 3260
# 保存配置
targetcli saveconfig
四、iSCSI 客户端配置(访问存储)
1. 前期准备:安装与配置启动器
-
安装软件:
安装 iscsi-initiator-utils 包,包含 iscsi、iscsid 服务及配置文件:
dnf install -y iscsi-initiator-utils
-
配置客户端 IQN:
客户端 IQN 默认生成在
/etc/iscsi/initiatorname.iscsi
可修改:
vim /etc/iscsi/initiatorname.iscsi # 修改为:InitiatorName=iqn.2021-05.fun.redhat.server:client(需与服务端ACL授权的IQN一致)
-
配置 iscsid.conf:
/etc/iscsi/iscsid.conf
存储目标连接默认设置(超时、重试、认证信息等),修改后需重启 iscsid 服务:
systemctl restart iscsid
2. 连接 iSCSI 目标
(1)发现目标
获取服务器上的 Target 列表,portal_ip
为服务端 Portal IP:
iscsiadm -m discovery -t st -p portal_ip[:port] # 未指定port默认3260
# 示例:iscsiadm -m discovery -t st -p 10.1.8.10
# 输出:10.1.8.10:3260,1 iqn.2024-12.cloud.qy:disk1
(2)登录目标
登录发现的 Target,成功后目标设备显示为本地块设备:
iscsiadm -m node -T Target_IQN -p portal_ip[:port] -l
# 示例:iscsiadm -m node -T iqn.2024-12.cloud.qy:disk1 -p 10.1.8.10:3260 -l
(3)验证设备
查看已连接的 iSCSI 设备:
# 方式1:查看iSCSI会话信息
iscsiadm -m session -P 3
# 方式2:查看磁盘设备
ls -l /dev/disk/by-path/*iscsi*
# 方式3:查看系统日志
dmesg | grep iscsi
tail /var/log/messages | grep iscsi
3. 格式化与持久化挂载
(1)格式化设备
若设备为空,可格式化(如 XFS 格式):
mkfs.xfs /dev/sdc # /dev/sdc为iSCSI设备(需根据实际情况替换)
(2)持久化挂载
-
核心原则:不使用设备名(/dev/sd*,可能因启动顺序变化),改用 UUID;添加
_netdev
选项(确保网络就绪后挂载)。 -
步骤:
-
获取设备 UUID:
lsblk --fs
(查看设备对应的 UUID)。 -
编辑
/etc/fstab
vim /etc/fstab # 添加:UUID="3d49d1dd-8209-43a1-a106-4de328762e00" /data xfs defaults,_netdev 0 0
-
验证挂载:
mount -a
(无报错则成功,重启后自动挂载)。 -
确保 iscsi 服务开机启动:
systemctl enable iscsi
(默认已启用)。
-
4. 断开目标连接
-
卸载挂载点:
umount /data
(/data 为挂载点)。 -
从
/etc/fstab
删除对应行。 -
注销目标:
iscsiadm -m node -T iqn.2024-12.cloud.qy:disk1 -p 10.1.8.10:3260 -u
-
删除本地记录(避免开机自动登录):
iscsiadm -m node -T iqn.2024-12.cloud.qy:disk1 -p 10.1.8.10:3260 -o delete
五、故障处理
1. 登录失败(发现成功但登录失败)
-
常见原因:客户端 IQN 与服务端 ACL 授权的 IQN 不匹配;iscsid 服务缓存旧 IQN。
-
解决步骤:
-
验证客户端 IQN:
cat /etc/iscsi/initiatorname.iscsi
,确保与服务端 ACL 的 IQN 一致。 -
重启 iscsid 服务(清除缓存):
systemctl stop iscsid # 重新发现目标 iscsiadm -m discovery -t st -p 10.1.8.10 # 重新登录 iscsiadm -m node -T iqn.2024-12.cloud.qy:disk1 -l
-
六、多路径访问(提升可用性与性能)
1. 概念与作用
- 多路径:服务器与存储阵列通过多个物理连接(如双网卡、双 Portal)使用虚拟设备,实现路径冗余(单路径故障不影响连接)和带宽聚合(提升性能)。
- 核心组件:由 dm-multipath 子系统提供,包含 multipathd 进程(管理多路径)和 multipath 命令行工具,软件包为
device-mapper-multipath
。
2. 服务端准备(配置双 Portal)
-
配置双网络(如 10.1.8.10 和 10.1.1.10)。
-
为 Target 配置双 Portal:
# 进入Target的Portal目录 targetcli /iscsi/iqn.2024-08.fun.linux.server:webapp/tpg1/portals # 创建第二个Portal create 10.1.1.10 3260 # 验证:ls (显示两个Portal:10.1.8.10:3260和10.1.1.10:3260)
3. 客户端配置多路径
(1)安装与启用
-
安装软件包:
dnf install -y device-mapper-multipath
。 -
生成配置文件:
- 新环境(无配置文件):
mpathconf --enable
(生成/etc/multipath.conf
)。 - 已有配置文件:
mpathconf --enable --with_multipathd y --with_chkconfig y
(修改配置)。
- 新环境(无配置文件):
-
启动服务:
systemctl start multipathd systemctl enable multipathd
(2)多路径设备位置
- 管理用:
/dev/mapper/
,支持自定义别名(通过multipath.conf
的alias
选项),或默认命名为mpathN
(N 为数字)。 - 系统内部用:
/dev/dm-N
(禁止直接管理使用)。
4. 多路径监控与策略
(1)监控命令
-
multipath -ll
:显示详细多路径拓扑,包含设备信息、路径组(path group)、路径状态(active/ready/failed 等)。 -
示例输出解析:
Clusterstorage (3600140559c2883e039048cbbce4320b4) dm-0 LIO-ORG,myblock1 size=4.0G features='0' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active # 活跃路径组 | `- 2:0:0:0 sdb 8:16 active ready running # 活跃路径 `-+- policy='service-time 0' prio=1 status=enabled # 备用路径组`- 3:0:0:0 sda 8:0 active ready running # 备用路径
(2)路径组策略
策略名称 | 说明 | 配置示例(multipath.conf) |
---|---|---|
failover(故障转移) | 每个路径组 1 个路径,同一时刻仅 1 个路径活跃,故障时切换到备用路径 | multipaths { multipath { wwid 3600140559c2883e039048cbbce4320b4 alias Clusterstorage path_grouping_policy failover } } |
multibus(多总线) | 所有路径聚合到 1 个路径组,负载均衡(需存储控制器支持 active-active) | multipaths { multipath { wwid 3600140559c2883e039048cbbce4320b4 alias Clusterstorage path_grouping_policy multibus } } |
(3)故障切换逻辑
- 备用路径故障:活跃路径组不变,备用路径状态变为
failed faulty offline
。 - 活跃路径故障:活跃路径组变为备用(状态
enabled
),备用路径组变为活跃(状态active
)。 - 故障恢复:恢复的路径仍为备用,需手动切换回活跃路径。
5. 多路径配置文件(/etc/multipath.conf)
(1)配置结构与优先级
-
结构:包含 5 个核心部分,优先级从高到低为:
multipaths
>devices
>defaults
。 -
各部分作用:
部分 作用 示例 blacklist 定义不允许使用的多路径设备 blacklist { devnode "^sd[a-z]" # 排除所有sd开头设备 wwid 1234567890abcde # 排除指定WWID设备 }
blacklist_exceptions 定义需包含的设备(即使在 blacklist 中) blacklist_exceptions { device { vendor "IBM" product "s/390.*" } }
defaults 所有多路径的默认配置 defaults { path_selector "service-time 0" # 路径选择算法:服务时间最短 path_grouping_policy failover # 默认故障转移策略 user_friendly_names yes # 启用友好名称 }
devices 指定特定设备类型的配置(覆盖 defaults) devices { device { vendor "COMPAQ" product "S110 (C) COMPAQ" path_grouping_policy multibus path_checker readsector0 } }
multipaths 指定单个多路径的配置(覆盖 devices 和 defaults) multipaths { multipath { wwid 3600140559c2883e039048cbbce4320b4 alias Clusterstorage path_grouping_policy failover } }
(2)关键配置项
- path_selector:路径选择算法,如
service-time 0
(服务时间最短)、round-robin 0
(轮询)、queue-length 0
(队列长度最短)。 - path_checker:路径健康检查方式,如
directio
(默认)、readsector0
(读取扇区 0)。 - user_friendly_names:是否启用友好名称(
yes
/no
),yes
时设备名为mpathN
,no
时为 WWID。 - queue_if_no_path:路径全故障时是否阻塞 IO(
yes
/no
),集群环境建议no
,避免 IO 挂起影响其他节点。
6. 多路径设备管理
(1)增加分区
- 对多路径设备(如
/dev/mapper/Clusterstorage
)创建分区:fdisk /dev/mapper/Clusterstorage
。 - 所有节点执行
partprobe
(刷新分区信息)。 - 若未生成分区设备,执行
kpartx -a /dev/mapper/Clusterstorage
(创建 dm 设备)。
(2)删除多路径
- 删除所有路径(断开 iSCSI 连接)。
- 执行
multipath -F
(清空所有多路径设备,适用于测试或清理旧配置)。 - 若需删除单个设备:
multipath -f 设备名
(如multipath -f Clusterstorage
)。