linux iscsi配置

在之前有关数据中心高可用性系列的文章中,我们讲了如何搭建Linux高可用的架构。同时也让你知道“shoot
the other node in the
head使出现问题的节点从集群环境中脱离,简称:STONITH)”技术对于确保在Linux集群中共享存储集成的重要性。在本篇中,你将会学到如何实施“split
brain
detection分脑检测,简称:SBD)”STONITH,作为一个使用共享磁盘设备的STONITH程序,可以方便的在大部分环境中进行实施。

  在之前有关数据中心高可用性系列的文章中,我们讲了如何搭建Linux高可用的架构。同时也让你知道“shoot
the other node in the
head(使出现问题的节点从集群环境中脱离,简称:STONITH)”技术对于确保在Linux集群中共享存储集成的重要性。在本篇中,你将会学到如何实施“split
brain
detection(分脑检测,简称:SBD)”STONITH,作为一个使用共享磁盘设备的STONITH程序,可以方便的在大部分环境中进行实施。

iSCSI 是一种 SAN的设备而 SAN的设备主要是提供 Server
存储体的空间.相较于传统的 SAN 是以光纤为传输媒体而 iSCSI(Internet
SCSI)他是 IP-based 的数据存储的设备.使得他能更容易应用在企业中.
1.一般的网卡就能当作 iSCSI Target 但是缺点就是会消耗太多的 CPU
资源,针对这样的问题所以发展出另外两种的 iSCSI Target 网卡.2.一种是软件的
iscsi + TOE (TOE:TCP/IP offload engine),它可以针对 TCP/IP
的封包直接在网络卡 上运算所以不会因此占用系统上的 CPU 的使用率,
3.另外一种就是硬件式的 iSCSI + TOE. 它除了具有 TOE 还可以直接针对 iSCSI
的数据做运算.基本上它的使用上就像是一般存储设备 HBA.你可以直接在 BIOS
选项作 iSCSI 硬件开机的动作.
当前 RHEL5 和 SLES10 都已经将 iSCSI Target
当作缺省的组件,所以之前的版本如 RHEL4 需要使用 iSCSI Target
这边介绍另外一套 IET (iSCSI Enterprise Target) 首先要先下载iSCSI Target
我们可以在
中可以看到.直接使用最新一版即可.下载下来是 Source code 所以基本的
Linux(RedHat, Fedora…)都可以直接编辑使用.
1.Target端的配置
target端即磁盘阵列或其他装有磁盘的主机。通过iscsitarget工具将磁盘空间映射到网络上,initiator端就可以寻找发现并使用该磁盘。
注意,一个target主机上可以映射多个target到网络上,即可以映射多个块设备到网络上。
1)软件包
iscsitarget
可以从
2)编译安装
很简单,解包,编译,安装就可以。
tar zxvf iscsitarget-1.4.19.tar.gz
cd iscsitarget-1.4.19/
make
make install
该包会将iscsitarget需要的内核模块,用户层工具,服务启动脚本,配置文件,man手册等安装到系统中
包括:
iscsi_trgt.ko 内核模块
ietd iscsitarget的守护进程
ietadm iscsitarget的用户层管理工具
/etc/init.d/iscsi-target iscsitarget的启动脚本
/etc/ietd.conf iscsitarget的配置文件
/etc/initiators.allow 控制initiator对target的访问权限。
/etc/initiators.deny 控制initiator对target的访问权限。
/etc/iet/targets.allow 控制不同target的被访问权限。
3)配置/etc/ietd.conf
Target iqn.2001-04.com.example:storage.disk2.sys1.xyz
Lun 0 Path=/dev/sda1,Type=fileio
Alias lun0
大致说明:
Target iqn.2001-04.com.example:storage.disk2.sys1.xyz 表示该ISCSI Target
的命名,命名在同一子网内应该是唯一的,标准命名方式为:
“Target “+ target名字 (格式如下: iqn.yyyy-mm.<reversed domain
name>[:identifier] )
“Lun 0 Path=/dev/sda1”表示块设备号为0,映射的磁盘为/dev/sda1。
本次配置中 Type 的设定为”fileio”,我主要用来对一个磁盘进行存储共享。
当然也可以针对需要设置为: “file” or “LVM”。
除此之外还有很多其他参数可以设置,具体参考:

