NPIV - 连接虚拟机与存储的桥梁

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介:

 

最近工作的项目和NPIV相关,于是花了点时间学习了一下NPIV,简单总结了一下,望高手指正。

解决什么问题

我们知道在存储区域网络(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网络有两种方式:

  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 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。

参考资料

  1. 大话存储
  2. Understanding NPIV and NPV: http://blog.scottlowe.org/2009/11/27/understanding-npiv-and-npv/
  3. http://www.datacentersky.com/detailed-parsing-of-the-role-of-the-fc-fcoe-agreement-npiv.html

 





本文转自 taojin1240 51CTO博客,原文链接:http://blog.51cto.com/taotao1240/917261,如需转载请自行联系原作者

目录
相关文章
|
4月前
|
Ubuntu Shell 网络安全
安装了ubuntu虚拟机后发现shell无法连接 ubuntu开启ssh连接
【8月更文挑战第23天】安装了ubuntu虚拟机后发现shell无法连接
367 6
|
2月前
|
安全 虚拟化 数据中心
Xshell 连接 VMware虚拟机操作 截图和使用
Xshell 连接 VMware虚拟机操作 截图和使用
81 4
|
2月前
|
Linux 网络安全
Linux虚拟机与主机和Xshell的连接问题解决
Linux虚拟机与主机和Xshell的连接问题解决
108 1
|
4月前
|
关系型数据库 MySQL Linux
成功解决:2003 -Can‘t connect toMySQL server on ‘10.1.46.42(10060 “Unknown error“) 使用navicate连接虚拟机出错
这篇文章记录了在CentOS 7系统上安装并配置MySQL后,使用Navicat尝试进行远程连接但失败的问题。问题的主要原因是虚拟机的防火墙没有关闭。文章详细介绍了如何检查防火墙的状态,如何临时关闭它,以及如何禁止防火墙在系统启动时自动启动。当防火墙处于开启状态时,远程连接无法成功;关闭或禁用防火墙后,远程连接便能成功建立。
成功解决:2003 -Can‘t connect toMySQL server on ‘10.1.46.42(10060 “Unknown error“) 使用navicate连接虚拟机出错
|
4月前
|
Linux 虚拟化
成功解决:Xshell 无法连接虚拟机。如何使用Xshell连接CentOS7虚拟机(详细步骤过程)
这篇文章提供了使用Xshell连接CentOS 7虚拟机的详细步骤,包括编辑VMware的网络设置以启用桥接模式、检查个人电脑适配器虚拟网络的连接情况,以及通过Xshell新建并建立连接的过程。文章还提到了在虚拟机可以访问外网的情况下成功连接的后语,暗示了网络配置的重要性。
成功解决:Xshell 无法连接虚拟机。如何使用Xshell连接CentOS7虚拟机(详细步骤过程)
|
4月前
|
存储 网络协议 搜索推荐
在Linux中,如何配置和管理虚拟机的网络和存储?
在Linux中,如何配置和管理虚拟机的网络和存储?
|
4月前
|
NoSQL Java Linux
springboot+redis+虚拟机 springboot连接linux虚拟机中的redis服务
该博客文章介绍了如何在Spring Boot项目中通过配置和代码实现连接运行在Linux虚拟机上的Redis服务,并提供了详细的步骤和测试结果截图。
springboot+redis+虚拟机 springboot连接linux虚拟机中的redis服务
|
5月前
|
存储 SQL 运维
服务器数据恢复—Isilon存储误删除vmware虚拟机的数据恢复案例
Isilon存储使用的是分布式文件系统OneFS。在Isilon存储集群里面每个节点均为单一的OneFS文件系统,所以Isilon存储在进行横向扩展的同时不会影响数据的正常使用。Isilon存储集群所有节点提供相同的功能,节点与节点之间没有主备之分。当用户向Isilon存储集群中存储文件时,OneFS文件系统层面将文件划分为128K的片段分别存放到不同的节点中,而节点层面将128K的片段分成8K的小片段分别存放到节点的不同硬盘中。用户文件的Indoe信息、目录项及数据MAP则会分别存储在所有节点中,这样可以确保用户不管从哪个节点都可以访问到所有数据。Isilon存储在初始化时会让用户选择相应的
79 12
|
4月前
|
关系型数据库 MySQL 数据库
成功解决:Navicat 连接虚拟机Docker中的mysql数据库失败(仅限某些特殊情况)
这篇文章介绍了在Ubuntu环境中使用Docker部署Flask项目的方法,包括创建测试项目、设置数据库、构建Flask和Nginx镜像以及容器编排,其中使用了MySQL 5.7作为数据库,Flask 2.0.2作为Web框架,Gunicorn 20.1.0作为应用服务器,Nginx 1.21.4作为反向代理,并解决了Navicat连接Docker中的MySQL数据库失败的问题。
|
6月前
|
存储 Java C++
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据,如局部变量和操作数;本地方法栈支持native方法;堆存放所有线程的对象实例,由垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息和常量;运行时常量池是方法区一部分,保存符号引用和常量;直接内存非JVM规范定义,手动管理,通过Buffer类使用。Java 8后,永久代被元空间取代,G1成为默认GC。
72 2