【转】NPIV - 连接虚拟机与存储的桥梁
转自:http://blog.csdn.net/jewes/article/details/7705895
解决什么问题
我们知道在存储区域网络(SAN:storage area network),主机(Host)能够访问后端存储(比如CLARiiON,VNX)必备的一个前提是主机必须配备HBA卡(Host Bus Adapter)。在没有虚拟化之前,每台物理主机自己配备HBA卡是无可厚非的事情。但是,在虚拟化流行的今天,怎么在不添加新的HBA卡的前提下把后端存储分配给运行在物理主机上的虚拟机呢?
目前一般的做法是物理主机配备了HBA卡后,具备了访问后端存储的能力。后端存储把LUN分配给物理主机(在物理主机上表现为一块新的硬盘),物理主机再把空间分配给运行在上面的虚拟机。从后端存储的角度来看,它只知道哪些LUN分配给了物理主机(比如ESXServer或者Hyper-V Server),它并不知道哪些LUN是分配给了虚拟机。所以,从存储管理的角度来看,其管理粒度就只能到物理主机,无法到虚拟主机了。
我们需要解决的问题是,如何把后端存储的LUN通过FC的方式直接分配给虚拟机,使得后端存储知道哪些LUN是给哪个虚拟机。本文介绍的NPIV就是其中的一个解决方案。
注:本文只讨论如何把LUN通过FC分配给虚拟机。目前,通过iSCSI是可以把LUN直接分配给虚拟机了,只是iSCSI的性能不如FC。
如何解决
解决这个问题,我们得先了解FC是如何工作的。在数据中心里,主机通常是通过FC交换机与后端存储连接,这样后端存储就能同时为很多主机服务了。
组建FC网络有两种方式:
- FC-AL,类似于以太网里面的令牌环网络,总线是被连接在网络中的设备共享的。
- Fabric,类似于以太网里面的全交换网络。
这里我们只讨论Fabric结构的网络。
如何理解Fabric网络
可以把Fabric网络认为是一个有很多FC交换机互联在一起的网络,每个交换机上除了用来与其它交换机级联的口之外,其它口都是用来连接主机或者后端存储设备(这里做了简化,有些口是做别的用途的)。在这个网络中,任意交换机的任意两个端口都能直接通信,因此如果某个设备想与网络中另外一个设备通信,只要知道目标设备位于哪个交换机的哪个端口。
当然,实际的情况是,每个连接在Fabric网络中的设备都将获得一个有FC交换机分配给该设备的Fabric ID,用来表示该设备在Fabric网络的位置。Fabric ID长度为24位,可以分成3段,长度分别为8位,分别是DomainID,Area ID和PortID。
- Domain ID 是用来区分Fabric网络中的交换机。因此,一个交换机上所有的端口的DomainID都是一样的。
- Area ID是用来区分同一交换机上的不同端口组。每个FC接口都会由一块芯片来管理,处于同一块芯片管理的端口唯一同一Area,因此具有同样的AreaID。
- 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,因此必须要实现下面两点:
- 虚拟机上得有个”虚拟HBA卡”,提供WWNN和WWPN,这样才能登录到Fabric网络。
- 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 8 Server 中的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。
参考资料
- 大话存储
- Understanding NPIV and NPV: http://blog.scottlowe.org/2009/11/27/understanding-npiv-and-npv/
- http://www.datacentersky.com/detailed-parsing-of-the-role-of-the-fc-fcoe-agreement-npiv.html
【转】NPIV - 连接虚拟机与存储的桥梁的更多相关文章
- 使用SecureCRT连接虚拟机(ubuntu)配置记录
这种配置方法,可以非常方便的操作虚拟机里的Linux系统,且让VMware在后台运行,因为有时候我直接在虚拟机里操作会稍微卡顿,或者切换速度不理想,使用该方法亲测本机效果确实ok,特此记录. Secu ...
- SecureCRT连接虚拟机(ubuntu)配置
使用SecureCRT连接虚拟机(ubuntu)配置记录 这种配置方法,可以非常方便的操作虚拟机里的Linux系统,且让VMware在后台运行,因为有时候我直接在虚拟机里操作会稍微卡顿,或者切换速 ...
- flashftp连接虚拟机centos报错的解决方法
flashftp连接虚拟机centos报错,一般情况可能是因为端口(22)的权限没有开放 先在centos中检查并开放22端口,执行:iptables -I INPUT -p tcp --dport ...
- 主机与虚拟机通信:以主机VS2010连接虚拟机MySql为例
1.首先解决环境配置.网络互相通信的问题: 主机:Win7 32bit.虚拟机 Winxp 32bit(不要鄙视我不大会用unix之类的东西).使用virtualBox安装. 网络:虚拟机配置成Bri ...
- Xshell连接虚拟机
一般连接虚拟机失败 原因1:ip地址错误 当输入 ifconfig 只有lo没有eth0,或者有eth0,但eth0中确没有inet addr这一行 输入命令:dhclient eth0 就可以了
- (一)SecureCRT连接虚拟机linux
最近在学习linux,在使用SecureCRT连接虚拟机linux时遇到了一些问题,现在总结一下. 1.首先要配置linux配置文件,修改静态IP地址以及掩码,保持与本地在同一网段.更改配置文件方法如 ...
- 本机连接虚拟机Oracle时报错的解决办法
虚拟机安装了Oracle服务器(桌面类)和客户端,里面使用plsql连接自己没有问题. 在本机连接虚拟机没有成功.虚拟机的地址是192.168.126.132,已经确认本机能ping通虚拟机. 先是报 ...
- 利用putty软件连接虚拟机中linux操作系统
http://jingyan.baidu.com/article/9c69d48fbefe6613c8024e6a.html 大家在使用虚拟的过程中有时候会感觉切换操作系统很不方便,那么有什么方法可以 ...
- SecureCRT 连接虚拟机Linux
SecureCRT 连接虚拟机Linux 最近在学习linux,在学习中遇到了一些问题,现总结一下. 虚拟机我用的是VirtualBox,完美支持中文,可以在电脑中创建虚拟机环境,上手非常简单.具 ...
随机推荐
- React Native :加载新闻列表
代码地址如下:http://www.demodashi.com/demo/13212.html 标签与内容页联动 上一节(React Native : 自定义视图)做到了点击标签自动移动,还差跟下面的 ...
- 实现乐鑫esp8266的无线OTA升级,实现远程在线升级固件
代码地址如下:http://www.demodashi.com/demo/12994.html 一.前言: 写了这么多的8266博文,一直以满意100%的心态去敲写代码固件烧录,以致很少出现 bug ...
- iOS 简单引导界面
代码地址如下:http://www.demodashi.com/demo/11607.html 前言 现在很多APP在用户第一次用的时候,由于用户可能并不知道其中一些功能点的时候,这个时候就需要我们来 ...
- __block 和__weak 区别及使用
API Reference对__block变量修饰符有如下几处解释: //A powerful feature of blocks is that they can modify variables ...
- 调用getChildFragmentManager时出现的Bug
异常: java.lang.IllegalStateException: Activity has been destroyed at android.support.v4.app.FragmentM ...
- php 实现 html转js
[php] <?php function htmltojs($str){ $re=''; $str=str_replace('\','\\',$str); $str=str_replace(&q ...
- sqlite or svn 错误 The database disk image is malformed 可解决
在网上找了很多资料,很多网友都提到这个问题是不可解决的,面对这个问题,只能作罢. 但我不甘心这么丢失数据,最最后找到了一个解决方法.经测试,原来数据,全部保住. 以下为原文. http://www.s ...
- python模块学习之json
更多信息请参考官网地址: https://docs.python.org/3.6/library/json.html 19.2. json - JSON编码器和解码器 Source code: Lib ...
- ROW模式的SQL无法正常同步的问题总结
转自:http://blog.chinaunix.net/uid-20639775-id-4664792.html#_Toc29623 ROW模式的SQL无法正常同步的问题总结 一. 问题起因.... ...
- 中移苏研DCOS实践之路完整篇
一.实践背景 1.1现网生产系统存在的问题 在中国移动内部各省市公司,由于技术迭代.设备更新的原因,设备繁杂,有x86server .VMware虚拟机.OpenStack虚拟机以及不同厂商的物理机( ...