在IBM PureApplication System模式工作负载中使用块存储

IBM®PureApplication®System 2.0引入了块存储,该存储使存储与工作负载的生命周期脱钩,并且可以由多个虚拟机共享。 块存储附加组件可让您在模式工作负载中利用块存储,但是您需要使用REST API来利用共享块存储。 本教程描述了块存储功能,并具体显示了如何在模式工作负载中使用它们。

块和共享块存储量

块存储卷是没有格式化或分区的原始存储卷。 在PureApplication SystemIntel®机架上,块存储使用VMWare®物理模式原始设备映射(pRDM)绕过虚拟机文件系统(VMFS),并将存储逻辑单元号(LUN)直接映射到虚拟机(VM)。 在pRDM中,来自VM的所有SCSI命令都直接传递到LUN,并且存储大小可能超过2 TB。 在PureApplication System Power机架上,将块存储卷视为RAW存储。 在PureApplication System Intel机架和Power机架上,块存储量可高达8TB。

您可以使用PureApplication System存储基础结构(内部块存储)或现有的外部存储基础结构(外部块存储)来创建块存储。 您可以将块存储附加到模式工作负载,或将其与模式工作负载分离。 您还可以跨机架复制内部块存储。 在PureApplication System Intel机架上,您可以将块存储附加到多个VM,这种可共享的块存储称为共享块存储。

在PureApplication System中使用块存储和共享块存储的优势在于,存储生命周期与使用存储的模式工作负载脱钩。 您可以创建独立于工作负载的块存储或共享块存储,并在部署工作负载期间或之后将其附加到工作负载。 您还可以在工作负载运行时将其与工作负载分离。 删除工作负载时,即使存储在连接到工作负载的同时删除了工作负载,该存储也会保留。

以下是块存储的一些典型用例:

  • 当现有工作负载下降并且无法恢复时,通过激活新的工作负载来重用存储中的数据
  • 在不同的工作负载上重复使用存储中的数据
  • 同时在多个工作负载之间共享存储(共享块)中的数据

在模式工作负载中使用块存储

PureApplication System中2.0提供的块存储附加称为默认附加块磁盘 AIX®和Linux的工作负载,和缺省窗附加块磁盘为Microsoft®Windows®工作负载。 您可以使用此附加组件在部署期间将现有的块存储附加到工作负载,或在部署期间创建新的块存储并将其附加到工作负载。 除了附加或分离存储之外,附加组件还可以发现(清理)设备,并格式化存储并在输入挂载点上或从输入挂载点挂载或卸载存储。 部署后,您可以分离附加的块存储,然后重新附加其他新的或现有的块存储。 该附加组件不支持共享块存储,因此您必须使用下面讨论的块存储REST API来处理共享块存储。

图1.默认的附加块磁盘附件
默认附加块磁盘附件

图1显示了在附件目录中找到的默认附加块磁盘附件。 附加组件具有以下输入字段(将环境变量添加到工作负载后会转换为输入字段):

VOLUME_ID
现有块存储的UUID。 在块存储REST API中将其称为runtimeid。 附加现有磁盘时必需。
安装
安装点以安装块存储。 可选-如果未设置,则不会挂载存储。
FILESYSTEM_TYPE
文件系统格式(ext3,ext4,jfs2,NTFS,xfs,NONE)。 可选-如果提供了存储并且尚未格式化存储,则格式化存储。 如果提供了文件系统格式,则必须提供安装点,反之亦然。
VOLUME_NAME
新块存储的唯一名称。 附加新的块存储时需要。 如果提供,将创建一个新的块存储并将其附加到工作负载。
描述
可选-新块存储的描述。
DISK_SIZE
新块存储的磁盘大小(GB)。 附加新的块存储时需要。
VOLUME_GROUP_ID
可选-与新块存储关联的现有卷组。 在创建新的块存储时可以使用。

将现有块存储连接到工作负载时,必须使用VOLUME_ID,MOUNT和FILESYSTEM_TYPE。 创建新的块存储并将其附加到工作负载时,必须使用VOLUME_ID以外的其他字段。 如果要使用“创建新卷并附加”选项,请不要提供VOLUME_ID的值。 如果确实提供了VOLUME_ID的值,那么将忽略为“创建新卷和附加”选项提供的值。

您可以将块存储附加组件添加到虚拟系统模式(VSP)工作负载和虚拟系统模式经典(VSP经典)工作负载。 使用虚拟应用程序模式(VAP),必须使用下面讨论的块存储REST API来附加和分离块存储。 对VSP工作负载的块存储附加支持比对VSP经典版本的鲁棒性强得多。 以下各节描述了每种模式工作负载中的附加支持。

