20.NFS iSCSI服务器
文章目录
- NFS服务器
- NFS 服务介绍
- 配置服务端
- 安装软件包
- 准备实验所需的共享共享目录和nginx用户
- 配置服务器(配置配置文件)
- 启动并启用nfs-server服务
- 配置防火墙
- 配置客户端
- 安装软件包
- 验证共享目录
- 挂载共享目录
- 测试web服务器界面
- 持久化挂载
- 补充说明
- iSCSI服务器
- iSCSI 服务介绍
- iSCSI 架构
- 配置 iSCSI Targets
- 配置服务端
- 安装软件包
- 启用并启动服务
- 准备共享块设备
- 共享块设备存储
- 后端存储添加块设备
- 配置Target IQN
- 配置放行客户端
- 配置客户端可以访问的设备
- 退出配置
- 配置客户端
- 安装软件包
- 设置客户端的IQN
- 扫描目标
- 挂载设备
- 使用存储
- 测试持久化挂载
- 故障处理
- 多路径访问
- 服务器准备
- 什么是多路径
- 配置多路径
- 安装软件包
- 启用多路径软件
- 生成多路径配置文件
- 启动服务
- 监控多路径
- 实时监控
NFS服务器
实验将目录共享到web端,利用nginx查看
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 定义了一种进程间通过网络进行交互通信的机制,它允许客户端进程通过网络向远程服务进程请求服务,而不需要了解服务器底层的通信协议详细信息。
用户进程本地文件访问 RPC 服务 (portmap) RPC 服务 (portmap) NFS 服务NFS 客户端 NFS 服务器端TCP/IP 协议栈 TCP/IP 协议栈 本地文件访问本地磁盘 本地磁盘NFS 工作原理简图
- NFS 服务器:导出文件系统目录及其内容。
- NFS 客户端:挂载服务器导出的文件系统到本地。
配置服务端
安装软件包
[root@server ~ 10:10:50]# yum install -y nfs-utils
准备实验所需的共享共享目录和nginx用户
[root@server ~ 10:11:52]# mkdir -p /shares/webapp
#web查看nginx用户uid使997 ,修改使nginx用户可使用
[root@server ~ 10:13:22]# chown 997 /shares/webapp
[root@server ~ 10:32:32]# ls -dl /shares/webapp
drwxr-xr-x 2 997 root 6 9月 26 10:13 /shares/webapp[root@server ~ 10:41:28]# echo hello world for nginx > /shares/webapp/index.html
#设置欢迎界面
配置服务器(配置配置文件)
主配置文件:/etc/exports 从配置文件:/etc/exports.d/*.exports
一般添加修改都在从配置文件中,最好不要动主配置文件
共享目录:
共享的目录 共享的用户(单个ip10.1.8.11 一个网段的所有用户10.1.8.0/24 主机名 *.dcr.cloud 后缀的用户) 共享选项 rw(可供读写)ro(只可读)
[root@server ~ 10:37:53]# vim /etc/exports.d/webapp.exports
/shares/webapp 10.1.8.0/24(rw)
启动并启用nfs-server服务
[root@server ~ 10:38:25]# systemctl enable nfs
nfs-blkmap.service nfs-server.service
nfs-rquotad.service nfs.service
[root@server ~ 10:38:25]# systemctl enable nfs-server.service --now
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@server ~ 10:39:37]# systemctl status nfs-server.service
● nfs-server.service - NFS server and servicesLoaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)Drop-In: /run/systemd/generator/nfs-server.service.d└─order-with-mounts.confActive: active (exited) since 五 2025-09-26 10:39:37 CST; 34s agoProcess: 1767 ExecStartPost=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=0/SUCCESS)Process: 1750 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)Process: 1749 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)Main PID: 1750 (code=exited, status=0/SUCCESS)CGroup: /system.slice/nfs-server.service9月 26 10:39:37 server.dcr.cloud systemd[1]: Starting NFS server and services...
9月 26 10:39:37 server.dcr.cloud systemd[1]: Started NFS server and services.
#这里的active后的(exited)是因为它只有在使用的时候才启动,不像其他服务一直启动#也可直接
[root@server ~ 10:40:11]# systemctl is-active nfs-server.service
active
配置防火墙
#直接关闭防火墙
[root@server ~ 10:40:38]# systemctl is-active firewalld.service
unknown
#防火墙或者增加nfs服务
[root@server ~ 10:41:12]# firewall-cmd --add-service=nfs
配置客户端
安装软件包
[root@client ~ 10:12:55]# yum install -y nginx
[root@client ~ 10:13:53]# id nginx
uid=997(nginx) gid=995(nginx) 组=995(nginx)
[root@client ~ 10:14:22]# hostnamectl set-hostname web.dcr.cloud
[root@client ~ 10:16:39]# bash
[root@web ~ 10:16:43]#
验证共享目录
[root@client ~ 10:10:45]# yum install -y nfs-utils
[root@web ~ 10:16:43]# showmount --help
Usage: showmount [-adehv][--all] [--directories] [--exports][--no-headers] [--help] [--version] [host]
#-e --exports 显示来自远程的共享
[root@web ~ 10:44:09]# showmount -e 10.1.8.10
Export list for 10.1.8.10:
/shares/webapp 10.1.8.0/24
挂载共享目录
[root@web ~ 10:45:11]# mount 10.1.8.10:/shares/webapp /usr/share/nginx/html
#将其挂载到nginx网页使其可以通过nginx访问
[root@web ~ 10:46:37]# df -h /usr/share/nginx/html
文件系统 容量 已用 可用 已用% 挂载点
10.1.8.10:/shares/webapp 50G 1.6G 49G 4% /usr/share/nginx/html
测试web服务器界面
[root@web ~ 10:47:51]# systemctl enable nginx.service --now
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@web ~ 10:48:26]# curl 10.1.8.11
hello world for nginx
持久化挂载
[root@web ~ 11:08:26]# vim /etc/fstab
10.1.8.10:/shares/webapp /usr/share/nginx/html nfs defaults 0 0
#挂载类型使nfs
[root@web ~ 11:10:52]# umount -a
umount: /:目标忙。(有些情况下通过 lsof(8) 或 fuser(1) 可以找到有关使用该设备的进程的有用信息)
umount: /sys/fs/cgroup/systemd:目标忙。(有些情况下通过 lsof(8) 或 fuser(1) 可以找到有关使用该设备的进程的有用信息)
umount: /sys/fs/cgroup:目标忙。(有些情况下通过 lsof(8) 或 fuser(1) 可以找到有关使用该设备的进程的有用信息)
umount: /run:目标忙。(有些情况下通过 lsof(8) 或 fuser(1) 可以找到有关使用该设备的进程的有用信息)
umount: /dev:目标忙。(有些情况下通过 lsof(8) 或 fuser(1) 可以找到有关使用该设备的进程的有用信息)
[root@web ~ 11:10:54]# mount -a
[root@web ~ 11:10:56]# df -h /usr/share/nginx/html/
文件系统 容量 已用 可用 已用% 挂载点
10.1.8.10:/shares/webapp 50G 1.6G 49G 4% /usr/share/nginx/html
补充说明
共享的目录设置只对nginx用户有用,web端的root对于server无任何意义,只相当于其他用户
[root@web ~ 11:11:09]# touch /usr/share/nginx/html/root_file1
touch: 无法创建"/usr/share/nginx/html/root_file1": 权限不够[root@server ~ 10:32:32]# ls -dl /shares/webapp
drwxr-xr-x 2 997 root 6 9月 26 10:13 /shares/webapp
#其他用户没有写权限[root@web ~ 11:48:32]# cat /etc/passwd | grep nginx
nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin
#nginx用户使不能登陆的用户,是系统用户只执行特定的操作
默认共享选项包含root_squash,压缩root权限为nobody。
可以使用选项no_root_squash
[root@server ~ 12:56:07]# vim /etc/exports.d/webapp.exports
[root@server ~ 12:56:53]# cat /etc/exports.d/webapp.exports
/shares/webapp 10.1.8.0/24(rw,no_root_squash)
[root@server ~ 12:56:57]# systemctl restart nfs-server.service#修改后
[root@web ~ 12:57:40]# touch /usr/share/nginx/html/root_file1
[root@web ~ 12:59:00]# ll /usr/share/nginx/html/root_file1
-rw-r--r-- 1 root root 0 9月 26 12:58 /usr/share/nginx/html/root_file1
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使用专用的10 Gb以太网或更好的网络,以最大程度地提高性能。
从物理服务器到存储的电缆通常封闭在数据中心内,并且理想情况下不直接连接到LAN网络,所以SAN流量通常不加密,以最大程度地提高性能。 为了实现WAN安全,iSCSI管理员可以使用IPsec加密流量。
iSCSI 架构
iSCSI服务是C/S架构。访问的iSCSI目标在客户端系统上显示为本地且未格式化的SCSI快设备,等同于通过SCSI布线、FC直连或FC交换光线连接的设备。
-
Initiator,iSCSI客户端,通常以软件方式部署,也可以使用iSCSI Host Bus Adapters (HBAs) (HBA)硬件。 Initiator必须具有唯一的名称(请参见IQN)。
-
Target,iSCSI服务器上的iSCSI存储资源。 Target必须具有唯一的名称(请参见IQN)。 每个目标都提供一个或多个块设备或逻辑单元(LUN-logical units)。 在大多数情况下,Target只提供一个设备,但一台服务器可以提供多个目标。
-
IQN(iSCSI Qualified Name)全球唯一的名称,用于标识发起者和目标。 IQN具有以下格式:
iqn.YYYY-MM.com.reversed.domain:name_string
- YYYY-MM,年和月。示例,2020年6月为2020-06。该日期有助于确保IQN唯一性。
- 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,但是高级配置有时可能会定义多个TPG。
-
discovery,查询服务器上有Target列表。
-
login,向Target验证,验证通过后即可以使用Target服务器提供的块设备。
配置 iSCSI Targets
配置 iSCSI Targets需要安装以下软件:
- targetd,服务端软件。
- targetcli,targetd服务配置工具。
配置服务端
在 iSCSI 服务器上,使用targetcli
命令配置 iSCSI 目标,该命令支持交互式和非交互式执行,将目标对象组织到分层树中,支持 Tab 键补全,由 targetcli 软件包提供。具体操作步骤如下:
安装软件包
[root@server ~ 10:43:42]# yum install -y targetd targetcli
启用并启动服务
[root@server ~ 11:26:03]# systemctl enable target --now
Created symlink from /etc/systemd/system/multi-user.target.wants/target.serviusr/lib/systemd/system/target.service.
配置iSCSI之前一定要先启动服务,防火墙关闭或者放行
准备共享块设备
给虚拟机加一块磁盘
[root@server ~ 11:26:46]# 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 ~ 11:28:21]# parted /dev/sdb mklabel gpt
信息: You may need to update /etc/fstab.[root@server ~ 11:29:26]# parted /dev/sdb unit MiB mkpart dbapp 1 102401
信息: You may need to update /etc/fstab.[root@server ~ 11:30:26]# lsblk /dev/sdb1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb1 8:17 0 100G 0 part
共享块设备存储
[root@server ~ 12:58:40]# 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 #查看targetcli界面
o- / ........................................................................o- backstores .............................................................| o- block .................................................. [Storage Obje| o- fileio ................................................. [Storage Obje| o- pscsi .................................................. [Storage Obje| o- ramdisk ................................................ [Storage Objeo- iscsi ............................................................ [Targo- loopback ......................................................... [Targ
/backstores 提供后端存储
/iscsi 配置如何共享后端存储
后端存储添加块设备
backstore类型:
- block:服务器中的块设备,例如磁盘驱动器,磁盘分区或逻辑卷。
- fileio:本地文件系统中的常规文件。targetcli将该文件用作磁盘映像。
- pscsi:物理SCSI设备。 这种类型的存储允许客户端通过网络访问服务器上的物理SCSI设备。
- ramdisk:内存中的磁盘设备。 这种类型的存储不会持久存储数据。 服务器重新启动后,数据将丢失。
要使用targetcli创建后备存储,请使用其create命令。 该命令的行为取决于您在配置树中的当前位置。(忽略后三种)
/> /backstores/block
/backstores/block> create
Missing required parameters 'dev', 'name'
/backstores/block> create
dev= name= readonly= wwn=
#tab补全查看所需什么/> /backstores/block #cd 到/backstores/block
/backstores/block> create dev=/dev/sdb1 name=db01 #创建
Created block storage object db01 using /dev/sdb1.
/backstores/block> ls /backstores/block/
o- block ...................................................... [Storage Objeo- db01 ............................ [/dev/sdb1 (100.0GiB) write-thru deacto- alua ....................................................... [ALUA Groo- default_tg_pt_gp ........................... [ALUA state: Active/opt
配置Target IQN
创建target,后续客户端 会扫描 target
target名称使用IQN来表示
不管是客户端还是服务端都通过IQN来表示自己。
/backstores/block> /iscsi #cd 到/iscsi#tab键查看有哪些命令
/iscsi>
/ @last bookmarks cd create delete exit
get help info ls pwd refresh set
status version
#创建服务端target名称
/iscsi> create iqn.2025-09.cloud.dcr.server.x8664:db
Created target iqn.2025-09.cloud.dcr.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.#查看
/iscsi> ls /iscsi/
o- iscsi .............................................................. [Targo- iqn.2025-09.cloud.dcr.server.x8664:db ............................... [To- tpg1 ................................................. [no-gen-acls, no- acls ............................................................ [Ao- luns ............................................................ [Lo- portals ...................................................... [Porto- 0.0.0.0:3260 .....................................................# 切换相应目录
/> cd /iscsi/iqn.2025-09.cloud.dcr.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/
#进入acls
/iscsi/iqn.20...:db/tpg1/acls> create iqn.2025-09.cloud.dcr.server.x8664:webapp
Created Node ACL for iqn.2025-09.cloud.dcr.server.x8664:webapp#查看
/iscsi/iqn.20...:db/tpg1/acls> ls
o- acls .................................................................. [Ao- iqn.2025-09.cloud.dcr.server.x8664:db ........................ [Mapped Lo- iqn.2025-09.cloud.dcr.server.x8664:webapp .................... [Mapped L/iscsi/iqn.20...:db/tpg1/acls> cd ..
/iscsi/iqn.20...x8664:db/tpg1> ls
o- tpg1 ..................................................... [no-gen-acls, no- acls ................................................................ [A| o- iqn.2025-09.cloud.dcr.server.x8664:webapp .................. [Mapped Lo- luns ................................................................ [Lo- portals .......................................................... [Porto- 0.0.0.0:3260 .........................................................
配置客户端可以访问的设备
/iscsi/iqn.20...x8664:db/tpg1> luns/
/iscsi/iqn.20...:db/tpg1/luns> create /backstores/block/db01
Created LUN 0.
Created LUN 0->0 mapping in node ACL iqn.2025-09.cloud.dcr.server.x8664:webapp
退出配置
/iscsi/iqn.20...:db/tpg1/luns> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json
配置客户端
安装软件包
配置iSCSI客户端启动程序需要安装iscsi-initiator-utils软件包,该软件包包括iscsi和iscsid服务以及**/etc/iscsi/iscsid.conf和/etc/iscsi/initiatorname.iscsi**配置文件。
[root@web ~ 13:13:58]# yum list *iscsi*
[root@web ~ 13:52:08]# yum install -y iscsi-initiator-utils
设置客户端的IQN
作为iSCSI启动器,客户端需要其自己的唯一iSCSI合格名称(IQN)。在安装iscsi-initiator-utils的过程中,该软件包生成唯一的IQN,并存储到/etc/iscsi/initiatorname.iscsi文件中。 管理员通常需要更改该名称。
[root@web ~ 13:52:50]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2025-09.cloud.dcr.server.x8664:webapp
/etc/iscsi/iscsid.conf文件包含您连接的目标的默认设置。 这些设置包括iSCSI超时,重试以及用于身份验证的用户名和密码参数。
软件包安装会自动配置iscsid服务,以便启动器在系统启动时自动重新连接到任何已发现的目标。 每当您修改启动程序的配置文件时,请重新启动iscsid服务。
扫描目标
[root@web ~ 14:57:54]# iscsiadm -m discovery -t st -p 10.1.1.10
10.1.1.10:3260,1 iqn.2025-09.cloud.dcr.server.x8664:db选项说明:
-m discovery 发现模式
-t st 找target(sendtarget)
-p 10.1.8.10 服务地址
挂载设备
[root@web ~ 15:10:04]# iscsiadm -m node -T iqn.2025-09.cloud.dcr.server.x8664:db -l
Logging in to [iface: default, target: iqn.2025-09.cloud.dcr.server.x8664:db, portal: 10.1.1.10,3260] (multiple)
Login to [iface: default, target: iqn.2025-09.cloud.dcr.server.x8664:db, portal: 10.1.1.10,3260] successful.选项说明:
-m node 登录模式
-T iqn.2025-09.cloud.laoma.server.x8664:db 服务器IQN
-l login
-u logout#查看
[root@web ~ 15:11:05]# 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
sdc 8:32 0 100G 0 disk
sr0 11:0 1 1024M 0 rom
使用存储
#格式化文件系统
[root@web ~ 14:01:22]# 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@web ~ 14:19:49]# vim /etc/fstab
/dev/sdb /usr/share/nginx/html/ xfs defaults 0 0[root@web ~ 14:19:49]# mount -a
[root@web ~ 14:20:06]# df /usr/share/nginx/html/
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sdb 104806400 32992 104773408 1% /usr/share/nginx/html/
测试持久化挂载
在/etc/fstab中的iSCSI目标上持久地挂载文件系统时,请确保遵循以下建议:
- 使用带有–fs选项的lsblk命令来确定文件系统UUID,然后使用该UUID挂载文件系统。 不要使用设备名称(
/dev/sd*
)。 设备的名称取决于 iSCSI 设备通过网络响应的顺序,因此设备名称可能会在引导之后更改。如果在 /etc/fstab 中使用设备名称,则系统可能会将设备挂载在错误的挂载点下。 - 在/etc/fstab中使用 _netdev 挂载选项。 因为iSCSI依赖网络访问远程设备,所以此选项可确保在网络和启动器启动之前,系统不会尝试挂载文件系统。
[root@web ~ 14:20:30]# reboot
Connection closing...Socket close.Connection closed by foreign host.Disconnected from remote host(root@client) at 14:21:41.Type `help' to learn how to use Xshell prompt.
[C:\~]$ Connecting to 10.1.8.11:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Fri Sep 26 12:49:04 2025 from 10.1.8.1#发现登陆不了
#对于操作系统启动,是先扫描/etc/fstab挂载成功后再连接网络
#iscsi是依赖网络远距离访问的设备[root@web ~ 14:19:49]# vim /etc/fstab
/dev/sdb /usr/share/nginx/html/ _netdev defaults 0 0#修改后重启即可
故障处理
如果发现成功,但是启动器登录到发现的目标时遇到问题,则该问题很可能与访问控制或身份验证有关。客户端上的IQN与服务器上的IQN不匹配会导致目标登录失败。
如果问题是由于客户端上的启动器IQN不正确引起的,请在客户端的/etc/iscsi/initiatorname.iscsi文件中修复IQN,然后重新启动iscsid服务以使更改生效。
原因:iscsid 服务缓存了之前客户端扫描时使用的IQN。
处理方法:停止 iscsid 服务,释放之前客户端扫描时使用的IQN。
[root@web ~ 15:10:04]# iscsiadm -m node -T iqn.2025-09.cloud.dcr.server.x8664:db -u
#登出[root@web ~ 14:57:54]# iscsiadm -m discovery -t st -p 10.1.1.10
10.1.1.10:3260,1 iqn.2025-09.cloud.dcr.server.x8664:db
[root@web ~ 15:10:04]# iscsiadm -m node -T iqn.2025-09.cloud.dcr.server.x8664:db -l
Logging in to [iface: default, target: iqn.2025-09.cloud.dcr.server.x8664:db, portal: 10.1.1.10,3260] (multiple)
Login to [iface: default, target: iqn.2025-09.cloud.dcr.server.x8664:db, portal: 10.1.1.10,3260] successful.
多路径访问
服务器准备
server和client都添加一个网卡 Vmnet1,IP地址分别设置为10.1.1.10 10.1.1.11 效果如下:
#服务端
[root@server ~ 13:59:42]# nmcli connection
NAME UUID TYPE DEVICE
ens33 af31148f-eee7-416c-aa84-38e0e8fc86e4 ethernet ens33
有线连接 1 3ce0cce8-4b1a-3b40-8c83-544d95f309e8 ethernet ens37 [root@server ~ 14:52:26]# ip -br a
lo UNKNOWN 127.0.0.1/8 ::1/128
ens33 UP 10.1.8.10/24 fe80::20c:29ff:fe53:86a6/64
ens37 UP 10.1.1.148/24 fe80::15ca:a0c4:8649:5405/64 [root@server ~ 14:52:33]# nmcli connection modify 有线连接\ 1 con-name ens37 ipv4.addresses 10.1.1.10/24 ipv4.method manual
[root@server ~ 14:54:03]# nmcli connection up ens37
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
[root@server ~ 14:55:39]# nmcli connection
NAME UUID TYPE DEVICE
ens33 af31148f-eee7-416c-aa84-38e0e8fc86e4 ethernet ens33
ens37 3ce0cce8-4b1a-3b40-8c83-544d95f309e8 ethernet ens37 [root@server ~ 14:55:45]# ip -br a
lo UNKNOWN 127.0.0.1/8 ::1/128
ens33 UP 10.1.8.10/24 fe80::20c:29ff:fe53:86a6/64
ens37 UP 10.1.1.10/24 fe80::15ca:a0c4:8649:5405/64 #客户端
[root@web ~ 14:36:26]# ip -br a
lo UNKNOWN 127.0.0.1/8 ::1/128
ens33 UP 10.1.8.11/24 fe80::20c:29ff:fefc:4430/64
ens37 UP 10.1.1.149/24 fe80::f505:959d:1302:6b60/64
[root@web ~ 14:54:12]# nmcli connection
NAME UUID TYPE DEVICE
ens33 af31148f-eee7-416c-aa84-38e0e8fc86e4 ethernet ens33
有线连接 1 845b18a7-ffae-36a4-879e-89451a69f60d ethernet ens37
[root@web ~ 14:54:20]# nmcli connection modify 有线连接\ 1 con-name ens37 ipv4.method manual ipv4.addresses 10.1.1.11/24[root@web ~ 14:55:19]# nmcli connection up ens37
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3)
# 客户端卸载文件系统
[root@web ~ 14:57:16]# umount /usr/share/nginx/html# 通过10.1.1.10扫描,并登录
[root@web ~ 14:58:04]# iscsiadm -m discovery -t st -p 10.1.1.10
10.1.1.10:3260,1 iqn.2025-09.cloud.dcr.server.x8664:db
[root@web ~ 14:58:12]# iscsiadm -m node -T iqn.2025-09.cloud.dcr.server.x8664:db -l# 本机额外出现一块硬盘 sdc
[root@web ~ 14:58:48]# 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
sdc 8:32 0 100G 0 disk
sr0 11:0 1 4.4G 0 rom
什么是多路径
多路径是指服务器和存储阵列存在多个物理连接方式使用虚拟设备,这种方式可以提供更加弹性的存储连接(一个路径down掉不会影响连接性),也可以聚合存储带宽提供性能。
示例:
多路径由dm-multipath子系统提供,使用内核device mapper系统获得虚拟设备,有multipathd进程和multipath命令行工具管理。
软件包device-mapper-multipath提供必要的binaries daemon和kernel modules。安装、配置、启动后,多路径设备节点会创建在两个位置。
出于管理目的,multipath设备创建在/dev/mapper,如果选择了user-friendly名称,这些设备也可以命名为mpathN[pM],或者配置在World Wide ID(WWID)之后。管理员也可以自定义多路径设备名,这些自定义名称在multipaths配置文件的multipaths部分使用alias选项定义。
多路径设备也会创建在/dev目录,格式/dev/dm-N与/dev/mapper下的文件匹配。这些设备提供给系统内部使用,禁止管理目的直接使用。
重要:多路径提供存储访问路径down情况的保护。如果存储本身不可用,访问访问存储也会不可用。
创建多路径设备,不同的路径将会合并到组中,取决于/etc/multipath.conf配置。典型情况,同一时刻只能激活一个组,一个组可以包含多个路径。当某个组故障,多路径进程将切换流量到不同组中。
配置多路径
安装软件包
[root@web ~ 15:11:11]# yum install -y device-mapper-multipath
启用多路径软件
生成多路径配置文件
[root@web ~ 15:04:17]# mpathconf --enable
启动服务
[root@web ~ 15:05:40]# systemctl start multipathd.service
监控多路径
multipath命令也可用于多路径状态监控。
- -l 选项,显示多路径拓扑简介。
- -ll 选项,会检测所有路径是否active,如果没有问题,路径的状态为active和ready。命令输出还会包括每个多路径设备的信息,有三个部分组成:多路径设备,path group,path group成员。
示例:
[root@web ~ 15:12:56]# multipath -ll
mpatha (36001405ef99c3ae46454455852262749) dm-3 LIO-ORG ,db01
size=100G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 32:0:0:0 sdb 8:16 active ready running
`-+- policy='service-time 0' prio=1 status=enabled`- 33:0:0:0 sdc 8:32 active ready running# 如果客户端没有识别两个设备为同一个设备,
# 需要使用iscsiadm登出 (-u选项),然后再次iscsiadm登入(-l选项)。
# 修改 fstab,并挂载
[root@web ~ 15:18:47]# vim /etc/fstab
/dev/mapper/mpatha /usr/share/nginx/html xfs _netdev 0 0
[root@web ~ 15:22:02]# mount -a
[root@web ~ 15:22:42]# df /usr/share/nginx/html/
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/mpatha 104806400 32996 104773404 1% /usr/share/nginx/html
-
第一部分是多路径设备信息。
- 第一行:alias wwid 设备名 vendor 和产品信息。
- 第二行:size enabled features hardware handlers和写权限。
-
第二部分是多路径设备的path group,包括调度策略,优先级和path group 状态,紧随的是其成员path。对于每个path,也就是设备节点名,包括设备major和minor信息,path的状态。
- 状态为up,随时可以执行IO操作的path,显示的状态为ready。
- 状态为down,显示为faulty。
failover 的策略是active-passive配置,因此在任一时刻,只有一个路径是active状态,另外一个是enabled状态。
以下显示了passive状态的path group发生了故障。active状态的path group保持不变。
# 实验环境准备,断开server端第二块网卡
[root@server ~]# nmcli device disconnect ens192[root@client ~]# multipath -ll
mpatha (3600140559c2883e039048cbbce4320b4) dm-0 LIO-ORG ,clusterstor
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 failed faulty offline
以下显示了active状态的path group发生了故障。active状态的path group变更为failed faulty offline,同时状态由active变更为enabled。passive状态的path group变更为active ready running,同时状态由enabled变更为active。
[root@client ~]# multipath -ll
mpatha (3600140559c2883e039048cbbce4320b4) dm-0 LIO-ORG ,clusterstor
size=4.0G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=enabled
| `- 2:0:0:0 sdb 8:16 failed faulty offline
`-+- policy='service-time 0' prio=1 status=active`- 3:0:0:0 sda 8:0 active ready running
重要:故障路径恢复后,当前的active path保持不变,即使恢复的路径之前是active path,可以通过手动切换回来。
实时监控
[root@server ~ 15:46:54]# watch -n1 'date;curl -s http://10.1.8.11/'
[root@web ~ 15:46:46]# watch -n1 'multipath -ll'
#每秒监控一次