初始ceph-iscsi-cli


      Ceph-iSCSI-Cli会安装一个类似于targetcli的接口,它允许基于一个接口管理多个Ceph/iSCSI网关。Cli基于rbd-target-gw公开的API接口实现,每个节点上都会运行rbd-target-gw守护进程,并且支持Cli接口。

        下面是gwcli工具提供的shell接口的示例:

/> ls
o- / .................................................................................. [...]
  o- clusters ................................................................. [Clusters: 1]
  | o- ceph ..................................................................... [HEALTH_OK]
  |   o- pools ................................................................... [Pools: 3]
  |   | o- ec ........................................ [(2+1), Commit: 0b/40G (0%), Used: 0b]
  |   | o- iscsi ..................................... [(x3), Commit: 0b/20G (0%), Used: 18b]
  |   | o- rbd ....................................... [(x3), Commit: 8G/20G (40%), Used: 5K]
  |   o- topology ......................................................... [OSDs: 3,MONs: 3]
  o- disks ................................................................... [8G, Disks: 5]
  | o- rbd.disk_1 ............................................................. [disk_1 (1G)]
  | o- rbd.disk_2 ............................................................. [disk_2 (2G)]
  | o- rbd.disk_3 ............................................................. [disk_3 (2G)]
  | o- rbd.disk_4 ............................................................. [disk_4 (1G)]
  | o- rbd.disk_5 ............................................................. [disk_5 (2G)]
  o- iscsi-target .............................................................. [Targets: 1]
    o- iqn.2003-01.com.redhat.iscsi-gw:ceph-gw ................................ [Gateways: 2]
      o- gateways ..................................................... [Up: 2/2, Portals: 2]
      | o- rh7-gw1 .................................................... [192.168.122.69 (UP)]
      | o- rh7-gw2 ................................................... [192.168.122.104 (UP)]
      o- hosts ................................................................... [Hosts: 2]
        o- iqn.1994-05.com.redhat:myhost1 ........................ [Auth: None, Disks: 1(1G)]
        | o- lun 0 ......................................... [rbd.disk_1(1G), Owner: rh7-gw2]
        o- iqn.1994-05.com.redhat:rh7-client .......... [LOGGED-IN, Auth: CHAP, Disks: 1(2G)]
          o- lun 0 ......................................... [rbd.disk_5(2G), Owner: rh7-gw2]

         rbd-target-api守护进程利用Flask来提供REST API。rbd-target-api通常不会使用在生产环境中,但是考虑到这个特定的用例,它提供了一种提供管理界面的简单方法--至少在第一个版本中是这样的!

         Rest API已经在Firefox 的RESTClient插件中使用https进行了测试(基于一个通用的自签名证书):在每个网关上设置证书,添加基本的auth凭据,以匹配RESTClient中的本地API配置。按如下方式使用该客户端:

Add aHeader content type for application/x-www-form-urlencoded
METHOD:PUT        URL: https://192.168.122.69:5001/api/gateway/rh7-gw1
selectthe urlencoded content type and the basic auth credentials
add therequired variables to the body section in the client ui
  eg. ip_address=192.168.122.69
Click'SEND'

Curl示例:

      如果只是后端开发工作(不负责UI开发),可以使用CURL:创建一个网关节点

curl--insecure --user admin:admin -d "ip_address=192.168.122.104" \
     -X PUT https://192.168.122.69:5001/api/gateway/rh7-gw2

 

1  目录组织

ceph-iscsi-cli的文件组织结构如下:

 初始ceph-iscsi-cli_第1张图片

2  工具与接口解析

2.1   工具gwcli

Ceph-iSCSI网关的命令行管理程序gwcli,其结构如下:

初始ceph-iscsi-cli_第2张图片 

逻辑流程如下:

初始ceph-iscsi-cli_第3张图片

2.2   API接口(rbd-target-api.py)

Ceph-iSCSI网关的RestFUL API。列表如下:

