我们知道在存储区域网络(SAN:storage area network),主机(Host)能够访问后端存储(比如CLARiiON,VNX)必备的一个前提是主机必须配备HBA卡(Host Bus Adapter)。在没有虚拟化之前,每台物理主机自己配备HBA卡是无可厚非的事情。但是,在虚拟化流行的今天,怎么在不添加新的HBA卡的前提下把后端存储分配给运行在物理主机上的虚拟机呢?

  目前一般的做法是物理主机配备了HBA卡后,具备了访问后端存储的能力。后端存储把LUN分配给物理主机(在物理主机上表现为一块新的硬盘),物理主机再把空间分配给运行在上面的虚拟机。从后端存储的角度来看,它只知道哪些LUN分配给了物理主机(比如ESX Server或者Hyper-V Server),它并不知道哪些LUN是分配给了虚拟机。所以,从存储管理的角度来看,其管理粒度就只能到物理主机,无法到虚拟主机了。

  我们需要解决的问题是,如何把后端存储的LUN通过FC的方式直接分配给虚拟机,使得后端存储知道哪些LUN是给哪个虚拟机。本文介绍的NPIV就是其中的一个解决方案。

  注:本文只讨论如何把LUN通过FC分配给虚拟机。目前,通过iSCSI是可以把LUN直接分配给虚拟机了,只是iSCSI的性能不如FC。

  如何解决

  解决这个问题,我们得先了解FC是如何工作的。在数据中心里,主机通常是通过FC交换机与后端存储连接,这样后端存储就能同时为很多主机服务了。

  组建FC网络有两种方式:

  1. FC-AL,类似于以太网里面的令牌环网络,总线是被连接在网络中的设备共享的。

  2. Fabric,类似于以太网里面的全交换网络。

  这里我们只讨论Fabric结构的网络。

  如何理解Fabric网络

  可以把Fabric网络认为是一个有很多FC交换机互联在一起的网络,每个交换机上除了用来与其它交换机级联的口之外,其它口都是用来连接主机或者后端存储设备(这里做了简化,有些口是做别的用途的)。在这个网络中,任意交换机的任意两个端口都能直接通信,因此如果某个设备想与网络中另外一个设备通信,只要知道目标设备位于哪个交换机的哪个端口。

  当然,实际的情况是,每个连接在Fabric网络中的设备都将获得一个有FC交换机分配给该设备的Fabric ID,用来表示该设备在Fabric网络的位置。Fabric ID长度为24位,可以分成3段,长度分别为8位,分别是DomainID,Area ID和PortID。

  1. Domain ID 是用来区分Fabric网络中的交换机。因此,一个交换机上所有的端口的DomainID都是一样的。

  2. Area ID是用来区分同一交换机上的不同端口组。每个FC接口都会由一块芯片来管理,处于同一块芯片管理的端口唯一同一Area,因此具有同样的AreaID。

  3. Port ID 就是端口的ID。

  如何获得FabricID

  连接在Fabric网络中的设备是通过FabricID来寻址目标设备的。那么连接在Fabric网络的设备是如何获得一个FabricID呢?

  在主机与交换机的连接中,主机方的口叫做N口(Node),位于主机的HBA卡上,一个HBA卡可以有1个或者多个端口。交换机上的口叫做F口(Fabric)。

  FC协议是通过WWN(WorldWide Name)来唯一标示设备和端口的。具体到HBA卡上,HBA卡上有两种WWN,分别是:WWNN(WorldWide Node Name)和WWPN(WorldWide Port Name)。通常来讲一个HBA卡只有一个WWNN,HBA卡上每个端口都有WWPN来唯一标示该端口。

  当某个端口接入到Fabric网络中,该端口会发起一个登录到Fabric网络中的动作,其中包含该端口的WWPN,FC交换机会返回一个FabricID 给该端口,这个动作叫做FLOGIN。一旦该设备获得了FabricID后,它就相当于在Fabric网络中有了个座位,以后别的设备要发送消息给该设备,只要告诉FC交换机其FabricID就行了。

  NPIV 终于出场了

  做了那么多铺垫,现在来回顾一下我们要解决的问题,“如何把后端存储上的LUN分配给虚拟机”。根据上面关于Fabric的介绍,一个设备要想连接到Fabric网络中,首先要通过FLOGIN(其中包含自己的WWPN)注册到Fabric网络中,然后FC交换机将一个可用的FabricID分配给该设备。

  为了实现把LUN分配给虚拟机,虚拟机必须要有自己的FabricID,因此必须要实现下面两点:

  1. 虚拟机上得有个”虚拟HBA卡”,提供WWNN和WWPN,这样才能登录到Fabric网络。

  2. FC交换机得为通过同一个HBA卡连接到的Fabric网络的这些虚拟HBA卡提供不同的Fabric ID。

  NPIV的全称是N-PortID Virtualization, N-Port ID也就是N端口登录到Fabric网络后获得的FabricID。NPIV一种在主机端的技术,使得主机端的物理HBA卡上N端口可以虚拟出多个WWPN,这样主机上物理的HBA卡能在把自己的WWPN注册到Fabric网络中以后,再把虚拟的WWPN也注册到网络中(注册的动作是FDISC,功能与FLOGI一样,只是名字不一样。),从而一个N端口上获得多个N-PortID,所以这个技术叫做NPIV。它解决了上述两点中的第一点。

  上述第二点说明NPIV需要交换机的支持。

  Windows Server 2012中的NPIV配置

  在即将发布的Windows8 Server的Hyper-V中已经提供了对NPIV的支持。用户可以在通过Hyper-V创建为虚拟机创建虚拟HBA卡,并为其分配WWNN和WWPN。具体步骤为:

  1. 创建Virtual SAN

  假设运行Windows8的物理机器有两块HBA卡,分别连接在两个不同的SAN,比如HBA1连接到用于生产的ProductionSAN,HBA2连接到用于测试的TestSAN。运行在Windows8 Hyper-V上的虚拟机访问SAN的范围不能超过物理HBA卡访问SAN的范围。

  创建VirtualSAN是对物理HBA的SAN的访问范围的细分,从而让某些虚拟机只能访问ProductionSAN,某些虚拟机只能访问TestSAN。

  如下图,我们定义了一个NPIVtest SAN (2E),其中指定了WWPN以2E结尾的物理HBA卡,这样连接到这个虚拟SAN的虚拟机就只能访问到VirtualSAN里面指定的HBA卡能访问到的那些SAN。

  2. 为虚拟机创建Virtual FC Adapter,一个虚拟机可以最多创建4个虚拟的VirtualFC Adapter,每个Adapter可以与一个VirtualSAN相连接。

  3. 在Virtual FC Adapter上创建虚拟的WWPN。目前Hyper-V中所有默认的Virtual FC Adapter的WWNN都是一样的,当然也可以修改,这也说明WWNN不是那么重要。

  上述配置都是在虚拟机处于关机的状态下配置,配置好后开机,把对应的WWPN与后端存储放到一个Zone里面,然后就可以像物理机器一样,为之分配LUN了。

  注意:NPIV需要操作系统,HBA卡,光纤交换机都提供对NPIV的支持,环境配置相对复杂。这里只是展示了在NPIV环境搭建好的基础上,如何为虚拟机创建虚拟的HBA卡和分配WWPN。

  小结

  本文简要介绍了一下FCFabric网络的一些基础知识,然后分析了实现把LUN分配给虚拟机所需要的条件,简要介绍了NPIV,并以即将发布的Windows8 Server为例子,展示了如何配置为虚拟机配置NPIV。

  from: http://storage.chinabyte.com/94/12448094.shtml