4)启动iscsitarget
/etc/init.d/iscsi-target start
2.inititor端配置
1)软件包
源码包是open-iscsi,经过rpm包封装后,名字是iscsi-initiator-utils。
2)主要安装了下面一些文件
/etc/iscsi/iscsid.conf
/etc/rc.d/init.d/iscsi
/etc/rc.d/init.d/iscsid
/sbin/iscsi-iname
/sbin/iscsiadm
/sbin/iscsid
/sbin/iscsistart
/var/lib/iscsi
/var/lib/iscsi/ifaces
/var/lib/iscsi/isns
/var/lib/iscsi/nodes
/var/lib/iscsi/send_targets
/var/lib/iscsi/slp
/var/lib/iscsi/static
/var/lock/iscsi
3)连接target
首先要保证iscsid守护进程启动,否测iscsiadm的一系列操作都会失败:
/etc/init.d/iscsid start
发现target:
iscsiadm -m discovery -t sendtargets -p <iSCSI target
ip>:<port>
默认情况下<port>是3260,除非你有特殊的设置。
与target建立连接:
iscsiadm -m node -T <target-name> -p
<ip-address>:<port> –login
此处target-name为上一步发现target时的获得的。
此时通过fdisk
-l就可以看到映射过来的磁盘,该磁盘可以像使用本地磁盘一样进行格式化,分区等操作。
可以通过以下命令实验:
fdisk /dev/sdc
mkfs.ext3 /dev/sdc1
mount /dev/sdc1 /mnt
dd if=/dev/zero f=100M.img bs=1M count=100
3.target和initiator间使用CHAP验证。
CHAP验证有两种,一种是针对discovery的,即如果不符合验证的用户名和密码,则initiator端便无法通过”-m
discovery”发现指定主机上的任何一个target。
命令会返回验证失败,如下:
$ iscsiadm -m discovery -t sendtargets -p 192.168.29.224
iscsiadm: Login failed to authenticate with target
iscsiadm: discovery login to 192.168.29.224 rejected: initiator error
(02/01), non-retryable, giving up
另一种是针对node
login的,即果不符合验证的用户名和密码,则initiator端编无法通过–login登录指定主机上的某一个target。
命令会返回验证失败,如下:
$ iscsiadm -m discovery -t sendtargets -p 192.168.29.224
#成功discover指定主机上的target
192.168.29.224:3260,1 iqn.2001-04.com.example:storage.disk2.sys1.xyz
$ iscsiadm -m node -T iqn.2001-04.com.example:storage.disk2.sys1.xyz -p
192.168.29.224 –login #无法通过验证,登录失败
Logging in to [iface: default, target:
iqn.2001-04.com.example:storage.disk2.sys1.xyz, portal:
192.168.29.224,3260]
iscsiadm: Could not login to [iface: default, target:
iqn.2001-04.com.example:storage.disk2.sys1.xyz, portal:
192.168.29.224,3260]:
iscsiadm: initiator reported error (15 – already exists)
1)在initiator端
配置/etc/iscsi/iscsid.conf,添加如下选项:
#以下三个是针对discovery的。
#discovery时启用CHAP验证
discovery.sendtargets.auth.authmethod = CHAP
#initiator的名字,也可以是别的字符串,只要和target端IncomingUse配置的名字一样就行
discovery.sendtargets.auth.username =
iqn.1994-05.com.fedora:ba72af8aaf5
#验证密码,要和target端相同
discovery.sendtargets.auth.password = 1234567890ab
#以下三个是针对login的。
#login时启用CHAP验证
node.session.auth.authmethod = CHAP
#initiator的名字,也可以是别的字符串,只要和target端IncomingUse配置的名字一样就行
node.session.auth.username = iqn.1994-05.com.fedora:ba72af8aaf5
#验证密码,要和target端相同
node.session.auth.password = 1234567890
然后重启initiator。
/etc/init.d/iscsid stop
/etc/init.d/iscsid start
2)在target端
针对discovery配置/etc/ietd.conf,在全局参数处(定义第一个target之前),添加如下一行:
IncomingUser iqn.1994-05.com.fedora:ba72af8aaf5 1234567890ab
IncomingUser 和 OutgoingUser 表示ISCSI
客户端的用户名和密码,用户名和密码都可以为空,默认为allow权限,密码最长可为12个字符。
此处iqn.1994-05.com.fedora:ba72af8aaf5是initiator的名字(也可以是别的字符串),1234567890ab是initiator的密码,名字和密码必须和initiator上/etc/iscsi/iscsid.conf
中的用户名密码一致。如果不一致,则initiator执行”-m discovery”
是就会失败。
针对login配置/etc/ietd.conf,既然是针对login的,那么添加IncomingUser是就应该添加的指定的target上。如下:
Target iqn.2001-04.com.example:storage.disk2.sys1.xyz
Lun 0 Path=/dev/sda1,Type=fileio
IncomingUser iqn.1994-05.com.fedora:ba72af8aaf5 1234567890
然后重启iscsitarget
/etc/init.d/iscsi-target stop
/etc/init.d/iscsi-target start

