NPIV介绍
我们知道在存储区域网络(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介绍的更多相关文章
- IAAS-libvirt介绍。
Libvirt介绍 Libvirt与hypervisor无关,其提供与多种操作系统虚拟化能力进行交互的API与工具库. Libvirt提供了一个通用稳定的抽象层,可以安全的操作物理机上的虚拟机,同时为 ...
- 【转】NPIV - 连接虚拟机与存储的桥梁
转自:http://blog.csdn.net/jewes/article/details/7705895 解决什么问题 我们知道在存储区域网络(SAN:storage area network),主 ...
- CSS3 background-image背景图片相关介绍
这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- Windows Server 2012 NIC Teaming介绍及注意事项
Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...
- Linux下服务器端开发流程及相关工具介绍(C++)
去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...
- JavaScript var关键字、变量的状态、异常处理、命名规范等介绍
本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...
- HTML DOM 介绍
本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...
- HTML 事件(一) 事件的介绍
本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...
随机推荐
- uva 1476 - Error Curves
对x的坐标三分: #include<cstdio> #include<algorithm> #define maxn 10009 using namespace std; do ...
- ASP.net Application及Session 的start end 方法总结
经过几天的摸索,试验,今天终于可以将Application及Session对象的Start和End方法做下总结了. Application_start: 第一个访问网站的用户会触发该方法. 通常会在该 ...
- C#语法中一个问号(?)和两个问号(??)的运算符是什么意思?
(1).C#语法中一个个问号(?)的运算符是指:可以为 null 的类型. MSDN上面的解释: 在处理数据库和其他包含不可赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型以及日期类型的功 ...
- percona-xtrabackup安装及使用教程
安装percona-xtrabackup依赖包(前提已安装mysql) yum -y install perl-CPAN perl-DBD-MySQL perl make gcc gcc-c++ pa ...
- <算法竞赛入门经典> 第8章 贪心+递归+分治总结
虽然都是算法基础,不过做了之后还是感觉有长进的,前期基础不打好后面学得很艰难的,现在才慢慢明白这个道理. 闲话少说,上VOJ上的专题训练吧:http://acm.hust.edu.cn/vjudge/ ...
- 李洪强漫谈iOS开发[C语言-020]-scanf的本质
scanf是有返回值和参数的
- Web开发-表单验证
表单验证是Web开发中必不可少的一个环节,用来限制用户输入数据的规范和一致性.那么如何能够简化这一任务,让开发人员通过简单的属性设置就能达到目的呢? FineUI在这一点上也是下足了功夫,比Asp.N ...
- 使用Timer执行定时任务
一.Timer概述 在Java开发中,会碰到一些需要定时或者延时执行某些任务的需求,这时,我们可以使用Java中的Timer类实现. 二.Timer介绍 Timer是一个定时器类,通过该类可以为指定的 ...
- java.sizeOf
Introduction With java.SizeOf you can measure the real memory size of your Java objects. Download it ...
- App性能优化
http://www.cocoachina.com/ios/20150429/11712.html http://blog.csdn.net/jasonblog/article/details/765 ...