NPIV介绍的更多相关文章

  1. IAAS-libvirt介绍。

    Libvirt介绍 Libvirt与hypervisor无关,其提供与多种操作系统虚拟化能力进行交互的API与工具库. Libvirt提供了一个通用稳定的抽象层,可以安全的操作物理机上的虚拟机,同时为 ...

  2. 【转】NPIV - 连接虚拟机与存储的桥梁

    转自:http://blog.csdn.net/jewes/article/details/7705895 解决什么问题 我们知道在存储区域网络(SAN:storage area network),主 ...

  3. CSS3 background-image背景图片相关介绍

    这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...

  4. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  5. Windows Server 2012 NIC Teaming介绍及注意事项

    Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...

  6. Linux下服务器端开发流程及相关工具介绍(C++)

    去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...

  7. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  8. HTML DOM 介绍

    本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...

  9. HTML 事件(一) 事件的介绍

    本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...

随机推荐

  1. apt-get用法

    转自apt-get语法- - 对于debian来说,安装软件大多都是通过apt-get来实现的. 1.apt-get update 更新软件包信息库.在Debian中,软件包是通过一个数据库来管理的, ...

  2. PHP strip_tags() 函数

    定义和用法 strip_tags() 函数剥去 HTML.XML 以及 PHP 的标签. 语法 strip_tags(string,allow) 参数 描述 string 必需.规定要检查的字符串. ...

  3. JS 中Promise 模式

    异步模式在web编程中变得越来越重要,对于web主流语言Javscript来说,这种模式实现起来不是很利索,为此,许多Javascript库(比如 jQuery和Dojo)添加了一种称为promise ...

  4. char*,const char*和string的相互转换

    好久没写东西啦,发表学术文章一篇,hiahia~ 近日和小佳子编程时遇到很多转换问题,很麻烦,在网上查了很多资料. 为了以后查找方便,特此总结如下. 如果有不对的地方或者有更简单的方法,请指出~~ 1 ...

  5. sdut2536字母哥站队(dp)

    简单DP  说是简单 还是推了好一会 推出来觉得好简单 保留当前i的最小值 dp[i] = min(dp[i],dp[j]+i-j-1) j<i #include <iostream> ...

  6. oracle删除列

    ALTER TABLE 表名 DROP COLUMN 列名;

  7. Java 数组在内存中的结构

    Java中的数组存储两类事物: 原始值(int,char,...),或者引用(对象指针). 当一个对象通过 new 创建,那么将在堆内存中分配一段空间,并且返回其引用(指针). 对于数组,也是同样的方 ...

  8. Linux Kernel KVM 'apic_get_tmcct()'函数拒绝服务漏洞

    漏洞版本: Linux Kernel 漏洞描述: Bugtraq ID:64270 CVE ID:CVE-2013-6367 Linux Kernel是一款开源的操作系统. Linux KVM LAP ...

  9. epub显示特殊字体

    You need to open the ePub in an archive program (they are just ZIP files) and add an XML file to the ...

  10. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.2.1

    For fixed basis of in $\scrH$ and $\scrK$, the matrix $A^*$ is the conjugate transpose of the matrix ...