SMI-S简介

前言
存储管理接口标准SMI-S(Storage Management Initiative specification,简称SMI-S),用来监控和管理来自不同厂商的存储设备,其技术基础是由DMTF(Distributed Management Task Force,分布式任务管理组织)制定的CIM(Common Information Model,通用信息模块)和WBEM(Web-Based Enterprise Management,基于Web的企业管理技术)。SMI-S的目标是,在存储网络中的存储设备和管理软件之间提供标准化的通信方式,从而使存储管理实现厂商无关性(vendor-neutral),使得存储管理系统能够实现鉴别、分类、监控和控制物理及逻辑资源的能力,提高管理效率、降低管理成本,促进存储网络的发展。
正文
在信息时代,网络存储的出现和发展很好地解决了充分利用存储资源的问题。通过网络存储,可以把分散的网络存储设备和各种存储应用队列之间建立起共享连接,在访问模块的调度下提高存储资源的利用率。然而,存储网络在忙于提高资源利用率的同时,设备之间互操作性的缺乏限制了它们的相互连通,更严重的是增加了对它们管理的难度。当前,存储网络往往包含了来自多个厂商的设备,几乎每个设备都需要自己的管理软件,并且这些软件在功能、通用性、安全性和可靠性等方面都难以满足业务的发展需要。设备之间因缺少标准的制约而使网络的管理成本非常高昂,这已成为存储网络发展过程中的一大瓶颈。
    2002年,由美国存储网络工业协会(SNIA)提出的存储管理建议规范(Storage Management Initiative Specification)以下简称SMI-S)将有望改变存储管理领域的混乱现状。SMI-S主旨是把存储网络的管理对象,以及用来管理对象的工具统一起来,最终让所有的存储网络部件都可以利用本地的SMI-S接口加以部署。如此可以使所有的部件都采用一种通用的接口,管理功能的实现就更方便,成本也更低,系统更稳定。此外,稳定的管理接口有助于文件系统和数据库管理程序等应用系统直接管理网络存储资源。
    SMI-S是一种中间件性质的规范,定义了存储管理软件和受管对象之间的交互机制。它提供了多种特性以简化存储区域网(Storage Area Network简称为SAN)的管理。首先,在SMI-S中定义了统一的数据模型,使用基于Web的企业管理(Web-Based Enterprise Management,WBEM)技术和公共信息模型规范(Common Information Model, CIM) SMI-S的代理可以与交换机、存储阵列等各种支持CIM的设备进行交互,获取其管理相关的数据并返回给请求方。使用SMI-S可以免除设计管理数据传输机制的麻烦,对各种设备和组件直接进行带内或带外的管理,甚至两者并用。SMI-S甚至提供了基于HTTP的CMI-XML传输机制,以增强适用性。
SMI-S的组成和特点
    SMI-S鼓励通路使用HTTP上的CIM XML协议栈和TCP/IP栈的低层,不需要重新设计传输通路。
    客户端是管理数据的请求者,对存储资源进行监测、配置和控制等操作,包括获得数据路径、映射、逻辑单元数和存储池等逻辑元素的能力,以及LUN 屏蔽、生成卷或为交换式光纤信道分区等功能
SMI-S服务器负责收集设备中CIM格式的管理数据并提交给数据请求程序。SMI-S服务器与现有存储设备的连接通过两种方式实现:
l         采用代理经由设备的标准或专用接口连接;
l         将SMI-S服务器功能集成到设备中。
    通用SMI-S服务器中的CIMOM(CIM 0bjectManager/CIM对象管理器)是CIM类实例的一个数据库,它可以收集多个设备中的管理数据,简化大规模存储网络的管理。专用SMI-S服务器能够独立提供系统中的设备管理支持。
    锁定管理器对来自不同厂商的管理软件或者多个客户端进行资源锁定,满足它们共享资源的需求。目录服务器登记了管理系统中所有的代理和对象管理器,为客户端提供服务定位功能组成SMI-S应用环境的模块和协议都是平台无关性的,这意味着开发的管理软件可以运行于任何平台,并且运行于不同平台上的管理软件可以实现互操作。
