我们知道在存储区域网络(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. 类型<T> where T:class的用法

    public void Delete<T>(List<T> EntityList) where T : class, new() 就是说T必须是一个类(class)类型,不能是 ...

  2. linux-0.11内核 任务的堆栈切换

    http://blog.163.com/di_yang@yeah/blog/static/86118492201212534924900/ 一直缠绕的两个问题:怎样标识的内核栈与用户栈?如何在内核态堆 ...

  3. Java异常处理之try-catch-finally

    /** * @author Administrator * 功能:异常 */ package com.test; import java.io.*; import java.net.*; public ...

  4. 坚果云创业团队访谈:我们 DIY 云存储(不要过度关注竞争对手,尤其当我们还是小公司的时候)

    坚果云(http://jianguoyun.com/)是一款用于多平台文件同步.备份和交换的云存储工具,立志于提供“便捷,安全”的服务.坚果云自去年年初启动内测,至今年三月初刚刚正式发布.近日我们拜访 ...

  5. 170. Two Sum III - Data structure design

    题目: Design and implement a TwoSum class. It should support the following operations: add and find. a ...

  6. 165. Compare Version Numbers

    题目: Compare two version numbers version1 and version2.If version1 > version2 return 1, if version ...

  7. 【转】HTML中A标签与click事件的前世今生

    在动态网页中,常常需要在单击超链接时处理一些数据,而不是跳转一个网页.在这种情况下,通常有以下三种处理方式: 不设置<a>标签的href属性,只设置onclick属性.在这种处理方式下,通 ...

  8. 企业2.0杀出一号种子选手 “Linkwedo”横空出世

    当下,最热门的话题就是企业2.0和1.0的新老交替,在过去的时间里OA在国内几乎是企业1.0的代名词,各大知名OA厂商一直占领着国内的企业市场,但企业2.0在全球越演越烈,甚至大有替代企业1.0的的迹 ...

  9. bzoj1054

    弱弱的搜索题, 我的做法是将矩阵看做二进制然后用位运算来做的,感觉比较舒服 ..] ,,,);       dy:..] ,,-,); type node=record        po,next: ...

  10. POJ_3258_River_Hopscotch_[NOIP2015]_(二分,最大化最小值)

    描述 http://poj.org/problem?id=3258 给出起点和终点之间的距离L,中间有n个石子,给出第i个石子与起点之间的距离d[i],现在要去掉m个石子(不包括起终点),求距离最近的 ...