标签:linux iscsi
Linux ISCSI服务器搭建
iSCSI技术是一种由IBM公司研究开发的,是一个供硬件设备使用的可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。iSCSI技术是一种新储存技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,使服务器可与使用IP网络的储存装置互相交换资料。
iSCSI:Internet 小型计算机系统接口 (iSCSI:Internet SmallComputer System Interface)。
Internet 小型计算机系统接口(iSCSI)是一种基于 TCP/IP的协议,用来建立和管理 IP 存储设备、主机和客户机等之间的相互连接,并创建存储区域网络(SAN)。SAN 使得 SCSI 协议应用于高速数据传输网络成为可能,这种传输以数据块级别(block-level)在多个数据存储网络间进行。
SCSI 结构基于客户/服务器模式,其通常应用环境是:设备互相靠近,并且这些设备由 SCSI 总线连接。iSCSI 的主要功能是在 TCP/IP 网络上的主机系统(启动器 initiator)和存储设备(目标器 target)之间进行大量数据的封装和可靠传输过程。此外,iSCSI 提供了在 IP 网络封装 SCSI 命令,且运行在 TCP 上。
iSCSI的工作过程:当iSCSI主机应用程序发出数据读写请求后,操作系统会生成一个相应的SCSI命令,该SCSI命令在iSCSI initiator层被封装成ISCSI消息包并通过TCP/IP传送到设备侧,设备侧的iSCSI target层会解开iSCSI消息包,得到SCSI命令的内容,然后传送给SCSI设备执行;设备执行SCSI命令后的响应,在经过设备侧iSCSI target层时被封装成ISCSI响应PDU,通过TCP/IP网络传送给主机的ISCSI initiator层,iSCSI initiator会从ISCSI响应PDU里解析出SCSI响应并传送给操作系统,操作系统再响应给应用程序。
Server | 172.20.100.100 | 4C 8G |
client1 | 172.20.100.101 | 4C 8G |
client2 | 172.20.100.202 | 4C 8G |
Server服务器三块硬盘,硬盘1是系统盘,硬盘2、硬盘3分别作为ISCSI服务端,提供给客户端访问
[root@Server ~]# yum list |grep scsi* |
[root@Server ~]# yum install scsi-target-utils |
安装完毕后,查看scsi-target-utils具体安装位置
[root@Server ~]# rpm -ql scsi-target-utils |
[root@Server ~]# service tgtd start [root@Server ~]# chkconfig tgtd on [root@Server ~]# netstat -tunpl |grep 3260 |
NAME
tgtadm - Linux SCSI TargetAdministration Utility
SYNOPSIS
tgtadm [OPTIONS]... [-C --control-port<port>] [-L --lld <driver>]
[-o --op<operation>] [-m --mode <mode>] [-t --tid <id>]
[-T --targetname<targetname>] [-Y --device-type <type>]
[-l --lun<lun>] [-b --backing-store <path>]
[-E --bstype <type>][-I --initiator-address <address>]
[-Q --initiator-name<name>] [-n --name <parameter>]
[-v --value<value>]
[-P --params<param=value[,param=value...]>] [-F --force]
[-h --help]
tgtadm常用于管理三类对象:
target:创建new,删除,查看
lun:创建,查看,删除
account:创建用户,绑定,解绑定,删除,查看
常用选项:
-L: --lld <driver>
<driver> iscsi
-m:--mode <mode>
<mode>:target,logicalunit等
-o:--op<operation>
<operation>:new,show,delete,bind,unbind
-t:--tid <id>:指定target的ID
-T:--targetname<targetname>:指定target的名称
Target的命名机制:为了保证全局唯一,命名要遵循iqn规则
Iqn:iqn.yyyy-mm.reverse_domain.STRING[:substring]
Iqn.2017-08.com.test.web:server1
-l: --lun <lun>:指定LUN的号码
-b: --backing-store<path>:关联到某指定LUN上的后端存储设备,可以是磁盘,分区,建议使用磁盘
-I –initiator-address<address>:指定授权访问某target的IP地址:
语法:tgtadm--lld [driver] --op [operation] --mode [mode] [OPTION]...
(1)、添加一个新的 target 且其ID为 [id], 名字为 [name].
--lld[driver] --op new --mode target --tid=[id] --targetname [name]
如:创建一个target
tgtadm --lld iscsi --op new --mode target --tid 1 –T iqn.2013-05.com.magedu:tsan.disk1
(2)、显示所有或某个特定的target:
--lld[driver] --op show --mode target [--tid=[id]]
如:显示所有
tgtadm--lld iscsi --op show --mode target
(3)、向某ID为[id]的设备上添加一个新的LUN,其号码为[lun],且此设备提供给initiator使用。[path]是某“块设备”的路径,此块设备也可以是raid或lvm设备。lun0已经被系统预留。
--lld[driver] --op new --mode=logicalunit --tid=[id] --lun=[lun] --backing-store[path]
如:显示刚创建的target
tgtadm--lld iscsi --op show --mode target --tid 1
(4)、删除ID为[id]的target:
--lld[driver] --op delete --mode target --tid=[id]
如:创建LUN,号码为1
tgtadm--lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sda1
(5)、删除target [id]中的LUN[lun]:
-lld[driver] --op delete --mode=logicalunit --tid=[id] --lun=[lun]
如:开放给192.168.0.0/24网络中的主机访问(其中的-I相当于--initiator-address):
tgtadm--lld iscsi --op bind --mode target --tid 1 -I 192.168.85.0/24
(6)、定义某target的基于主机的访问控制列表,其中[address]表示允许访问此target的initiator客户端的列表
--lld[driver] --op bind --mode=target --tid=[id] --initiator-address=[address]
如:Create anew account
tgtadm--lld iscsi --op new --mode account --user administrator --password 123456
tgtadm--lld iscsi --op show --mode account
Assignthis account to a target:
tgtadm--lld iscsi --op bind --mode account --tid 1 --user administrator
tgtadm--lld iscsi --op show --mode target
(7)、解除target [id]的访问控制列表中[address]的访问控制权限:
--lld[driver] --op unbind --mode=target --tid=[id] --initiator-address=[address]
如:Set up anoutgoing account. First, you need to create a new account like the previousexample
tgtadm--lld iscsi --op new --mode account --user abc --password 123456
tgtadm--lld iscsi --op show --mode account
tgtadm--lld iscsi --op bind --mode account --tid 1 --user abc --outgoing
tgtadm--lld iscsi --op show --mode target
[root@Server ~]# tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2017-08.com.test.web:server1 |
[root@Server ~]# tgtadm --lld iscsi --op show --mode target |
[root@Server ~]# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sdb [root@Server ~]# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 2 -b /dev/sdc |
[root@Server ~]# tgtadm --lld iscsi --op bind --mode target --tid 1 --initiator-address 172.20.0.0/16 |
[root@client1 ~]# yum install iscsi-initiator-utils [root@client1 ~]# rpm -ql iscsi-initiator-utils |
[root@client1 ~]# cat /etc/iscsi/initiatorname.iscsi |
[root@client1 ~]# echo "InitiatorName=iqn.2017-08.com.test.web:client1" > /etc/iscsi/initiatorname.iscsi [root@client1 ~]# cat /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.2017-08.com.test.web:client1 |
生成iscsi名称,这个名称后面字符串唯一
[root@client1 ~]# iscsi-iname -p iqn.2018-08.com.test iqn.2018-08.com.test:df34e78608a |
# yuminstall iscsi-initiator-utils
# echo"InitiatorName=`iscsi-iname -p iqn.2013-05.com.magedu`" >/etc/iscsi/initiatorname.iscsi
# echo"InitiatorAlias=initiator1" >> /etc/iscsi/initiatorname.iscsi
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 ] [ -Uall,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 -m discovery -t sendtargets -p 172.20.100.100
# iscsiadm-m node -T iqn.2017-08.com.test.web:server1 -p 172.20.100.100:3260 -l
#iscsiadm -m node -T iqn.2017-08.com.test.web:server1 -p 172.20.100.100:3260 -u
#iscsiadm -m node -T iqn.2017-08.com.test.web:server1 -p 172.20.100.100:3260 -odelete
查看会话相关信息:
#iscsiadm -m session -s
挂载时使用_netdev作为选项
创建服务端谁所需要的帐号,并实现单方向的认证:
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 192.168.0.11:3260 -u
#iscsiadm -m node -T iqn.2010-8.com.example.ts:disk1 -p 192.168.0.11:3260 -odelete
# rm-rf -rf /var/lib/iscsi/send_targets/192.168.0.11,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主机地址可能需要按照您的实际情况修改。
[root@client1 ~]# service iscsi start [root@client1 ~]# chkconfig iscsi on [root@client1 ~]# service iscsid start [root@client1 ~]# chkconfig iscsid on |
[root@client1 ~]# iscsiadm -m discovery -t sendtargets -p 172.20.100.100 |
[root@client1 ~]# iscsiadm -m node -T iqn.2017-08.com.test.web:server1 -p 172.20.100.100 -l |
[root@client1 ~]# mkfs.ext4 /dev/sdb [root@client1 ~]# mkdir /data1 [root@client1 ~]# mount /dev/sdb /data1 |
yum install iscsi-initiator-utils iscsiadm -m discovery -t sendtargets -p 172.20.100.100 service iscsi start service iscsid start chkconfig iscsi on chkconfig iscsid on iscsiadm -m node -I iqn.2017-08.com.test.web:server1 -p 172.20.100.100 -l iscsiadm -m node -T iqn.2017-08.com.test.web:server1 -p 172.20.100.100 -l fdisk -l mkdir /data1 mkfs.ext4 /dev/sdc mount /dev/sdc /data1 cd /data1 |
[root@client1 ~]# umount /data1 [root@client1 ~]# iscsiadm -m node -T iqn.2017-08.com.test.web:server1 -p 172.20.100.100 -u |
节点发现登录之后,信息缓存到这里,下次启动会自动登录,要彻底消失,可直接把目录删掉,也可用命令删除
[root@client1 iscsi]# iscsiadm -m node -T iqn.2017-08.com.test.web:server1 -p 172.20.100.100 -o delete |
再删除目录
[root@Server ~]# tgtadm --lld iscsi --op unbind -m target -t 1 -I 172.20.0.0/16 |
[root@Server ~]# tgtadm --lld iscsi --op delete --mode logicalunit --tid 1 --lun 2 |
[root@Server ~]# tgtadm --lld iscsi --op delete -m target -t 1 |
[root@Server tgt]# vi /etc/tgt/targets.conf <target iqn.2017-08.com.test.web:server1> backing-store /dev/sdb </target> |
[root@Server tgt]# service tgtd restart [root@Server tgt]# tgtadm --lld iscsi --op show --mode target |
[root@Server tgt]# vi /etc/tgt/targets.conf
<target iqn.2017-08.com.test.web:server1> backing-store /dev/sdb initiator-address 172.20.0.0/16 </target>
|
客户端挂载,根上述方法一样。
综上:就是iscsi服务器搭建的全过程。
本文出自 “星星的夜” 博客,请务必保留此出处http://guomin.blog.51cto.com/2483984/1959786
标签:linux iscsi
原文地址:http://guomin.blog.51cto.com/2483984/1959786