对象

类型

说明

api_info

GET

获取支持的API信息

sys_info

GET

获取指定类型的系统信息:ipv4_addresses, checkconf, checkversions

target

PUT

配置中添加target,同步各网关节点

config

GET

获取配置信息

gateways

GET

获取网络列表

gateway

PUT

新增网关节点

_gateway

GET/PUT/DELETE

本地网关管理

disks

GET

获取定义给网关的RBD列表

disk

GET/PUT/DELETE

RBD管理(each gateway)

_disk

GET/PUT/DELETE

RBD管理(local gateway),内部使用

clients

GET

获取客户端iqn列表

clientauth

PUT

新增客户端CHAP(each gateway)

_clientauth

PUT

新增客户端授权(local gateway),内部使用

clientlun

PUT/DELETE

Iscsi lun管理

_clientlun

GET/PUT

在本地网关lun的列表和新增

client

PUT/DELETE

客户端IQN的新增和删除(each gateway)

_client

GET/PUT/DELETE

客户端IQN的管理(local gateway) ,内部使用

hostgroups

GET

获取配置中定义的主机组

hostgroup

GET/PUT/DELETE

主机组的管理(each gateway)

_hostgroup

GET/PUT/DELETE

主机组的管理(local gateway) ,内部使用

iscsi_active

GET

判断iscsi网关是否active

 

3  Gwcli库分析

3.1   utils.py

utils.py定义了一些通用函数,支持其他类的实现,其结构如下:

 初始ceph-iscsi-cli_第4张图片

3.2   node.py

node.py定义了一些UI显示函数,支持其他类的实现,其结构如下:

初始ceph-iscsi-cli_第5张图片

3.3   ceph.py

实现与ceph集群的对接,其结构如下:

初始ceph-iscsi-cli_第6张图片

3.4   hostgroup.py

实现主机组管理,其结构如下:

初始ceph-iscsi-cli_第7张图片 

HostGroups

提供了一种更方便的方法来管理需要访问同一组LUN的多个主机。主机组“策略”定义了应该关联在一起的客户机和LUN(rbd映像)。

有两个命令用于管理主机组

create 
delete 

由于相同的磁盘将被多个系统看到,所以应该只对集群感知的主机使用此功能。如果不遵守此约束,则可能导致**数据丢失**。

一旦创建了一个组,您就可以将客户端与组的“主机”、和“磁盘”相关联。

注意,一个客户端只能属于一个主机组,但磁盘可以跨几个主机组。 

hostgroup

主机组提供了一种简单的方法,可以将许多iSCSI客户端的LUN作为一个单元来管理。主机组包含主机(iSCSI客户端)和磁盘(rbd映像)。

一旦一个主机被定义为一个组,它的LUN (masking)必须通过这个组来管理。实际上,直接管理客户端磁盘的尝试会被阻止。

以下命令使您能够管理主机组的成员资格。

host add|remove iqn.1994-05.com.redhat:rh7-client
disk add|remove rbd.disk_1

HostGroupMember

显示了在特定主机组定义中保存的主机和磁盘。在从主机组中删除磁盘时应注意,因为删除操作将在组内的每个客户端执行。


3.5   client.py

实现客户端的管理,其结构如下:

初始ceph-iscsi-cli_第8张图片

3.6   storage.py

实现rbd镜像的管理,其结构如下:

初始ceph-iscsi-cli_第9张图片

3.7   gateway.py

实现网关的管理,其结构如下:

初始ceph-iscsi-cli_第10张图片 

4  UML类图关系

初始ceph-iscsi-cli_第11张图片

5  参考文献

[01] https://github.com/ceph/ceph-iscsi-cli

[02] http://docs.ceph.com/docs/master/rbd/iscsi-target-cli/


作者:Younger Liu 
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。

你可能感兴趣的:(Ceph存储系统,深入理解CEPH系统,Ceph,ceph-iscsi,iscsi)