iscsi(tgt)+librbd使用

配置使用iscsi

1.为了能在tgt中使用librbd访问ceph的块设备,需要tgt有相应的模块,你可以通过以下命令来确认。

tgtadm --lld iscsi --mode system --op show|grep rbd
rbd (bsoflags sync:direct)

如果有类似于上面的输出结果,说明你的tgt加载了rbd模块。该模块实际上是一个名为bs_rbd.so的动态链接库。如果命令没有输出,则说明你的tgt还不支持rbd,你需要安装最新的tgt,或者直接下载编译最新的源码。这里我给出从源码编译安装的步骤:

2. 下载tgt

git clone https://github.com/fujita/tgt.git

3.  设置CEPH_RBD变量,使得tgt能够编译bs_rbd模块:

export CEPH_RBD=1

4. 在tgt源码的跟目录执行make:

make

5. 执行make install安装

make install

创建target

① 通过命令行创建target

启动target服务:

#启动tgt
systemctl start tgtd
#查询tgt状态:
systemctl status tgtd
#通过端口查询tgt状态
netstat -tnlp | grep 3260
tcp     0    0 0.0.0.0:3260    0.0.0.0:*   LISTEN    2074/tgtd
tcp     0    0 :::3260         :::*        LISTEN    2074/tgtd

加入开机自启动:

chkconfig tgtd on

在ceph中创建pool:

ceph osd pool create iscsi 4

在ceph中创建镜像:

rbd create iscsi-image --size 4096 -p iscsi

创建一个iscsi target:

tgtadm --lld iscsi --mode target --op new --tid 1 --targetname iqn.2023-06.com.example:cephtgt.target01

基于第二步创建的rbd image创建一个lun:

tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 --backing-store iscsi/iscsi-image --bstype rbd

设置lun的访问控制:

tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL

 

② 通过配置文件创建target

1. 创建镜像:

rbd create iscsi-image --size 4096 -p iscsi

2. 配置target:

# cat /etc/tgt/conf.d/librbd.conf 
<target iqn.2019-04.com.example:cephrbd.img02>
    bs-type rbd
    backing-store iscsi/iscsi-image
    initiator-address 192.168.0.0/16
</target>

 

配置iscsi initiator

安装完成后,比较重要的配置文件有两个: /etc/iscsi/iscsid.conf 所有刚发起的iSCSI session默认都将使用这个文件中的参数设定 以及 /etc/iscsi/initiatorname.iscsi 软件iSCSI initiator的intiator名称配置文件,后面会介绍

设置iscsi服务开机启动同时启动iscsi:

# systemctl enable iscsi.service
# systemctl enable iscsid.service
# systemctl start iscsi.service
# systemctl start iscsid.service

通过命令iscsi-iname命令生成随机的iqn号:

# iscsi-iname  -p  iqn.2019-10.cc.pipci.iscsi
iqn.2019-10.cc.pipci.iscsi:193a96d04d8
# iscsi-iname -p iqn.2019-10.cc.pipci.iscsi
iqn.2019-10.cc.pipci.iscsi:ac34b648a96 

重启服务:

systemctl restart iscsi.service

通过修改/etc/iscsi/initiatorname.iscsi的内容来实现默认的iqn,通过上面的命令生成的iqn重启iscsi服务后还会读取默认的,所以我们直接通过修改这个配置文件来得到一个容易记忆的iqn修改内容如下:

InitiatorName=iqn.2019-10.cc.pipci.iscsi:sn8888    #后面的随机数推荐用主机的sn好后4位或6位,这样比较好管理

现在可以进行discovery来发现target:

iscsiadm -m discovery -t st -p 192.168.1.78:3260
192.168.1.78:3260,1 iqn.pipci.cc.iscsi:debian.tgt1

 

关联target的作用是initiator和target建立session,建立session后,initiator上就可以查看、访问、操作target上的scsi设备。同时target提供的存储设备也挂载到主机中,在/dev目录下生成一个新的设备文件类似于sdb、sdc等。使用iscsiadm -m session 来查看连接会话信息。
有两种关联方法,一是关联所有,一是指定单个target进行关联。关联也可以叫做登录,解关联也可以叫做取消登录

iscsiadm -m discovery [ -d debug_level ] [ -t type -p ip:port -I ifaceN [ -p ip:port ]

-d:输出调试信息,级别从0-8。出现错误的时候用来判断错误来源是很有用处的,可以使用级别2。
-I:指定发现target时通信接口。
-t type:有三种type(sendtargets,SLP,iSNS),一般只会用到sendtargets,可以简写为st。
-p IP:PORT:指定要发现target的IP和端口,不指定端口时使用默认的3260。

进行关联target:

# iscsiadm -m node
192.168.1.78:3260,1 iqn.pipci.cc.iscsi:debian.tgt1
# iscsiadm -m node -T iqn.pipci.cc.iscsi:debian.tgt1 -p 192.168.1.78:3260 -l
Logging in to [iface: default, target: iqn.pipci.cc.iscsi:debian.tgt1, portal: 192.168.1.78,3260] (multiple)
Login to [iface: default, target: iqn.pipci.cc.iscsi:debian.tgt1, portal: 192.168.1.78,3260] successful.

 

解除单个关联:

# iscsiadm -m node -T iqn.pipci.cc.iscsi:debian.tgt1 -p 192.168.1.78:3260  -u
Logging out of session [sid: 1, target: iqn.pipci.cc.iscsi:debian.tgt1, portal: 192.168.1.78,3260]
Logout of [sid: 1, target: iqn.pipci.cc.iscsi:debian.tgt1, portal: 192.168.1.78,3260] successful.

解除所有关联:

iscsiadm -m node -U all

参考资料

1. Linux上配置使用iSCSI详细说明 

2. 使用tgt搭建一个基于rbd的SCSI target

3. Linux下搭建iSCSI共享存储的方法 TGT 方式 Debian9.5系统下

4. iSCSI配置与卸载 

5. iscsi(tgt)+librbd使用

6. tgt服务端流程分析

posted @ 2023-06-26 15:32  苏格拉底的落泪  阅读(278)  评论(0编辑  收藏  举报