1.什么是iscsi
1.1 scsi
SCSI是一种I/O技术,规范了一种并行的I/O总线和相关协议(scsi协议)。
SCSI总线通过SCSI控制器(target)来和硬盘之类的设备(scsi设备)进行通信,访问的客户端应用称为Initiator。窄SCSI总线最多允许8个、宽SCSI总线最多允许16个不同的SCSI设备和它进行连接,每个SCSI设备都必须有自己唯一的SCSI ID(设备的地址)。
LUN(Logical Unit Number,逻辑单元号):每个SCSI ID上最多有32个LUN,一个LUN对应一个逻辑设备。
1.2 iscsi
iSCSI是实现IP-SAN的一种技术,利用TCP/IP协议和scsi协议,让客户端计算机可以通过局域网把scsi服务器端映射为本地的储存空间(磁盘)。
1.3 iscsi与nfs的区别
iscsi本质上是用于块存储的,nfs本质上则是用于文件存储的,所以iscsi服务器映射到本机上的存储空间更接近于磁盘,而nfs服务器映射到本机的更接近于共享目录
2.iscsi服务器端配置
服务器与客户端都是centos7环境
2.1条件准备
(1)关闭防火墙
(2)关闭selinux
(3)配置静态ip
2.2服务器端安装iscsi管理工具scsi-target-utils
yum install -y epel-release
yum install -y scsi-target-utils
2.3创建LUN
使用fdisk命令创建新分区作为LUN(不需要格式化、挂载)
我是新添加了一块200G的磁盘,并划分了2个50G的分区/dev/sdb1、/dev/sdb2
2.4开启tgtd服务并将其设为开机自启
systemctl start tgtd
systemctl enable tgtd
2.5创建target
target就是scsi控制器,需要设置唯一的scsi id、绑定局域网子网ip、创建LUN(LUN也有id)
tgtadm --lld iscsi -o new -m target -t 1 -T target1
#将target的scsi id设为1,名称设为target1
tgtadm -L iscsi -o bind -m target -t 1 -I 192.168.0.0/24
#将target1绑定子网ip
tgtadm -L iscsi -o new -m logicalunit -t 1 -l 1 -b /dev/sdb1
tgtadm -L iscsi -o new -m logicalunit -t 1 -l 2 -b /dev/sdb2
#将之前创建的分区作为LUN,并给它们分配id:1、2,注意不能从0开始分配,因为target1本身占据了0id
#-t后接target的iscsi id,-l后接LUN id
tgtadm -L iscsi -o show -m target
#配置完成后,通过此命令查看计算机的target
配置完成后的target如下图:
2.6配置iscsi服务用户
tgtadm --lld iscsi --op new --mode account --user iscsiuser1 --password 123456
#创建的账户名为iscsiuser1,密码为123456
tgtadm --lld iscsi --op bind --mode account --tid 1 --user iscsiuser1
#为用户iscsiuser1授予访问ID为1的target的权限
tgtadm --lld iscsi --op show --mode account
#创建完成后查看iscsi用户信息
*2.7在配置文件中配置服务
上述所做的所有配置都只是在内存中生效,如果重启服务,配置就会失效。
若要实现重启服务配置不失效,就要修改配置文件/etc/tgt//targets.conf,在其中键入以下内容:
<target target1> #配置target名称
<backing-store /dev/sdb1> #配置共享磁盘
lun 1 #配置LUN号
</backing-store>
<backing-store /dev/sdb2> #配置共享磁盘
lun 2 #配置LUN号
</backing-store>
incominguser iscsiuser1 123456 #配置认证的用户名和密码
initiator-address 192.168.0.0/24 #配置允许的网段
</target>
3.iscsi客户端配置
3.1安装iscsi客户端管理工具
yum install -y iscsi-initiator-utils
3.2配置客户端名称
打开文件/etc/iscsi/initiatorname.iscsi
在其中键入:
InitiatorName=target1
#指定target
InitiatorAlias=node1
#设置客户端名称为node1
3.3在配置文件中添加target访问用户
打开/etc/iscsi/iscsid.conf
(1)取消node.session.auth.authmethod = CHAP的注释
(2)找到node.session.auth.username =,并取消注释,将其后的用户名改为iscsiuser1
(3)找到node.session.auth.password =,并取消注释,将其后的用户密码改为123456
3.4开启iscsid以及iscsi服务
systemctl start iscsid
systemctl start iscsi
3.5发现target,并登录
(1)发现target
iscsiadm -m discovery -t st -p 192.168.0.54
#发现服务器上的LUN,除了结尾的服务器ip,其他都是固定的
成功后结果如下
(2)通过iscsi用户登录
iscsiadm -m node -T target1 -p 192.168.0.54:3260 -l
#除了target名称和服务器ip,其他都是固定的
登录成功后,可以看到客户端多了两个50G的磁盘
之后便可以对这2块磁盘进行格式化与挂载了
在没有集群功能的情况下,不可以用多台客户端挂载同一个LUN,虽然LUN在未存放数据的情况下可以被多台客户端同时挂载,但那样可能会造成数据混乱;如果LUN内已经写有数据,那么同时挂载会直接出错
3.6客户端删除target
首先卸载客户端的iscsi磁盘挂载,然后再按以下命令删除客户端的target信息
iscsiadm -m node -T target1 -p 192.168.0.54:3260 -u
#客户端登出
iscsiadm -m node -T target1 -p 192.168.0.54:3260 -o delete
#删除发现的target
rm -rf /var/lib/iscsi/send_targets/192.168.0.54*
#删除残留的目录