创建 iscsi target 服务器和 iscsi initiator 客户端连接

iSCSI

说明:

172.166.10.16 Target端

在服务端:

### Target端:(172.16.10.16)
1、准备要共享的设备,这里使用本地磁盘上的新分区代替(只需要分区,不需要格式化即可)
fdisk /dev/sda
partx -d /dev/sda
partx -a /dev/sda
或者使用文件:
dd if=/dev/zero of=/var/lun1.bin count=0 bs=1 seek=50G 

准备好共享磁盘后,继续以下的操作:

2、安装iscsi服务端:
# redhat
yum -y install scsi-target-utils
service tgtd start
chkconfig tgtd on
netstat -tnlp | grep 3260

# ubuntu
apt install tgt
lsof -i:3260

服务端的配置,可以使用命令方式,也可使用配置文件的方式。

使用tgtadm命令方式配置SCSI服务:

tgtadm命令的介绍:

tgtadm 是一个模式化的命令
使用格式:tgtadm --lld [driver] --op [operation] --mode [mode] [OPTION]...
常见的模式(mode):target logicalunit account
#####################################################
target模式的管理命令:管理target
    new:创建一个新的 target
    show:显示target
    delete:删除target
    update:更新(修改)target
    bind:基于IP地址控制
    unbind:解除绑定
#####################################################
logicalunit模式的管理命令:关联tid和后端磁盘
    new:创建一个新的LUN
    deltete:删除一个已有的LUN
#####################################################
account模式的管理命令:管理account CHAP(挑战式握手应用) 单向认证 
    new
    deltete
    bind
    unbid
#####################################################
target和Initator之间是通过iqn名称来通信的
iqn格式名称:
    iqn.yyyy-mm.reverse-domaim-name:string[.sunstring]
例如:iscsi-iname -p iqn.2014-09.com.magedu.target

也可通过命令的生成的方式:iscsi-iname -p iqn.2014-09.com.magedu
#####################################################
示例:
# (1)、添加一个新的 target 且其ID为 [id], 名字为 [name].
--lld [driver] --op new --mode target --tid=[id] --targetname [name]

# (2)、显示所有或某个特定的target:
--lld [driver] --op show --mode target [--tid=[id]]

# (3)、向某ID为[id]的设备上添加一个新的LUN,其号码为[lun],且此设备提供给initiator使用。
## [path]是某“块设备”的路径,此块设备也可以是raid或lvm设备。lun0已经被系统预留。
--lld [driver] --op new --mode=logicalunit --tid=[id] --lun=[lun] --backing-store [path]

# (4)、删除ID为[id]的target:
--lld [driver] --op delete --mode target --tid=[id]

# (5)、删除target [id]中的LUN [lun]:
-lld [driver] --op delete --mode=logicalunit --tid=[id] --lun=[lun]

# (6)、定义某target的基于主机的访问控制列表,其中,[address]表示允许访问此target的
#  initiator客户端的列表:
--lld [driver] --op bind --mode=target --tid=[id] --initiator-address=[address]

# (7)、解除target [id]的访问控制列表中[address]的访问控制权限:
--lld [driver] --op unbind --mode=target --tid=[id] --initiator-address=[address]

通过tgtadm命令提供SCSI服务:

步骤如下:
# 创建一个target:
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2014-09.com.magedu:test2
# 创建LUN,号码为1:
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sda5

# 开放给172.16.0.0/16网络中的主机访问:
tgtadm --lld iscsi --op bind --mode target --tid 1 -I 172.16.0.0/16
其中的-I相当于--initiator-address

创建完成后,可以使用如上图的命令查看,查看正确后,服务端配置完成。

在客户端:

这里使用的地址是:172.16.10.22

客户端配置(Initiator):
# redhat
yum install iscsi-initiator-utils # 客户端管理工具

# 以下配置是非必需的,默认情况下,会有一个默认的iqn名称
echo "InitiatorName=`iscsi-iname -p iqn.2014-09.com.magedu`" >  \
  /etc/iscsi/initiatorname.iscsi
echo "InitiatorAlias=initiator1" >> /etc/iscsi/initiatorname.iscsi

service iscsi start
chkconfig iscsi on

# ubuntu
apt install open-iscsi open-iscsi-utils # 存在 utils 包时才安装

客户端Initator使用iscsiadm命令来发现,登陆设备。

iscsiadm命令的介绍:

iscsiadm是个模式化的工具,其模式可通过-m或--mode选项指定,常见的模式有discovery、
    node、fw、session、host、iface几个。
