配置linux iscsi san client
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置linux iscsi san client相关的知识,希望对你有一定的参考价值。
配置linux iscsi san client
4.1、安装 iSCSI(启动器)服务
这个安装包在系统的安装包里。 找到iscsi-initiator-utils-6.2.0.871-0.10.el5.x86_64.rpm包。 安装上。
[[email protected] ~]# rpm -Uvh iscsi-initiator-utils-6.2.0.871-0.10.el5.x86_64.rpm
1:iscsi-initiator-utils ########################################### [100%]
[[email protected] ~]# rpm -qa | grep iscsi-initiator-utils
iscsi-initiator-utils-6.2.0.871-0.10.el5
2.2 配置 iSCSI(启动器)服务
刚才已经安装了initiator 包。 现在我们来启动initiator 服务(iscsid),并使其在系统引导时自动启动。在配置 iscsi 服务自动启动,使其在系统启动时自动登录 iSCSI 目标。
[[email protected] ~]# service iscsid start
[[email protected] ~]# chkconfig iscsid on
[[email protected] ~]# chkconfig iscsi on
用iscsiadm命令检查网络存储服务器上的所有可用目标:
[[email protected] ~]# iscsiadm -m discovery -t sendtargets -p 192.168.0.188
手动登录 iSCSI 目标
[[email protected] ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:tsn.ocr -p 192.168.0.188 -l
[[email protected] ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:tsn.oradata -p 192.168.0.188 -l
[[email protected] ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:tsn.hisdata -p 192.168.0.188 -l
断开ISCSI登录状态
[[email protected] ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:tsn.ocr -p 192.168.0.188 -u
配置自动登录
在计算机引导(或 iSCSI 启动器服务启动/重新启动)时,客户端将自动登录上面列出的每个目标。和上面描述的手动登录过程一样,不过在这里加了2个参数。
[[email protected] ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:tsn.ocr -p 192.168.0.188 --op update -n node.startup -v automatic
[[email protected] ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:tsn.oradata -p 192.168.0.188 --op update -n node.startup -v automatic
[[email protected] ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:tsn.hisdata -p 192.168.0.188 --op update -n node.startup -v automatic
4.3 创建永久性本地 SCSI 设备名称
查看/dev/disk/by-path 文件,来确定文件被映射到了哪个文件上:
[[email protected] by-path]# ls /dev/disk/by-path -al
需要使用udev的动态管理工具。udev 提供了一个动态设备目录,使用一组可配置的规则通过符号链接指向实际设备。当 udev 收到设备事件
(例如,客户端登录到 iSCSI 目标)时,就会根据 sysfs 中提供的可用设备属性匹配其配置好的规则以便识别设备。匹配规则可以提供其他设备信息或指定设备节点名和多个符号链接名,
并指示 udev 运行其他程序(例如,一个 SHELL 脚本 )作为设备事件处理过程的一部分。
4.3.1. 创建新的规则文件
创建文件 /etc/udev/rules.d/55-openiscsi.rules,它只包含一行用于接收事件的名称-值对。还将定义一个调出 SHELL 脚本 (/etc/udev/scripts/iscsidev.sh),用于处理事件。
55-openiscsi.rules文件配置非常重要,特别是文件权限属性方面,必须要确保正确
[[email protected] ~]# more /etc/udev/rules.d/55-openiscsi.rules
# /etc/udev/rules.d/55-openiscsi.rules
KERNEL=="sd*", BUS=="scsi", PROGRAM="/etc/udev/scripts/iscsidev.sh %b",SYMLINK+="iscsi/%c" , OWNER="grid", GROUP="asmadmin", MODE="0660"
4.3.2. 创建在接收该事件时将调用的 UNIX SHELL 脚本
(1)先在服务器上创建一个目录,用于存储 udev 脚本:
[[email protected] ~]# mkdir -p /etc/udev/scripts
检查/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session*/targetname的路径是否正确
(2)在服务器上创建 UNIX shell 脚本 /etc/udev/scripts/iscsidev.sh:
[[email protected] ~]# more /etc/udev/scripts/iscsidev.sh
#!/bin/sh
# FILE: /etc/udev/scripts/iscsidev.sh
BUS=${1}
HOST=${BUS%%:*}
[ -e /sys/class/iscsi_host ] || exit 1
file="/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session/session*/targetname"
target_name=$(cat ${file})
# This is not an open-scsi drive
if [ -z "${target_name}" ]; then
exit 1
fi
echo "${target_name##*.}"
说明:我们先看一下这个脚本的作用:
[[email protected]]# more /sys/class/iscsi_host/host2/device/session1/iscsi_session:session1/targetname
iqn.2006-01.com.san
从这个命令,我们可以看出,这个脚本就是获取target 的名称的。 而规则将根据这个脚本返回的target 名称的最后一个字符串,来在相应的目录的下建立对应的文件。
简单点就是根据target来做一个映射。 因为target 名称是唯一的,所以这个映射名称也是唯一的。 这就避免了映射到不同的系统目录,而到时共享数据不可用。
(3)将刚才创建的shell脚本修改为可执行文件:
# chmod 755 /etc/udev/scripts/iscsidev.sh
(4)在服务器上重新启动 iSCSI 服务:
[[email protected] ~]# service iscsi stop
[[email protected] ~]# service iscsi start
(5)验证
[[email protected]]# ls -l /dev/iscsi/*
lrwxrwxrwx 1 root root 6 Oct 28 14:16 /dev/iscsi/san -> ../sdc
因为这里我们用udev 配置,它就保证了iscsi目标映射到唯一的设备。 我们在使用的时候使用这个唯一的映射/dev/iscsi/san 即可。
对客户端这个映射做一个解释。 因为开始对这块也有点模糊。
存储的配置只干一件事,就是给我提供一个target。 这个target 是在存储上做的映射。 服务器通过initiator 去连存储。
然后把这个target 映射到自己的下一个可用设备上,如 /dev/sdc。 如果只有一个target. 那么没有任何问题。
每次initiator连上后都会把这个target 映射到/dev/sdc上。 但是如果有多个target, 那么这里就出了问题。
因为initiator的连接是随机的。 可能A先连接,那A就会映射到/dev/sdc上。 如果B先连接,B就会映射到/dev/sdc上。 这就是问题的所在。
Udev 的动态管理很好的解决了这个问题。 我们通过脚本加规则的设置,用脚本来获取每个target的名称,然后在规则里用每个target 最后一个字符串,在我们指定的目录创建一个设备。
这样,因为规则是唯一的。 所以每个设备都是唯一的。 我们就可以使用这个唯一的设备,而不会出现问题。 比如实验中的/dev/iscsi/san. 这个就是一个绝地位置。
要查看各个iscsi的信息:
iscsiadm -m session -P 3
完成这些命令后,iscsi initator会把这些信息记录到/var/lib/iscsi目录下:
/var/lib/iscsi/send_targets记录了各个target的情况,
/var/lib/iscsi/nodes记录了各个target下的nodes情况。下次再启动iscsi initator时(service iscsi start),就会自动登陆各个target上。
如果想让重新手工登陆各个target,需要把/var/lib/iscsi/send_targets目录下的内容和/var/lib/iscsi/nodes下的内容全部删除掉。
本文出自 “11300506” 博客,请务必保留此出处http://11310506.blog.51cto.com/11300506/1957572
以上是关于配置linux iscsi san client的主要内容,如果未能解决你的问题,请参考以下文章
Multipathing for IP SAN( iSCSI) and Device mapper in Linux