美文网首页
iscsi(tgt)+librbd使用

iscsi(tgt)+librbd使用

作者: ypdai | 来源:发表于2019-05-29 13:45 被阅读0次

    title: iscsi(tgt)+librbd使用

    1、前言

    因为要调试看下librbd的一个功能。然后准备在自己的测试环境配置下iscsi+librbd,然后方便调试,这里记录下大概过程。

    这里是使用的tgt作为iscsi的target。具体什么是iscsi和iscsi有哪几种target类型,google下就好。

    1、ceph集群准备

    准备一个标准三节点ceph集群:

    [root@ceph01 ~]# ceph -v
    ceph version 12.2.12 (1436006594665279fe734b4c15d7e08c13ebd777) luminous (stable)
    [root@ceph01 ~]# 
    [root@ceph01 ~]# 
    [root@ceph01 ~]# ceph osd tree
    ID CLASS WEIGHT  TYPE NAME       STATUS REWEIGHT PRI-AFF 
    -1       0.08455 root default                            
    -3       0.02917     host ceph01                         
     0   hdd 0.01459         osd.0       up  1.00000 1.00000 
     1   hdd 0.01459         osd.1       up  1.00000 1.00000 
    -5       0.02818     host ceph02                         
     2   hdd 0.01459         osd.2       up  1.00000 1.00000 
     4   hdd 0.01360         osd.4       up  1.00000 1.00000 
    -7       0.02719     host ceph03                         
     3   hdd 0.01360         osd.3       up  1.00000 1.00000 
     5   hdd 0.01360         osd.5       up  1.00000 1.00000
    

    2、编译tgtd

    为啥要自己编译,不直接使用yum install?因为直接yum安装的tgtd服务可能不包含rbd的功能模块,也就不能使用librbd了。所以要自己编译,在编译的时候加入rbd的功能到tgtd服务里面。

    2.1、获取tgtd源码包

    下载地址:https://github.com/fujita/tgt/releases, 下载当前最新的版本v1.0.76,并解压:

    [root@ceph01 ~]# tar -zxvf tgt-1.0.76.tar.gz
    

    2.2、修改相关文件

    为了把rbd功能编入tgtd服务里面,还要一些相关文件才行。

    2.2.1、修改spec文件的如下内容

    [root@ceph01 ~]# vim tgt-1.0.76/scripts/tgtd.spec
    
    ...
    
    Version:        1.0.76  # 修改版本为你下载的包的版本
    
    ...
    
    %install
    ...
    %{__install} -d %{buildroot}/etc/tgt
    %{__install} -d %{buildroot}/usr/lib/tgt/backing-store  # 增加存放bs_rbd.so库的目录
    
    ...
    %{__install} -p -m 0600 conf/targets.conf %{buildroot}/etc/tgt
    %{__install} -p -m 0600 usr/bs_rbd.so %{buildroot}/usr/lib/tgt/backing-store    # 放置usr/bs_rbd.so到/usr/lib/tgt/backing-store目录下
    
    ...
    
    %files
    ...
    /usr/lib/tgt/backing-store/bs_rbd.so    # 在该rpm包释放的文件列表中增加bs_rbd.so文件
    ...
    

    如果不加上面有关bs_rbd.so相关的文件,那制作出来的tgt包就不会包含bs_rbd.so文件,最后安装的tgt包的后端存储就不会支持rbd。

    2.2.2、修改build-pkg.sh里面相关信息

    下面的几个信息,根据你下载的源码版本而定:

    [root@ceph01 ~]# vim tgt-1.0.76/scripts/build-pkg.sh
    ...
    branch="master"
    version="1.0.76"
    release="1"
    ...
    

    2.3、编译tgtd

    安装依赖包(注意下面列出的依赖包,在我们编译出tgtd的rpm包后,待安装tgtd服务的目标机器上也需要安装这些依赖包)

    [root@ceph01 ~]# yum install  librbd1-devel librados2-devel -y
    [root@ceph01 ~]# yum install libxslt docbook-style-xsl libibverbs-devel librdmacm-devel libaio-devel -y
    

    开始编译,要设置CEPH_RBD变量为1,表示编译时加入rbd的功能模块

    [root@ceph01 ~]# cd tgt-1.0.76
    [root@ceph01 tgt-1.0.76]# make CEPH_RBD=1
    make -C usr
    make[1]: Entering directory `/root/tgt-1.0.76/usr'
    cc -c -DUSE_SIGNALFD -DUSE_TIMERFD -DUSE_EVENTFD -D_GNU_SOURCE -I. -g -O2 -fno-strict-aliasing -Wall -Wstrict-prototypes -Werror -fPIC -DTGT_VERSION=\"1.0.76\" -DBSDIR=\"/usr/lib/tgt/backing-store\" iscsi/conn.c -o iscsi/conn.o
    cc -c -DUSE_SIGNALFD -DUSE_TIMERFD -DUSE_EVENTFD -D_GNU_SOURCE -I. -g -O2 -fno-strict-aliasing -Wall -Wstrict-prototypes -Werror -fPIC -DTGT_VERSION=\"1.0.76\" -DBSDIR=\"/usr/lib/tgt/backing-store\" iscsi/param.c -o iscsi/param.o
    cc -c -DUSE_SIGNALFD -DUSE_TIMERFD -DUSE_EVENTFD -D_GNU_SOURCE -I. -g -O2 -fno-strict-aliasing -Wall -Wstrict-prototypes -Werror -fPIC -DTGT_VERSION=\"1.0.76\" -DBSDIR=\"/usr/lib/tgt/backing-store\" iscsi/session.c -o iscsi/session.o
    cc -c -DUSE_SIGNALFD -DUSE_TIMERFD -DUSE_EVENTFD -D_GNU_SOURCE -I. -g -O2 -fno-strict-aliasing -Wall -Wstrict-prototypes -Werror -fPIC -DTGT_VERSION=\"1.0.76\" -DBSDIR=\"/usr/lib/tgt/backing-store\" iscsi/iscsid.c -o iscsi/iscsid.o
    cc -c -DUSE_SIGNALFD -DUSE_TIMERFD -DUSE_EVENTFD -D_GNU_SOURCE -I. -g -O2 -fno-strict-aliasing -Wall -Wstrict-prototypes -Werror -fPIC -DTGT_VERSION=\"1.0.76\" -DBSDIR=\"/usr/lib/tgt/backing-store\" iscsi/target.c -o iscsi/target.o
    ...
    

    上面编译过程没有报错的话,继续制作rpm安装包,因为使用rpm包来安装,后期管理相关包时会方便很多:

    [root@ceph01 tgt-1.0.76]# make rpm
    Building version: 1.0.76-1
    Creating rpm build dirs under /root/tgt-1.0.76/pkg
    Creating tgz scsi-target-utils-1.0.76-1.tgz
    Creating rpm
    Wrote: /root/tgt-1.0.76/pkg/SRPMS/scsi-target-utils-1.0.76-1.src.rpm
    Wrote: /root/tgt-1.0.76/pkg/RPMS/x86_64/scsi-target-utils-1.0.76-1.x86_64.rpm
    Wrote: /root/tgt-1.0.76/pkg/RPMS/x86_64/scsi-target-utils-debuginfo-1.0.76-1.x86_64.rpm
    Done.
    

    3、安装配置tgtd

    安装下上面编译出来的rpm包:

    [root@ceph01 tgt-1.0.76]# rpm -ivh /root/tgt-1.0.76/pkg/RPMS/x86_64/scsi-target-utils-1.0.76-1.x86_64.rpm
    Preparing...                          ################################# [100%]
    Updating / installing...
       1:scsi-target-utils-1.0.76-1       ################################# [100%]
    

    启动tgtd服务:

    [root@ceph01 ~]# systemctl restart tgtd
    

    检查是否支持rbd:

    [root@ceph01 ~]# tgtadm --lld iscsi --mode system --op show | grep rbd
        rbd (bsoflags sync:direct)
    

    如果没有rbd相关信息输出,表示不支持rbd,请检查相关编译过程是否都正确。

    准备一个rbd:

    [root@ceph01 ~]# rbd create img02 --size 10G
    

    配置target:

    [root@ceph01 ~]# cat /etc/tgt/conf.d/librbd.conf 
    <target iqn.2019-04.com.example:cephrbd.img02>
        bs-type rbd
        backing-store rbd/img02
        initiator-address 192.168.0.0/16
    </target>
    

    重启tgtd服务:

    systemctl restart tgtd
    

    查看target是否正确启用:

    [root@ceph01 conf.d]# tgtadm --lld iscsi --mode target --op show
    Target 1: iqn.2019-04.com.example:cephrbd.img02
        System information:
            Driver: iscsi
            State: ready
        I_T nexus information:
        LUN information:
            LUN: 0
                Type: controller
                SCSI ID: IET     00010000
                SCSI SN: beaf10
                Size: 0 MB, Block size: 1
                Online: Yes
                Removable media: No
                Prevent removal: No
                Readonly: No
                SWP: No
                Thin-provisioning: No
                Backing store type: null
                Backing store path: None
                Backing store flags: 
            LUN: 1
                Type: disk
                SCSI ID: IET     00010001
                SCSI SN: beaf11
                Size: 10737 MB, Block size: 512
                Online: Yes
                Removable media: No
                Prevent removal: No
                Readonly: No
                SWP: No
                Thin-provisioning: No
                Backing store type: rbd
                Backing store path: rbd/img02
                Backing store flags: 
        Account information:
        ACL information:
            192.168.0.0/16
    

    好了,看到一切都正常,然后就可以到客户端去发现、登陆和使用这个rbd设备了。

    4、使用

    来到另外一个节点client01,把我们刚刚配置的img02这个rbd设备挂载到我们的client01节点本地来使用。

    4.1、安装iscsi客户端软件

    安装并启动iscsi-initiator-utils服务:

    [root@client01 ~]# yum install iscsi-initiator-utils -y
    [root@client01 ~]# systemctl start iscsid
    

    4.2、发现目标设备

    有个小口诀就是先发现再登陆,最后再使用:

    [root@client01 ~]# iscsiadm -m discovery -t st -p 192.168.10.20
    192.168.10.20:3260,1 iqn.2019-04.com.example:cephrbd.img02
    

    上面-m discovery参数是扫描iscsi服务端可用的存储设备,-t st参数是执行扫描操作的类型,-p 192.168.10.20参数为iscsi服务端的ip地址。

    可以看到上面已经发现了iqn.2019-04.com.example:cephrbd.img02这个设备,我们下面就开始登陆:

    [root@client01 ~]# iscsiadm -m node -T iqn.2019-04.com.example:cephrbd.img02 -p 192.168.10.20 --login
    Logging in to [iface: default, target: iqn.2019-04.com.example:cephrbd.img02, portal: 192.168.10.20,3260] (multiple)
    Login to [iface: default, target: iqn.2019-04.com.example:cephrbd.img02, portal: 192.168.10.20,3260] successful.
    

    登陆成功之后,就可以在本地看到这个设备了,也就是下面的sdd这个设备:

    [root@client01 ~]# lsblk
    NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda               8:0    0   20G  0 disk 
    ├─sda1            8:1    0  500M  0 part /boot
    └─sda2            8:2    0 19.5G  0 part 
      ├─centos-root 253:0    0 17.5G  0 lvm  /
      └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
    sdb               8:16   0   20G  0 disk 
    sdc               8:32   0   20G  0 disk 
    sdd               8:48   0   10G  0 disk 
    sr0              11:0    1    4G  0 rom
    

    好了,现在就可以像使用本地设备一样使用这个sdd设备了。

    相关文章

      网友评论

          本文标题:iscsi(tgt)+librbd使用

          本文链接:https://www.haomeiwen.com/subject/qtxytctx.html