在VSP工作负载中使用块存储附加组件

可以使用模式构建器将块存储附加组件添加到VSP。 图2显示了带有块存储附加组件的VSP:

图2.带有默认附加块磁盘附件的VSP工作负载
具有默认附加块磁盘附件的VSP工作负载

将块存储附加组件添加到Pattern Builder中的VSP后,您可以输入安装点和文件系统类型的值。 其余的附加值将在部署的分发阶段输入,因为它们取决于工作负载的放置位置。 图3显示了此过程。 在部署期间,您可以创建并附加新的块存储,也可以附加现有的块存储:

图3. VSP工作负载块存储附加输入
VSP工作负载块存储附加输入

在部署期间,如果为安装点提供了值,则附加组件会格式化存储(如果尚未格式化),然后将其安装到VM中的适当安装点。 对于图3中部署的VSP,附加组件会将存储格式化为ext3格式,并将存储安装到目录/ data,如图4所示。如果安装点值为空,则将存储附加到目录。 VM节点,但不会被发现并安装到该节点上-您将必须连接到VM并自行安装它。

图4.带有已安装块存储的VSP工作负载VM
具有已安装的块存储的VSP工作负载VM

部署后,您可以在VSP实例页面中查看附加的块存储:导航到VSP实例页面,选择已部署的实例,展开VM透视图,然后展开附加了块存储的VM节点。 您可以从实例页面分离数据块存储,然后重新附加其他数据块存储。 再次在这里,您有机会创建一个新的块存储并附加它。 图5显示了图3中部署的VSP的部署后存储操作。使用部署后附加或创建并附加操作,您只能重新附加存储并将其安装到使用块存储插件在以下位置定义的安装点:模式部署时间。 您无法从已部署的实例页面创建临时安装点,也无法将存储连接并安装到该临时安装点。

图5. VSP部署后块存储操作
VSP部署后块存储操作

在VSP Classic工作负载中使用块存储附加组件

与VSP一样,可以使用VSP经典模式编辑器将块存储附件添加到VSP经典部件中。 与VSP一样,您可以在阵列编辑器中输入安装点和文件格式值。 在部署VSP Classic工作负载时,必须输入其余的值。 在部署时,您可以选择选择现有的块存储或创建新的块存储并附加它们。 VSP和VSP Classic之间的主要区别在于,在VSP Classic中,块存储没有部署后的操作。 块存储部署后,您将无法分离或重新连接它。 使用VSP经典版后,块存储的行为就像RAW存储一样。 图6显示了带有块存储附加组件的VSP Classic工作负载的创建和部署。

图6.具有默认附加块磁盘附件的VSP Classic工作负载
带有默认附加块磁盘附件的VSP Classic工作负载

在VAP工作负载中使用块存储

如前所述,要利用VAP工作负载中的块存储,必须使用块存储REST API,这将在下一部分中进行说明。 使用脚本包说明了REST API的使用。 您可以在VAP生命周期python脚本中使用相同的技术在VAP工作负载部署期间附加块存储,也可以在操作python脚本中从VAP工作负载实例控制台分离和重新附加块存储。

要点:在IBM PureApplication Software中,不能在VSP和VSP Classic中使用创建和附加选项。 IBM PureApplication Software是PureApplication System的本地版本,已于2015年2月发布。

块存储REST API

块存储REST API为以下方面提供支持:

  • 列出PureApplication System块和共享块存储
  • 附加和分离块以及共享块存储
  • 监视附加和分离操作的状态
  • 列出附加到工作负载节点的存储

如上所述,块存储REST API的典型用例是将块存储附加或分离到VAP工作负载,或将共享块存储附加或分离到VAP或VSP工作负载。 以下是使用块存储REST调用的要求和限制:

  • 执行REST API的代码必须有权访问maestro python模块。
  • 发送到服务器的REST请求必须具有适当的安全标头,可以使用maestro模块API构造该标头。 清单1显示了如何使用maestro模块API使用必要的标头构造和执行cURL调用。
  • 您只能在执行REST调用的部署中将卷连接到工作负载或从中分离卷。

有关maestro python模块的更多信息,请参见PureApplication System知识中心中的插件 开发套件插件开发指南

清单1.使用maestro模块执行REST调用
import maestro
...
#Get user token
user_token=None
try:
if maestro.operation:
	user_token=maestro.operation.get('user_token')
except:
	logger.debug('executeREST no user_token')
#Get security header
securityHeader=None
if(user_token != None):
	securityHeader = maestro.get_authn_header(user_token)
