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