目前针对STONITH,有许多不同的程序可被使用。SBD
STONITH的优势在于部署的方便性和可靠性。唯一的要求是Linux环境中必须有共享存储。典型意义上说,就是需要一个“光纤存储网络——storage
area
network”英文简称:SAN)。如果你没有一个SAN网络,你也可以使用Linux的iSCSI功能来搭建,有关iSCSI的介绍将会在之后的系列中详细阐述。

  目前针对STONITH,有许多不同的程序可被使用。SBD
STONITH的优势在于部署的方便性和可靠性。唯一的要求是Linux环境中必须有共享存储。典型意义上说,就是需要一个“光纤存储网络——storage
area
network”(英文简称:SAN)。如果你没有一个SAN网络,你也可以使用Linux的iSCSI功能来搭建,有关iSCSI的介绍将会在之后的系列中详细阐述。

iscsi操作总结
增加iscsi存储
(1)发现iscsi存储:

在SBD
STONITH里,Linux集群的节点们使用心跳机制来保持互相之间的信息更新。如果集群中的一个节点发生错误,一条有关此节点的错误记录就会被写下并发送到共享的存储设备。当文件系统资源安全的切换到Linux集群的另一个节点上之后,此节点就必须接受这条错误信息并自己关闭自己。

  在SBD
STONITH里,Linux集群的节点们使用心跳机制来保持互相之间的信息更新。如果集群中的一个节点发生错误,一条有关此节点的错误记录就会被写下并发送到共享的存储设备。当文件系统资源安全的切换到Linux集群的另一个节点上之后,此节点就必须接受这条错误信息并自己关闭自己。

iscsiadm -m discovery -t st -p ISCSI_IP
(2)查看iscsi发现记录:

SBD
STONITH是一个简单但有效的方法用来确保在Linux集群环境中数据和其他节点的集成,但是要实现这个功能的前提条件是必须能够进入SAN环境。接下去的步骤描述了如何搭建SBD
STONITH环境。

  SBD
STONITH是一个简单但有效的方法用来确保在Linux集群环境中数据和其他节点的集成,但是要实现这个功能的前提条件是必须能够进入SAN环境。接下去的步骤描述了如何搭建SBD
STONITH环境。

iscsiadm -m node
(3)登录iscsi存储:

