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
ceph-iscsi-cli的文件组织结构如下:
Ceph-iSCSI网关的命令行管理程序gwcli,其结构如下:
逻辑流程如下:
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 |
utils.py定义了一些通用函数,支持其他类的实现,其结构如下:
node.py定义了一些UI显示函数,支持其他类的实现,其结构如下:
实现与ceph集群的对接,其结构如下:
实现主机组管理,其结构如下:
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
显示了在特定主机组定义中保存的主机和磁盘。在从主机组中删除磁盘时应注意,因为删除操作将在组内的每个客户端执行。
实现客户端的管理,其结构如下:
实现rbd镜像的管理,其结构如下:
实现网关的管理,其结构如下:
[01] https://github.com/ceph/ceph-iscsi-cli
[02] http://docs.ceph.com/docs/master/rbd/iscsi-target-cli/