码迷,mamicode.com
首页 > 系统相关 > 详细

配置linux iscsi san client

时间:2017-08-19 15:02:22      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:配置linux iscsi san client

配置linux iscsi san client

4.1、安装 iSCSI(启动器)服务

这个安装包在系统的安装包里。 找到iscsi-initiator-utils-6.2.0.871-0.10.el5.x86_64.rpm包。 安装上。

[root@centos ~]# rpm -Uvh iscsi-initiator-utils-6.2.0.871-0.10.el5.x86_64.rpm

1:iscsi-initiator-utils ########################################### [100%]

[root@centos ~]# rpm -qa | grep iscsi-initiator-utils

iscsi-initiator-utils-6.2.0.871-0.10.el5

2.2 配置 iSCSI(启动器)服务

刚才已经安装了initiator 包。 现在我们来启动initiator 服务(iscsid),并使其在系统引导时自动启动。在配置 iscsi 服务自动启动,使其在系统启动时自动登录 iSCSI 目标。

[root@centos ~]# service iscsid start

[root@centos ~]# chkconfig iscsid on

[root@centos ~]# chkconfig iscsi on

用iscsiadm命令检查网络存储服务器上的所有可用目标:

[root@centos ~]# iscsiadm -m discovery -t sendtargets -p 192.168.0.188

手动登录 iSCSI 目标

[root@centos ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:tsn.ocr -p 192.168.0.188 -l

[root@centos ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:tsn.oradata -p 192.168.0.188 -l

[root@centos ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:tsn.hisdata -p 192.168.0.188 -l

断开ISCSI登录状态

[root@rac1 ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:tsn.ocr -p 192.168.0.188 -u

配置自动登录

在计算机引导(或 iSCSI 启动器服务启动/重新启动)时,客户端将自动登录上面列出的每个目标。和上面描述的手动登录过程一样,不过在这里加了2个参数。

[root@centos ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:tsn.ocr -p 192.168.0.188 --op update -n node.startup -v automatic

[root@centos ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:tsn.oradata -p 192.168.0.188 --op update -n node.startup -v automatic

[root@centos ~]# 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 文件,来确定文件被映射到了哪个文件上:

[root@centos 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文件配置非常重要,特别是文件权限属性方面,必须要确保正确

[root@centos ~]# 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 脚本:

[root@centos ~]# mkdir -p /etc/udev/scripts
检查/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session*/targetname的路径是否正确


(2)在服务器上创建 UNIX shell 脚本 /etc/udev/scripts/iscsidev.sh:

[root@centos ~]# 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##*.}"


说明:我们先看一下这个脚本的作用:

[root@centos]# 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 服务:

[root@centos ~]# service iscsi stop
[root@centos ~]# service iscsi start
(5)验证

[root@centos]# 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

标签:配置linux iscsi san client

原文地址:http://11310506.blog.51cto.com/11300506/1957572

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!