如果没有额外指定其它选项,则discovery和node会显示其相关的所有记录;
session用于显示所有的活动会话和连接
fw显示所有的启动固件值
host显示所有的iSCSI主机
iface显示/var/lib/iscsi/ifaces目录中的所有ifaces设定。

# 用法如下:
iscsiadm -m discovery [ -d debug_level ] [ -P printlevel ] \
      [ -I iface -t type -p ip:port [ -l ] ] 
iscsiadm -m node [ -d debug_level ] [ -P printlevel ] [ -L all,manual,automatic ] \
 [ -U all,manual,automatic ] [ [ -T tar-getname -p ip:port -I iface ] \
 [ -l | -u | -R | -s] ] [ [ -o operation ] 

# 参数说明:
-d, --debug=debug_level   显示debug信息,级别为0-8;
-l, --login
-t, --type=type  这里可以使用的类型为sendtargets(可简写为st)、slp、fw和 isns,
    此选项仅用于discovery模式,且目前仅支持st、fw和isns;其中st表示允许每个iSCSI target
    发送一个可用target列表给initiator;
-p, --portal=ip[:port]  指定target服务的IP和端口;
-m, --mode op  可用的mode有discovery, node, fw, host iface 和 session
-T, --targetname=targetname  用于指定target的名字
-u, --logout 
-o, --op=OPEARTION:指定针对discoverydb数据库的操作,其仅能为new、delete、update、show
   和nonpersistent其中之一;
-I, --interface=[iface]:指定执行操作的iSCSI接口,这些接口定义在/var/lib/iscsi/ifaces中;

通过iscsiadm命令发现target命令:

iscsiadm -m discovery -t sendtargets -p 172.16.10.16
iscsiadm -m node -T iqn.2014-09.com.magedu:test2 -p 172.16.10.16 -l

登陆成功后,在客户端会发现多了一块磁盘,可以向本地磁盘一样,分区、格式化、挂载使用。

完成挂载使用。

Target端使用配置文件配置:

一般情况下,在服务端是使用配置文件。使用命令式为了更好的了解Target端的工作模式。

# 配置文件/etc/tgt/targets.conf

<target iqn.2014-09.com.magedu:test2>
   backing-store /dev/sda5
  initiator-address 172.16.0.0/16
</target>

target 名称不能命名用大写字母,否则 windows 无法使用

如果客户端不想使用的话,可以登出

iscsiadm -m node -T iqn.2014-09.com.magedu:test2 -p 172.16.10.16  -u
iscsiadm -m node -T iqn.2014-09.com.magedu:test2 -p 172.16.10.16  -o delete
# 必要的时候,使用
rm -rf -rf /var/lib/iscsi/send_targets/*

补充:

创建服务端谁所需要的帐号,并实现单方向的认证:

1、在target端创建帐号christina,并为其授予访问某tid的权限:
# tgtadm --lld iscsi --op new --mode account --user mageedu --password 123456

接下来还要将用户与某target进行绑定:
# tgtadm --lld iscsi --op bind --mode account --tid 1 --user mageedu
# tgtadm --lld iscsi --op show --mode account

2、编辑initiator端主配置文件,配置客户端登录target时使用此帐号和密码:
# vim /etc/iscsi/iscsid.conf

取消如下项的注释:
# node.session.auth.authmethod = CHAP
# node.session.auth.username = username
# node.session.auth.password = password

而后,将后两项的用户名密码设置为target端设置的用户名和密码:
node.session.auth.username = mageedu
node.session.auth.password = 123456

哪果此前尚未登录过此target,接下来直接发现并登入即可。否则,则需要按照下面的第三步实
  现认证的启用。

3、如果initiator端已经登录过此target,此时还需要先注销登录后重启iscsid服务,并在删除此
   前生成的database后重新发现target,并重新登入,过程如下:

# iscsiadm -m session -r sid -u

# iscsiadm -m node -T iqn.2010-8.com.example.ts:disk1 -p 172.16.10.16:3260 -u
# iscsiadm -m node -T iqn.2010-8.com.example.ts:disk1 -p 172.16.10.16:3260 -o delete
# rm -rf -rf /var/lib/iscsi/send_targets/172.16.10.16:3260
# service iscsid restart

# iscsiadm -m discovery -t sendtargets -p 192.168.0.11
# iscsiadm -m node -T iqn.2010-8.com.example.ts:disk1 -p 192.168.0.11:3260 -l

说明:其中的target名字和target主机地址可能需要按照您的实际情况修改。

配置完成。