TCMU实现ISCSI接口

iscsi服务器端:
1.配置环境
从github下载开源框架tcmu-runner:
https://github.com/open-iscsi/tcmu-runner
http://docs.ceph.com/docs/master/rbd/iscsi-target-cli-manual-install/

(注:只支持较新版本的linux内核)内核版本不够可以升级内核:
https://blog.csdn.net/liny000/article/details/80105152

2.测试file_example程序:

//需要一直运行tcmu-runner,再新建一个Terminal执行targetcli
# ./tcmu-runner
# targetcli

TCMU实现ISCSI接口_第1张图片

  /> cd backstores
  /> cd user:file
  /> create testfile 1G file01

这里写图片描述

  /> cd iscsi
  //创建LIO iscsi-target
  /> create 

 //cd 刚刚创建好的target  iqn.xxxxxxxxx
 />cd iqn.xxxx
 />cd tpg1
 //开放target端口
 /> cd portals
 //如果 创建target时默认创建了一个0.0.0.0:3260 
 /> delete 0.0.0.0 3026
 //target ip xx.xx.xx.xx
 />create  xx.xx.xx.xx 3260

TCMU实现ISCSI接口_第2张图片

TCMU实现ISCSI接口_第3张图片

/> cd ../luns
/> create  /backstores/user:file/testfile

这里写图片描述

//创建访问控制 在服务器端iqn.xxx后面加了个client后缀(名字可以自己随意创建)
/> cd ../acls
/> create iqn.xxxxxx:client

TCMU实现ISCSI接口_第4张图片


iscsi客户端:

//查找iscsi安装源
# yum list |grep iscsi
# yum install iscsi-initiator-utils
//配置客户端iscsi名称 填入创建访问控制名称iqn.xxx:client
# vim /etc/iscsi/initiatorname.iscsi

TCMU实现ISCSI接口_第5张图片

//查找target
# iscsiadm -m discovery -t sendtargets -p 192.168.0.151

这里写图片描述

// 登录target iqn.xxx
# iscsiadm --mode node --targetname iqn.xxxxx  --portal 192.168.0.151 --login

TCMU实现ISCSI接口_第6张图片

//登录不成功时,进行service重启;成功时忽略
# sudo service iscsi stop 
# sudo service iscsid stop
# sudo service iscsid start
# sudo service iscsi start
//安装lsscsi查看scsi设备信息
# yum install lsscsi

# lsscsi

这里写图片描述

//可以看到登录成功,/dev/sdb即分配的块存储
//格式化块设备
# sudo mkfs.ext4 /dev/sdb
//挂载块设备
#sudo mount /dev/sdb /xxx/xxx

TCMU实现ISCSI接口_第7张图片

实现iscsi接口 将集群存储分配块存储供iscsi客户端使用

参照tcmu-runner/file_example.c 将相应接口实现,在对应接口函数调用集群操作函数;

将接口实现文件最后编译成一个动态库(libxxx.so)
(需要链接开源框架编译生成libtcmu以及包含头文件 “libtcmu.h” “tcmu-runner.h”)
参照file_example.c 在tcmu-runner目录下 增加file_xxx.c

修改tcmu-runner目录下 CMakeLists.txt 增加样例如下
TCMU实现ISCSI接口_第8张图片

重新
cmake
make
…….
将编译输出自己新加的handler(比如handler_redfs.so)拷贝到/usr/local/lib64/tcmu-runner

./tcmu-runner
targetcli
可以看到backstores增加了一个user:xxx
此时我们可以像操作user:file 那样来操作分配集群存储。

你可能感兴趣的:(Linux,文件系统)