1、iSCSI架构
iSCSI是Internet Small Computer System Interface的缩写,简单来说就是Internet SCSI,
是把SCSI指令通过TCP/IP协议封装起来,在以太网中传输。这样一来,iSCSI 就是用广域网仿真了一个常用的高性能本地存储总线,从而创建了一个存储局域网(SAN)。不像某些 SAN 协议,iSCSI 不需要专用的电缆,它可以在已有的IP 基础架构上运行。
我们先了解下关于iSCSI的三个名词:iSCSI Initiator、iSCSI Target、 iSCSI LUN。
- iSCSI Initiator:I/O操作的启动者,连接IP网络并对iSCSI target发起请求以及接收响应。每一个iSCSI主机通过唯一的IQN来识别,类似于光纤通道的WWN。
- iSCSI Target:I/O操作的执行者,目的是给客户端共享存储设备。
- iSCSI LUN:每个在同一个target上的backing-store 称为逻辑单元号(LUN),LUN ID由iSCSI Target分配。
我们可以把Target主机看作是服务端,把Initiator主机看作是客户端,LUN 好比是个“逻辑单位磁盘”。
iSCSI 服务端和客户端的通讯就是一个在网络上封包和解包的过程,在网络的一端,数据包被封装成包括TCP/IP头、iSCSI 识别包和SCSI 数据三部分内容,传输到网络另一端时,这三部分内容分别被顺序地解开。
2、iSCSI服务端常用命令
我们需要通过命令tgtadm来创建target,同时把共享资源添加到target中,这样客户端才可以访问服务端上的存储资源。
tgtadm常用于管理三类对象:target、LUN、account
- 模式target下的语法格式
tgtadm --lld <driver> --mode target –op {new|delete|show|update|bind|unbind} [option]
其中driver一般为iscsi
- 模式logicalunit下的语法格式
tgtadm --lld <driver> --mode logicalunit –op {new|delete} [option]
其中driver一般为iscsi
- 模式account下的语法格式
tgtadm --lld <driver> --mode account --op {new|delete|bind|unbind} [option]
其中driver一般为iscsi
下面列举一些常用命令:
- 创建1个target
[root@node1 ~] tgtadm --lld iscsi --mode target --op new --tid 1 --targetname target1
[root@node1 ~]
- 向target中添加1个LUN
[root@node1 ~] tgtadm -L iscsi -m logicalunit -o new -t 1 -l 1 --backing-store rbd/foo --bstype rbd
[root@node1 ~]
- 查看target
tgtadm --lld iscsi -m target -o show
还可以使用tgt-admin -s查看target
- 绑定ip地址
给target绑定一个ip,表示只有此ip可以连接target,如果不限制ip,就是ALL,还可以绑定一个ip网段。这是iSCSI的一种认证方式:IP认证,除此之外,还有基于account的CHAP认证。
tgtadm --lld iscsi --op bind --mode target --tid 1 --initiator-address ALL
- 解绑ip地址
tgtadm --lld iscsi --op unbind --mode target --tid 1 --initiator-address ALL
- 删除一个lun
tgtadm --lld iscsi --mode logicalunit --op delete --tid 1 --lun 1
- 删除一个target
tgtadm -L iscsi -m target -o delete -t 1
- 新建一个用户
tgtadm --lld iscsi --op new --mode account -u user1 -p 1********
- 查看用户列表
tgtadm --lld iscsi -m account -o show
- 绑定一个用户
tgtadm --lld iscsi --op bind --mode account --tid 1 -u user1
- 解绑一个用户
tgtadm --lld iscsi --op unbind --mode account --tid 1 -u user1
- 删除一个用户
tgtadm --lld iscsi --op delete --mode account -u user1
target端使用tgtadm命令配置的结果都是工作在内核中的,重启tgt服务或重启系统时,内存中的内容都会丢失。所以要永久让配置生效需要写入到配置文件中去。target的配置文件默认是/etc/tgt/targets.conf,通过target配置文件配置,重启后依然生效。
3、iSCSI客户端常用命令
在Linux 2.6内核中提供了iscsi驱动,iSCSI 驱动(driver)使主机拥有了通过IP网络访问存储的能力,但还需要一个具体的客户端工具(Linux用户空间组件)初始化iSCSI驱动,即iscsi-initiator-utils。
- 安装initiator程序iscsi-initiator-utils
yum install iscsi-initiator-utils
安装完成后,比较重要的配置文件有两个: 一个是/etc/iscsi/iscsid.conf,所有刚发起的iSCSI session默认都将使用这个文件中的参数设定,另一个是 /etc/iscsi/initiatorname.iscsi,iSCSI initiator的intiator名称配置文件。
- 发现target
在ip是172.27.255.111的服务端新建两个target。
iscsiadm -m discovery -t sendtargets -p 172.27.255.111
- 登录target
iscsiadm -m node -T target1 -p 172.27.255.111 -l
登录成功后能看到新增了一个盘/dev/sdc
- 查看连接的会话
iscsiadm -m session,可以通过选项-P 0-3 来打印更详细的信息
Iscsiadm -m session -P 3
- 查看node
发现的target都会保存在本地的数据库中,可以通过命令iscsiadm -m node查看。
- 退出登录
iscsiadm -m node -T target1 -p 172.27.255.111 -u
客户端退出所有登录
iscsiadm -m node -U all
- 删除node信息
连接死掉(断网或者target端断掉或目标器IP改变)时,可以删除老节点,然后再重新发起discovery生成新节点,使用如下指令删除
iscsiadm -m node -T target1 -p 172.27.255.111 -o delete
删除所有node信息
iscsiadm -m node -o delete
- 扫描所有关联的target/session
有时客户端登录后,LUN的信息发生变化,客户端不能立即看到,这样就需要rescan命令。
[root@client2 ~]# iscsiadm -m node -R
Rescanning session [sid:8, target:target1, portal: 172.27.255.111,40000]
[root@client2 ~]# iscsiadm -m session -R
Rescanning session [sid:8, target:target1, portal: 172.27.255.111,40000]