iSCSI存储和多路径
iSCSI(Internet Small Computer Systems Interface)是一种基于IP的存储网络协议,用于在存储设备(如SAN存储设备)和服务器之间传输数据。为了提高存储系统的性能和可靠性,常常使用多路径I/O (Multipath I/O,MPIO)技术。多路径配置可以提供冗余路径,从而在一条路径发生故障时,数据传输可以通过另一条路径继续进行。本文将介绍在Linux系统中配置iSCSI多路径的步骤。
配置IP-SAN存储与服务器的连接
iSCSI服务器和存储端通过iSCSI Qualified Name(IQN)来互相识别。IQN是一种全局唯一的标识符,用于唯一标识iSCSI节点(无论是发起方initiator还是目标端target)。在iSCSI协议中,IQN就像是设备的"名字",用来区分和识别不同的存储设备和主机。
IQN的格式
IQN的格式通常如下:
iqn.yyyy-mm.com.example:unique_name
iqn:前缀,表示这是一个IQN。yyyy-mm:表示域名注册的日期,通常是域名注册的年份和月份。com.example:表示域名的反序,通常是组织的域名。unique_name:一个在域名下唯一的名称,用于进一步区分不同的iSCSI设备。
例如,一个典型的IQN可能是:
iqn.2004-12.com.inspur:mcs.cluster172.16.10.245.node1
识别过程
- iSCSI目标(Target) :存储设备(如SAN存储)会配置一个或多个IQN来标识其提供的存储资源。这些IQN通常在存储设备的管理界面上可以看到和配置。
- iSCSI发起方(Initiator) :服务器(如运行数据库的服务器)会配置其自己的IQN,这个IQN通常由iSCSI软件(如
open-iscsi)自动生成,也可以手动设置。
# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.1994-05.com.redhat:51b43cf4b035
发现与登录
-
发现(Discovery) :
发起方通过发送发现请求到目标端的IP地址,目标端会返回其IQN和可用的LUN(逻辑单元号)。sudo iscsiadm -m discovery -t sendtargets -p <target_ip> -
登录(Login) :
发起方使用发现的IQN来登录到目标端。sudo iscsiadm -m node -T <target_iqn> -p <target_ip:port> --login
认证与安全
为了增强安全性,iSCSI还支持使用CHAP(Challenge Handshake Authentication Protocol)来验证发起方和目标端的身份。这样即使知道了IQN,也不能轻易地登录目标端。
多路径配置
多路径配置文件
编辑多路径配置文件/etc/multipath.conf。如果文件不存在,可以创建一个。
# more /etc/multipath.conf
defaults {
find_multipaths "yes"
user_friendly_names "yes"
}
blacklist {
}
devices {
device {
features "0"
no_path_retry "fail"
product ".*"
vendor ".*"
}
}
补:每个存储厂家都有官方的多路径配置文件,如浪潮的
# vi/etc/multipath.conf
defaults{
find_multipaths "yes"
user_friendly_names "yes"
}
devices{
device{
vendor "INSPUR"
product "MCS"
path_grouping_policy group_by_prio
path_selector "round-robin 0"
features "1 queue_if_no_path"
prio alua
path_checker tur
failback immediate
no_path_retry "60"
rr_min_io 1000
dev_loss_tmo 120
fast_io_fail_tmo 5
}
}
启动和启用多路径服务
启动多路径服务,并设置开机自动启动。
sudo systemctl start multipathd.service
sudo systemctl enable multipathd.service
验证多路径配置
使用multipath -ll命令查看多路径配置情况。
sudo multipath -ll
输出应显示多路径设备及其对应的路径信息。
配置开机自动登录
为了确保系统重启后自动登录iSCSI目标,需要编辑/etc/iscsi/iscsid.conf文件。
sudo nano /etc/iscsi/iscsid.conf
找到以下配置项并设置为yes:
node.startup = automatic
保存文件后,重启open-iscsi服务:
sudo systemctl restart open-iscsi
multipath 命令
| 选项 | 描述 |
|---|---|
-l | 显示从 sysfs 和设备映射器收集的当前多路径拓扑。 |
-ll | 显示从 sysfs、设备映射器以及系统上所有其他可用组件收集的当前多路径拓扑。 |
-f device | 删除命名的多路径设备。 |
-F | 删除所有未使用的多路径设备。 |
-w device | 从 wwids 文件中删除指定设备的 wwid。 |
-W | 重置 wwids 文件,使其只包含当前的多路径设备。 |
-r | 强制重新载入多路径设备。 |
rescan-scsi-bus.sh介绍
rescan-scsi-bus.sh 脚本用于重新扫描SCSI总线,以检测新的存储设备、移除无效设备或更新现有设备的信息。这对于多路径配置非常重要,因为它可以确保多路径配置能够正确识别和管理所有的存储路径,从而提高存储系统的可靠性和性能。
主要功能
rescan-scsi-bus.sh 脚本可以执行以下操作:
- 检测新的SCSI设备:在添加新的存储设备(如硬盘或LUN)后,重新扫描SCSI总线使系统可以识别和配置这些新设备。
- 移除无效的SCSI设备:在移除存储设备后,重新扫描SCSI总线可以确保系统更新其设备列表,移除不再存在的设备。
- 更新现有设备的信息:如果现有设备的配置信息发生变化,重新扫描SCSI总线可以确保系统获得最新的设备信息。
使用方法
通常,rescan-scsi-bus.sh 脚本位于 /usr/lib/sg3_utils 或 /usr/bin 目录下。运行该脚本可以执行默认的扫描操作:
sudo rescan-scsi-bus.sh
常用选项
rescan-scsi-bus.sh 脚本支持多个选项,以下是一些常用选项:
-l:扫描所有LUN。-r:移除不存在的SCSI设备。-a:添加新的SCSI设备。-m:运行多路径工具来更新多路径设备信息。
例如,使用所有常用选项进行扫描:
sudo rescan-scsi-bus.sh -l -r -a
与多路径的关系
重新扫描SCSI总线对于多路径配置非常重要,原因如下:
- 检测新路径:在添加新的存储路径后,重新扫描SCSI总线可以确保系统识别这些新路径,使多路径配置能够正确管理它们。
- 移除失效路径:在移除或失效某些存储路径后,重新扫描SCSI总线可以确保系统更新其路径信息,使多路径配置能够移除这些无效路径。
- 更新路径信息:如果存储路径的配置发生变化,重新扫描SCSI总线可以确保系统获得最新的路径信息,使多路径配置能够正确调整。
结合多路径
在添加或移除存储设备后,可以先使用 rescan-scsi-bus.sh 脚本重新扫描SCSI总线,然后使用 multipath 工具刷新多路径配置:
sudo rescan-scsi-bus.sh -l -r -a
sudo multipath -v2
通过这种方式,确保系统和多路径配置都能够正确识别和管理所有的存储设备及其路径。