else:        
	securityHeader = maestro.get_authn_header()
#Get the pem file from SSL options
sslOpts = os.environ.get("CURL_SSL_OPTION")
garb, sslOpts = sslOpts.split()
#Output file to save the response.
outputFile = '/tmp/resp_file'
cmd = ["-X", str(method), "-H", '%s' %securityHeader,
	"-H", "Content-Type:application/json",
	"-v", "-o", outputFile, "--url", str(url), "--cacert", sslOpts]
#Execute cURL command using maestro API
rc = maestro.pcurl.main(cmd)

下表1总结了可以调用的REST资源,以列出所有PureApplication System块存储,附加PureApplication System块存储,分离PureApplication System块存储,监视附加或分离操作的状态以及检索VM工作负载节点使用的存储。 。 有关这些资源的详细说明,请参见PureApplication System知识中心中的块存储REST API

表1.块存储REST资源
资源资源 描述
在/ services / resources / sharedDisks上执行GET操作 列出PureApplication System块存储。
在/ services / resources / sharedDisks上进行PUT操作 在当前部署中向/从VM工作负载节点附加/分离数据块存储。
在/ services / resources / tasks / {taskId}上执行GET操作
/ deployments / {depUUID} / virtualMachines / {vmNodeId}
/ sharedDisks / {sharedDiskId}
监视块存储的附加/分离操作状态。
在/ services / resources / virtualMachines / {vmNodeId} /上执行GET操作
部署/ {depUUID} / sharedDisks
列出附加到VM工作负载节点的块存储。

在工作负载中使用共享块存储

本节向您展示如何组合表1中列出的REST API,以将共享块存储附加(分离)到模式工作负载。 相同的过程可用于块存储。 图7中的流程图显示了用于附加和分离块存储的REST API流:

图7.附加或分离块和共享块存储的流程图
附加或分离块和共享块存储的流程图

将存储附加到工作负载节点流

如图7所示,附加流程包括以下步骤:

  1. 获取要附加到工作负载节点的存储的名称。
  2. 检查存储是否存在(对服务/资源/ sharedDisks进行GET操作)。
  3. 将存储连接到工作负载节点(对服务/资源/ sharedDisks进行PUT操作)。
  4. 监视附加操作状态(在/ services / resources / tasks / {taskId} / deployments / {depUUID} / virtualMachines / {vmNodeId} / sharedDisks / {sharedDiskId}上进行GET操作)

附加流程以步骤3为中心-将PureApplication System块存储附加到工作负载节点。 该请求的必需输入(对服务/资源/ sharedDisks的PUT操作)是:

runtimeid
存储的唯一标识符。 可以使用服务/资源/ sharedDisks上的GET操作来检索此值,以检索所有存储,然后根据输入的存储名称过滤结果。
deploymentId
当前部署标识符。 可以使用清单2中的maestro模块API获得此信息。
vmId
当前工作负载VM节点标识符。 也可以使用清单2中的maestro模块API获得此信息。
opType
操作类型值附加。
清单2.检索当前部署ID和VM节点ID的代码
#Get current deployment identifier
deployment_id=maestro.node['deployment.id']
#Get current VM node identifier
vmId = maestro.node['id']

清单3显示了附加REST请求的示例输入:

清单3.附加REST请求的输入
{
 "deploymentId":"d-b3daf24c-5f08-45a1-aa97-5a3536ec55c3",
 "vmIds":["OS_Node_1.11426549311727"],
 "runtimeid":"0b21e087-0d4e-4494-a5c2-be07e8ddf7b8",
 "opType":"attach"
}

附加REST请求的响应JSON包含附加操作的唯一标识符(taskId)和存储的唯一标识符(sharedDiskId)。 清单4显示了附加REST请求的示例响应:

清单4.附加操作的响应
{
   "taskId": 4650,
   "sharedDiskId": 49,
   "diskId": 141,
   "vmIds":["storehouseupload2.11402609366120"],
   "deploymentId":"d-ad1459a9-82d4-4121-84f8-a2715aa2ab8f"
}

Attach操作是异步操作,因此必须定期监视其状态,以确定它是失败还是成功。 您可以使用监视器附加操作状态REST调用返回的响应来监视附加操作状态,如下所示:

GET operation on /services/resources/tasks/{taskId}/deployments/{depUUID}/virtualMachines/ 
{vmNodeId}/sharedDisks/{sharedDiskId}