SMI-S的核心技术—CIM/WBEM
SMI-S是在CIM/WBEM基础上实现存储网络管理。CIM/WBEM实际上是对资源管理的一种通用模型,WBEM是基于管理技术的工具集,它使用CIM作为数据格式,使用XML作为数据编码和传输,使用HTTP作为接口。
WBEM的组成
    作为SMI-S标准的技术基础,WBEM/CIM规范包括三个组成和一个倡议:
         通用信息模型(CIM):按照面向对象的方式把管理信息抽象为对象,定义对象及其在对象管理器中的命名和组织方式。CIM使用一种接口定义语MOF(Managed Object Format/受管对象格式)来准确描述模型中的类和关联,MOF有它独有的语法,但使用来自于DMTF中的DTD(文档类型定义)可将它转化为XML。
         CIM的XML表示:XMLCIM编码规范定义了XML元素、DTD中的写法,用于表达CIM的类和实例。
         CIM 操作的HTTP传输规范:基于HTTP的CIM操作规范定义了CIM操作到HTTP的映射关系,允许CIM实施的互操作在开放的、标准的方式下进行,它定义了在对象上可执行的操作(删除、创建、修改对象等),以及在HTTP协议上传输这些操作时的XML编码方式和响应状态。
         WBEM 倡议:WBEM是存储管理软件的分布式框架,包括一组基于标准的管理工具,它使用CIM作为数据格式,使用XML作为数据编码和传输方式,使用CIM操作的HTTP传输规范作为接口协议。
CIM的几个要素
CIM规范(XMLCIM编码规范)CIM规范是描述管理数据的一种语言和方法,用于形式上的描述。使用CIM建模的管理信息提供了一种文本表示方法,然而仅有这种表示方法并不能完成异构环境下的管理信息的转换。这种转换还必须将文本表示映射为一种通信协议,而这部分任务在 整个系统框架中用HTTP作为管理协议的目标被建立起来,这就导致了从CIM到XML的映射规范的产生。
CIM编码规范定义了用文档类型定义(DTD) 书写的XML元素,它们可以在CIM类和实例中表现出来。基于HTTP的CIM操作规范中定义了一个HTTP和CIM间的映射,它允许CIM实现在一个开放的、规范化的方式和完整的支持WBEM的技术环境中相互操作。
CIM的标准模型(CIM Schema)DMTF定义了标准的信息模型称为CIM Schema。Schema是现实中存在事物的抽象,是一些类的集合在CIM中,Schema被用于管理和命名CIM类,一个类必须至少属于一个Schema。一个Schema中类不得重名. CIM Schema分三个层次:
         核心模型(Core Model)包含的类定义对于所有管理领域都是共同的,它应用于所有的管理域。
         公共模型(Common Model)包含的类定义对于特定的管理领域来说是公共的。它们描述了特定类概念的管理领域、系统、网络、数据库、应用程序和设备的共同信息。公共模型也是用类的形式给出,这些类都是从核心模型的类中派生出来的,能够满足对于这些领域进行管理的要求.
        第三层扩展模型(Extension Model),扩展模型实际上给出的是一些可供扩展的基类,各个公司可以在此基础上来扩展这些模型。
SMI-S(Storage Management Initiative Specification)是一种用于存储设备管理的标准协议。Java对接SMI-S可以使用SNIA提供的Java SMI-S Provider库。 以下是一个简单的示例代码,展示如何使用Java SMI-S Provider库对接SMI-S: ```java import javax.cim.CIMException; import javax.cim.CIMObjectPath; import javax.cim.CIMInstance; import javax.cim.CIMClient; import javax.cim.CIMProperty; import javax.cim.UnsignedInteger32; public class SMISSample { public static void main(String[] args) throws CIMException { String host = "192.168.1.1"; // SMI-S主机IP地址 int port = 5988; // SMI-S主机端口号 String username = "admin"; // SMI-S主机登录用户名 String password = "password"; // SMI-S主机登录密码 // 创建CIM客户端 CIMClient client = new CIMClient(host, port, username, password); // 定义CIM对象路径 CIMObjectPath path = new CIMObjectPath("CIM_StorageVolume.Name=\"myVolume\""); // 获取CIM实例 CIMInstance instance = client.getInstance(path); // 获取CIM实例的属性值 String name = instance.getProperty("Name").getValue().toString(); UnsignedInteger32 size = (UnsignedInteger32) instance.getProperty("Size").getValue(); // 输出属性值 System.out.println("Name: " + name); System.out.println("Size: " + size); // 修改CIM实例的属性值 instance.setProperty(new CIMProperty<>("Name", "newName")); instance.setProperty(new CIMProperty<>("Size", new UnsignedInteger32(1024))); // 更新CIM实例 client.setInstance(path, instance); // 关闭CIM客户端 client.close(); } } ``` 上述示例代码中,我们首先创建了一个CIM客户端,然后定义了一个CIM对象路径,通过客户端获取了该路径对应的CIM实例,并获取了实例的属性值。接着,我们修改了实例的属性值,并将修改后的实例更新到SMI-S服务器上。最后,我们关闭了CIM客户端。 需要注意的是,示例代码中的CIM对象路径和属性值是根据实际情况进行设置的,具体应根据实际业务需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值