1.首先,你必须创建一个小的逻辑单位LUN)卷。理论上1MB就足够了,但是为了安全起见,最好的办法是创建一个至少一柱一般为8MB)的SBD。接下来,你需要找到这个LUN设备独一无二的设备名称,因为这个将会被集群中的节点们看到。典型意义上来说,你会使用multipath
–l命令在Linux集群中的一个节点来找出这个LUN所使用的独一无二的设备名称。

  1.首先,你必须创建一个小的逻辑单位(LUN)卷。理论上1MB就足够了,但是为了安全起见,最好的办法是创建一个至少一柱(一般为8MB)的SBD。接下来,你需要找到这个LUN设备独一无二的设备名称,因为这个将会被集群中的节点们看到。典型意义上来说,你会使用multipath
–l命令在Linux集群中的一个节点来找出这个LUN所使用的独一无二的设备名称。

iscsiadm -m node -T LUN_NAME -p ISCSI_IP -l
(4)开机自动:

2.现在作为root用户,从众多节点中的一个命令行开始,你需要标记你刚刚创建的SBD设备的LUN,使用sbd
-d <devicename> create
命令。这条命令会将SBD的信息写入设备,所以不管你使用哪个设备名称,只要你能从那个节点看到这个设备就行。确保当使用此设备工作时,你工作的设备名称不会改变。那就意味着你应该使用/dev/disk/by-id
在一开始来命名设备名称。虽然这些名字又长又丑,但是至少他们不会改变。你可以使用ls-l
命令来查阅“简单的”设备名称。所以定义这个设备/dev/disk/by-id/scsi-149455400000000000000000003000000250600000f000000
作为SBD STONITH 设备, 使用sbd -d
/dev//disk/by-id/scsi-149455400000000000000000003000000250600000f000000
来创建。

  2.现在作为root用户,从众多节点中的一个命令行开始,你需要标记你刚刚创建的SBD设备的LUN,使用sbd
-d create
命令。这条命令会将SBD的信息写入设备,所以不管你使用哪个设备名称,只要你能从那个节点看到这个设备就行。确保当使用此设备工作时,你工作的设备名称不会改变。那就意味着你应该使用/dev/disk/by-id
在一开始来命名设备名称。虽然这些名字又长又丑,但是至少他们不会改变。你可以使用ls-l
命令来查阅“简单的”设备名称。所以定义这个设备/dev/disk/by-id/scsi-149455400000000000000000003000000250600000f000000
作为SBD STONITH 设备, 使用sbd -d
/dev//disk/by-id/scsi-149455400000000000000000003000000250600000f000000
来创建。

iscsiadm -m node –T LUN_NAME -p ISCSI_IP –op update -n node.startup
-v automatic
删除iscsi存储
(1)登出iscsi存储

4.此时,你可以使用sbd -d
/dev/disk/by-id/scsi-149455400000000000000000003000000250600000f000000
dump 命令来查看哪些被写入了此设备。这给予了你类似下文的一份输出

  4.此时,你可以使用sbd -d
/dev/disk/by-id/scsi-149455400000000000000000003000000250600000f000000
dump 命令来查看哪些被写入了此设备。这给予了你类似下文的一份输出

iscsiadm -m node -T LUN_NAME -p ISCSI_IP -u
(2)登出iscsi所有登录

Listing: Requesting current SBD information using sbd -d <device>
dump

  Listing: Requesting current SBD information using sbd -d dump

iscsiadm -m node –logoutall=all
(3)删除iscsi发现记录:

xen1:/dev/disk/by-id # sbd -d
/dev/disk/by-id/scsi-149455400000000000000000003000000250600000f000000
dump

  xen1:/dev/disk/by-id # sbd -d
/dev/disk/by-id/scsi-149455400000000000000000003000000250600000f000000
dump

iscsiadm -m node -o delete -T LUN_NAME -p ISCSI_IP
登入需验证码的节点
(1)开启认证
iscsiadm -m node -T LUN_NAME -o update –name
node.session.auth.authmethod –value=CHAP
*.使用-o同–op
(2)添加用户
iscsiadm -m node -T LUN_NAME –op update –name
node.session.auth.username –value=[用户名]
(3)添加密码
iscsiadm –m node –T LUN_NAME –op update –name
node.session.auth.password –value=[密码]

Header version  : 2

  Header version : 2

Number of slots  : 255

  Number of slots : 255