可以如清单2所示获得部署标识符(depUUID)和工作负载VM节点标识符(vmNodeId)的值。taskId和sharedDiskId的值可以从对附加REST调用的响应中获得(清单4)。 监视器附加操作状态调用返回以下状态之一:ATTACHING,ATTACHED或ATTACH_FAILED。 如果状态为ATTACHED,则它还将返回存储卷的LUN标识符。 如果计划在附加操作之后立即将设备安装到工作负载节点,则可以使用此LUN标识符标识SCSI驱动器(/ dev / sd *),并将设备安装到工作负载节点上的安装点。 清单5显示了针对监视器附加操作状态的示例响应:

清单5.监视器附加操作状态请求的响应
{
	"currentstatus": "ATTACHED",
	"lunId": "60050768028503D3080000000000018B"
}

从工作负载节点流中分离存储

如图7所示,分离流程包括以下步骤:

  1. 获取要从工作负载节点分离的存储的名称。
  2. 检查存储是否已附加到工作负载(在/ services / resources / virtualMachines / {vmNodeId} / deployments / {depUUID} / sharedDisks?runtimeid = {runtimeid}上执行GET操作)。
  3. 从工作负载节点分离存储(服务/资源/共享磁盘上的PUT操作)。
  4. 监视分离操作状态(获取操作/ services / resources / tasks / {taskId} / deployments / {depUUID} / virtualMachines / {vmNodeId} / sharedDisks / {sharedDiskId})

分离流程的步骤3和4与附着流程的步骤相似。 步骤3中的区别在于,用于分离操作的opType请求值是分离而不是附加。 在步骤4中,区别在于监视器分离操作状态调用的响应值为DETACHING,DETACHED或DETACH_FAILED。 附加流和分离流之间的主要区别在于,在分离流中,您需要在分离存储之前验证存储是否已连接到工作负载节点,可以使用以下REST调用来完成该操作:

GET operation on /services/resources/ virtualMachines/{vmNodeId}/deployments/{depUUID}/ 
    sharedDisks?runtimeid={runtimeid}

如清单2所示,可以获取部署标识符(depUUID)和工作负载VM节点标识符(vmNodeId)的值。可以使用服务/资源/ sharedDisks上的GET操作来检索runtimeid的值,以检索所有存储,然后根据输入的存储名称过滤结果。 如果将存储连接到工作负载节点,则验证存储是否连接到工作负载节点的调用将返回一个响应,其中存储详细信息和currentstatus属性设置为ATTACHED。 清单6显示了此调用的示例响应:

清单6.对附加到工作负载节点请求的检索存储的响应
[
   {
      "shared": "T",
      "virtualmachineid": 488,
      "lunId": "60050768028503D30800000000000124",
      "runtimeid": "e60a2db9-f5ae-4b86-b0bc-9351d3272562",
      "type": "ext4",
      "currentstatus": "ATTACHED",
      "size": "1024",
      "id": 110,
      "mount": "/test",
      "updated": 1402080762629,
      "created": 1402080728268,
      "name": "NewDisk",
      "diskid": "30"
   }
]

处理样本

您可以在本教程的底部下载示例代码 。 它具有三个脚本包 :一个用于将PureApplication System块存储附加到节点上(BlockStorageAttach-1.0.0.0.zip),一个用于将PureApplication System块分离到一个节点上(BlockStorageDetach-1.0.0.0.zip),另一个用于列出附加到节点的存储(BlockStorageList-1.0.0.0.zip)。 每个脚本包都包含一个定义脚本包的cbscript.json文件和一个python文件(BlockStorageAttach-1.0.0.0.zip中的attach.py​​,BlockStorageDetach-1.0.0.0.zip中的detach.py​​和list.py在BlockStorageList-1.0.0.0.zip中),该驱动器驱动块存储REST API调用。 要将这些样本导入PureApplication System中,请选择Catalog => Script Packages => Create New 。 导入它们之后,可以将它们添加到“ VSP Pattern”节点中,如图8所示:

图8.带有导入的示例脚本包的VSP模式
具有导入的示例脚本包的VSP模式

使用VM节点的脚本名称旁边显示的Execute链接将脚本包配置为在手动启动时执行,因此您可以按原样保留脚本包输入的默认值并部署模式。 部署的模式VM工作负载节点将同时列出这三个脚本,如图9所示。脚本包的执行输出在remote_std_out.log中捕获。

图9.带有示例脚本包的已部署VSP模式
带有示例脚本包的已部署VSP模式

测试示例脚本包

要测试示例脚本包,请单击脚本包名称旁边的“ 执行” 。 在执行BlockStorageAttach脚本包时,应该会看到如图10所示的输入对话框。BlockStorageAttach脚本包接受以下输入:

块存储名称
附加到该节点的块存储的名称。 attach.py​​中的代码检索将在attach REST调用中使用的相应存储标识符(runtimeid)。
文件系统类型
块存储的文件系统格式类型。 如果提供了此信息,则可以在附件后使用该信息来格式化存储。
挂载点
如果提供了此信息,则可以使用该信息将存储安装到节点上的安装点。
储存类型
值可以是Block或Shared Block。 此信息用于筛选要获取的存储标识符(runtimeid)的块存储列表。
如果共享块存储已被使用,则附加
如果要附加当前已附加到另一个节点的磁盘,则为true,否则为false。 仅当存储类型为“共享块”时,才考虑该值。
图10. BlockStorageAttach脚本包的输入
BlockStorageAttach脚本包的输入

图10显示了将名为BM03的共享块存储附加到当前工作负载节点的输入,即使该共享块存储已附加到另一个工作负载节点也是如此。 提供给脚本包的输入存储在环境变量中。 驱动BlockStorageAttach脚本包的脚本attach.py​​使用清单7中所示的代码从环境变量中检索输入值:

清单7.检索python脚本中的脚本包输入
def getInput():
    input = {}
    env_data = dict(os.environ)    
    for key in ("VOLUME_NAME","FILESYSTEM_TYPE","MOUNT_POINT", "TYPE", "INUSE"):
        if key in env_data:
            input[key] = env_data[key]       
    return input

由于需要将输入的存储名称转换为标识符(runtimeid),因此脚本首先在/ services / resources / sharedDisks?type = <<存储类型>上使用GET操作检索存储。 根据输入名称进一步过滤返回的响应。 然后,脚本为清单3所示的附加操作构造JSON输入,并使用清单1所示的代码执行REST调用。脚本监视附加操作的状态,直到附加状态为ATTACHED或ATTACH_FAILED为止。 附加操作状态被记录到remote_std_out.log中,如图11所示,该图还显示了附加操作的REST调用堆栈:

图11. BlockStorageAttach脚本包执行日志
BlockStorageAttach脚本包执行日志

示例代码中未提供脚本ID,无法将存储格式化为输入字段文件系统类型指定的类型并安装到输入安装点。 但是您可以使用以下算法编写标准的Shell脚本来执行此操作:

  • 刷新系统中的设备。
  • 使用监视器附加状态操作调用(清单5)返回的LUN ID,获取附加存储的SCSI驱动器(/ dev / sd *)。
  • 检查设备是否格式化,如果没有格式化,请格式化。
  • 将设备安装到安装点。

要列出附加到节点的存储,请执行BlockStorageList脚本包。 该列表将打印在remote_std_out.log中,如图12所示:

图12. BlockStorageList脚本包执行日志
BlockStorageList脚本包执行日志

当执行BlockStorageDetach脚本包时,应该会看到如图13所示的输入对话框。BlockStorageDetach脚本包接受以下输入

块存储名称
要从该节点分离的块存储的名称。 detach.py​​脚本中的代码检索将在分离REST调用中使用的相应存储标识符(runtimeid)。
储存类型
值可以是Block或Shared Block。 此信息用于筛选要获取的存储标识符(runtimeid)的块存储列表。

图13显示了用于分离名为BM03的共享块存储的输入:

图13. BlockStorageDetach脚本包的输入
BlockStorageDetach脚本包的输入

与附加脚本类似,分离脚本从环境变量中检索输入,并将存储名称转换为runtimeid。 然后,脚本将使用附加到工作负载节点调用的列表块存储来检查是否附加了存储。 如果存储已连接,则脚本将为清单3所示的分离操作构造JSON输入,并使用清单1中所示的代码执行REST调用。脚本将监视分离操作状态,直到分离状态为DETACHED或DETACH_FAILED。 分离操作的状态登录到remote_std_out.log中,如图14所示,该图还显示了分离操作的REST调用堆栈:

图14. BlockStorageDetach脚本包执行日志
BlockStorageDetach脚本包执行日志

结论

在本教程中,您了解了PureApplication System 2.0中的块存储支持,以及如何以及何时在VSP和VSP Classic工作负载中使用块存储附加组件。 您还学习了如何使用块存储REST API在VSP工作负载中利用共享块存储以及在VAP工作负载中利用块存储和共享块存储。 使用本文提供的示例代码,您应该能够为VAP工作负载提供共享的块存储支持,并且能够重用VSP工作负载生命周期和操作脚本中的代码来为VAP中的块存储和共享块存储提供支持。工作量。


翻译自: https://www.ibm.com/developerworks/websphere/library/techarticles/1504_madapusi/1504_madapusi.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值