【大话存储】学习笔记(7,8章),FC协议

Fibre Channnel

我们之前引入了SAN的概念,SAN首先是个网络,而不是存储设备。这个网络是专门来给主机连接存储设备用的。

我们知道按照SCSI总线16个节点的限制,不可能接入很多的磁盘,要扩大SAN的规模,只使用SCSI总线是不行的,所以必须找到一种可寻址容量大、稳定性强、速度块、传输距离远的网络结构。FC网络就应运而生。

FC网络

Fibre Channnel也就是网状通道,FC协议从1988年出现,最开始作为高速骨干网技术。

任何互联系统都逃不过OSI模型,所以我们可以用OSI来将FC协议进行断层分析。

物理层

首先有较高的速度:1Gb/s,2Gb/s,4Gb/s,8Gb/s到16Gbps

为了实现远距离传输,传输介质起码是光纤

链路层

字符编码及FC帧结构

FC协议的帧头有24字节,比以太网帧头(14字节)还要长。

比如下图为以太网的报文格式。

为什么FC协议需要这么长的帧头呢?因为24字节的帧头不但包含了寻址功能,还包含了传输功能保障。也就是说网络层和传输层的逻辑都用这24字节来传输。

这点就与TCP/IP+以太网不同,以太网基本上没有传输功能保证功能,主要需要靠TCP来进行端到端的传输保障。

我们可以对比一下TCP/IP和FC协议的开销:

基于以太网的TCP/IP网络,开销为:

14字节(以太网帧头) + 20字节(IP头) + 20字节(TCP头) =54字节,或者把TCP帧头变为UDP(8字节)一共是42字节

而FC协议就24字节,所以开销比TCP/IP的要小。

网络层

FC网络中的节点要通信,无非也就是连、找、发三大要素。

  • 连:通过FC交换机打通通路,主要的拓扑结构有FC-AL和Fabric两种。
  • 找:FC协议有一套于以太网不相同的编址方式,可以尽可能减少人为的干预。
  • 发:指的是与目标进行通信

从这个方面基本上就可以了解FC各节点交互的流程了。

连:拓扑

与以太网类似,FC也有两种拓扑:FC-AL和Fabric

  • FC-AL:类似以太网共享总线拓扑,但是连接方式不是总线,而是仲裁环(Arbitral loop)。每个FC -AL 设备首尾接成了一个环路。最多能接入128个节点,实际上只用了8位的寻址容量。被广播地址、专用地址占用之后,只剩下127个实际可用的地址。

仲裁环是应该 由所有设备串联而成的闭合环路,每个接口上都有一套旁路电路(Bypass Circuit),一旦检测到本地设备故障,就会自动将这个接口短路。

一跳一跳的传输,而且任何时候只能按照一个方向向下游传输。

  • Fabric:与以太网交换拓扑类似。Fabric的意思是“网状构造”,表明其实是一种网状的交换矩阵

相对于仲裁环路来说转发效率提升了很多,联入矩阵所有节点可以同时进行点对点通信,加上包交换所带来的并发和资源充分利用,可使得交换架构获得的总带宽为所有端口带宽之和。

而AL架构下,不管接入的节点有多少,带宽为恒定,即共享环路带宽。

下图为交换矩阵的示意图。

FC终端设备接入矩阵端点,一个设备发给另一个设备数据帧被交换矩阵收到后,矩阵会拨动交叉处的开关,连通电路,传输数据。所以可以把交换矩阵是一个大的电路开关矩阵,根据通信的源和目的决定波动哪些开关。

FC交换拓扑寻址容量是2的24次方个地址,比以太网理论值(2的48次方)少,但是对于专用的存储网足够。

找:编址

任何网络都需要寻址机制,所以需要对FC网络的每个设备定义一个唯一的标识。

  • WWNN(World Wide Node Name):每个设备自身有一个WWNN
  • WWPN(World Wide Port Name):FC设备的每个端口都一个WWPN,是世界上唯一的。

以太网交换设备的端口不需要有MAC地址,而FC交换机却需要每个端口都有自己的WWPN。这是因为FC要做的工作比以太网交换机多,许多FC的逻辑都集成在了FC交换机。 需要处理到FC协议的最上层。而以太网相对简单,因为上层逻辑都被交给TCP/IP这样的上层协议来实现了。

WWPN:长度是64位,比MAC地址多16位。长度太长,速度低,所以在WWPN上映射一层寻址机制,分配一个Fabric ID,嵌入链路帧里面来做路由

这样WWPN被映射到了Fabric ID,一个24位的Fabric ID又被分为Domain ID、Area ID、Port ID三个亚寻址单元

  • 高8位定义为Domain区分符,用来区分网络中的FC交换机本身。Domain ID是自主交换机分配的。那主交换机怎么来的?它是根据WWNN号来进行选举,WWNN最小者获胜,成为主交换机,它就有资格向其他交换机分配Domain ID
  • 中8位定义为Area区分符,区分同一台交换机的不同端口组。如果一块芯片可以管理1、2、3、4号FC端口,那么芯片可以属于一个Area
  • 低8位定义为Port区分符,区分不同的Port

发:地址映射过程

如下的讲解主要是针对Fabric 交换架构网络。

既然要把WWPN映射到Fabric ID上,就一定要有映射机制,那么每个端口如何获得Fabric ID的呢?过程比较类似于RARP协议。

当一个端口接到FC网络的时候,会向注册服务器发送一个注册申请,然后这个注册服务器会返回给它动态分配一个Fabric ID。当然此时注册服务器会记录这个映射关系。

此后这个接口的帧不会携带WWPN,而是携带其被分配的ID作为源地址。这点就与以太网不同,我们知道 以太网既携带MAC又携带IP,所以在效率上打了折扣。

发:同步其他节点信息

不过还有一个问题,一个端口要与另一个端口通信,那么怎么知道要通信目标的Fabric ID是多少呢?

每个节点获得自己的Fabric ID之后,还会进行名称注册。同样也是向名称服务器发送注册帧,主动告知自己的Fabric ID等信息。然后名称服务器其他节点的信息返回给它。这样就知道了其他节点地址呢。

如果FC网络比较大,则可能不只一台FC交换机。也就是说有若干FC交换机互联。与IP网络不同的是,FC网络不需要太多的人工介入,它们会自动协商自己的Domain ID(可以回过去看看Fabric ID的结构),选举出主交换机,由主交换机来为其他的交换机分配Domain ID。交换机之间会运行OSPF等路由协议,这样可以交互节点信息,寻址各个节点。

现在我们可以与IP网络对比一下,IP网络需要很强的人为介入性,需要人来配置节点的IP地址、路由信息等,而FC网络则可以自动分配和管理地址。最根本原因是因为FC协议一开始设计就是为了高速、高效的网络,而不是给Internet使用的。所以自动分配地址当然适合。

发:与目标通信

此时每个节点已经获得了Fabric ID了,同时还从名称服务器得知网络上其他节点的ID,万事俱备,完全可以与其他节点进行通信了。

  • 首先需要直接向目的端口发起一个N_PORT Login过程,目的协商一系列的参数
  • 然后进行Process Login过程(类似TCP向端口发送握手包),即进行应用程序间的通信。比如FC可以承载SCSI协议,那么此时Initiator端就需要向Target端发起请求了。
  • 这些Login过程其实就是上三层的内容,属于会话层。但是Login帧也必须通过下4层来封装并传输到目的地,就像TCP握手一样。

FC网络中还有一中FC Control Service,如果节点向这个服务进行注册了以后,一旦网络状态有变动,将会把最新的信息同步到这些节点。

最后一点

上面提到的名称服务器、注册服务器其实一般都是运行在交换机内部的,而不是物理上的服务器。

传输层

FC协议的传输层的作用与TCP相似,也也进行Segment以及通过端口号区分上层应用。

  • 对上层数据流进行Segment。

    每个Exchange(上层程序)发来的数据包,被FC传输层分割为Information Unit,类似于TCP的Segment。

    然后下层协议为每个Segment分配一个Sequence ID,再分割为FC所适应的帧

  • 区分上层程序。TCP是通过端口号,而FC协议是通过Exchange ID来区分。

FC适配器

要构建一个完整的FC网络,除了需要FC交换机,还需要FC适配器(FC HBA,Host Bus Adapter)

HBA可以指代任何一种设备,只要这个设备的作用是将一个外部功能接入主机总线,所以PCIE网卡、声卡和显卡都可以叫HBA。

下图是用来接入FC网络的各种线缆,有SC光纤,DB9铜线和RJ45/47线缆。可以看出FC不一定是光纤

FC适配器有自己的CPU、RAM、ROM。是一个嵌入式设备。与RAID卡类似,只是不像RAID卡需要那么多的RAM来做数据缓存。

SCSI迁移到FC

如何迁移

在上面一章我们把FC协议进行了简单的介绍,现在是时候把SCSI迁移到FC上了。

回顾一下,为什么要这么做,因为SCSI总线只能接16个节点,不利于扩展,同时传输的距离有限,而且不够高效等。所以我们可以在主机与后端存储之间使用FC协议,把基于并行SCSI总线的存储网络架构迁移到FC的网络架构。

迁移的过程中存在一个问题,我们知道FC协议并没有定义SCSI指令集这样面向磁盘存储数据的通用语言。那怎么解决这个问题呢?

【大话存储】学习笔记(13章),协议融合中提到了协议融合,此时FC协议与SCSI协议有重叠,但是FC协议在某些方面可以做得更好,所以可以将SCSI语言承载于FC协议进行传送。

将连接主机和磁盘阵列的通路从并行的SCSI总线替换为串行传输的FC通路。但是盘阵后端连接磁盘的接口还是SAS接口。

这样单台盘阵所能接入的磁盘容量没有提升,但是前端的性能提升了,因为使用FC协议,可以更为的高速。

好处

引入FC之后,带来的好处为

  • 如果一个盘阵只有一个FC接口,那么我们完全可以使用FC交换机来扩充端口。而且采用了这样的包交换架构,可以实现多个节点向一个节点收发数据,传输效率大大提升。

这样就实现了多台主机共享一个盘阵,提升了盘阵的利用率。

  • 而且因为可以使用光纤,所以传输距离加长了。
  • FC协议功能更为丰富,可以为每台主机划分不同的LUN,保证了安全性。

    既然所有的主机都挂在了盘阵上,怎么保证每台主机能独享一块LUN呢?可以从FC交换机,磁盘阵列控制器入手。

    • 在磁盘控制器上做手脚:

    在SCSI协议中有这样一个过程,此时Initiator想要与Target要进行通信,Initiator需要发一条Report LUN指令给Target,Target端在收到这条指令以后,需要返回自己的LUN信息。那么磁盘控制器可以 LUN的时候,根据发起端的身份,提供相应的LUN给它。如果强行访问其他的LUN,就会拒绝。这种方法就叫LUN masking

    总的来说,可以把LUN当做蛋糕,磁盘控制器就是主人,他可以调查每个主机的身份,根据不同的身份来分配蛋糕。

    注意,这是SCSI指令集的功能,只要承载了SCSI指令集的协议就可以实现这个功能。

    • 在FC交换机上做手脚:

      我们知道以太网交换机可以划分VLAN,也就是可以把某几个端口划分到一个逻辑上的LAN中。同样FC交换机也可以实现类似的功能,不过名字叫ZONE

      ZONE有软ZONE和硬ZONE之分。

      • 软ZONE:在名称服务器上做手脚,欺骗进行名称注册的节点,向他们通告其他节点信息。
      • 硬ZONE:把交换机某端口归为一个ZONE,底层完全隔离。如下

多路径访问目标

如果盘阵有两个控制器,每个主机上都有两块FC适配卡,它们都连接到了FC交换机。

这样会存在一个问题,因为主机有两块HBA卡,而每块HBA可以识别两块LUN,所以整个主机会识别出4块磁盘,这就有问题了,因为这样磁盘就有重复了,造成了混乱。

那么你可能会说,为啥要两块FC HBA卡呢?因为一块HBA有单点故障,如果使用两块HBA卡,一旦一块HBA卡出现了故障,另一块卡依然可以维持主机到盘阵的通路。

那多路径的问题怎么解决:可以在操作系统中安装多路径软件,它可以识别FC提交上来的LUN,向操作系统提交单份LUN。这个软件还有个作用,如果某个控制器发生故障,通过这个软件立即重定向到另一个控制器。

原文地址:https://www.cnblogs.com/dy2903/p/8434649.html

时间: 2024-08-11 17:15:54

【大话存储】学习笔记(7,8章),FC协议的相关文章

大话存储学习笔记(1)

一.存储历史 二.计算机IO 1.什么叫IO I表示in,对于CPU来说,从内存中取数据:O表示out,CPU运算完后将数据发送至内存 同理,对于磁盘来说,将数据写入磁盘表示in,将输入从磁盘读出来叫out 2.总线 PCI总线:一种南桥与外设连接的总线技术 PCI总线特点:中断共享,即不同设备使用同一中断而不发生冲突.硬件上采用电平触发:软件上采用中断链,即,假设系统启动时,发现板卡A用了中断7,就会将中断7对应的内存区指向A卡对应的中断服务程序入口ISR_A:系统发现板卡B也用了中断7,这是

大话存储学习笔记(4)

七.逻辑卷管理 逻辑卷管理(简称LVM),是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层. 通过LVM管理可以轻松管理磁盘分区,如:若干个磁盘分区连接为一整块的卷组,形成一个存储池.管理员可以在卷组上随意创建逻辑卷组,并进一步在逻辑卷组上创建文件系统.管理员通过LVM可以方便调整卷组大小,并且可以按照磁盘存储的方式进行命名.管理和分配. LVM的配置信息记录在叫做VGDA(Volume Group Descriptor Area)的区域,LVM就是通过读

大话存储学习笔记(3)

五.磁盘IOPS和传输带宽 磁盘IOPS:每秒能进行多少次IO,每次IO根据写入数据的大小,这个值也不是固定的. 如果IO每次都写入很大的一块连续的数据,则每秒所做的IO次数是比较低的: 如果磁头频繁换道,每次写入的数据还是较大的话,此时IOPS是这块硬盘的最低数值了. 如果在不频繁换道,每次写入最小的数据块,如512字节,则此时IOPS将是最高值. 传输带宽:指硬盘或设备在传输数据是数据流的速度,如果写入1000个1kb的文件需要10s,那么传输带宽只能达到每秒1MB,而写入一个10MB的文件

大话存储学习笔记(5)

九.磁盘阵列 1.关于LUN LUN是SCSI ID的更细一级的地址号,每个SCSI ID下有更多的LUN ID.对大型磁盘阵列来说,可以生产几百几千个虚拟磁盘,为每个磁盘分配一个SCSI ID是远远不够的.因为每个SCSI总线最多允许16个设备接入(目前32位SCSI标准可以接入32个).LUN是一个次级寻址ID.磁盘阵列可以在一个SCSI ID下虚拟多个LUN地址,每个LUN对应一个虚拟磁盘.硬件层次生成的虚拟磁盘,称为LUN:软件生成的虚拟磁盘,称为卷. 2.双控制器的磁盘阵列 如果盘阵内

【大话存储II】学习笔记(15章),文件级集群系统

[大话存储II]学习笔记(15章),块级集群存储系统里面分析的主要是块集群系统,同样文件级存储也可以集群化. 因为NAS系统的前端网络是以太网,速度比较低,导致NAS主要用于一些非关键业务中,比如文件共享.但是一些特殊应用也需要多主机同时访问某个大文件,比如3D渲染集群等.如果我们使用块集群存储系统,则会存在一个问题,需要在应用程序上引入文件锁,而NAS的文件系统一般都自带有文件锁机制,所以还不如把NAS存储系统进行集群化. 在谈怎么样把NAS系统进行集群化之前,我们说说集群文件系统的架构.集群

大话设计模式学习笔记——面向对象基础

前言 好记性不如烂"笔头"系列--大话设计模式学习笔记 目录 面向对象基础 面向对象基础 什么是类与实例 一切事物皆为对象,即所有的东西老师对象,对象就是可以看到.感觉到.听到.触摸到.尝到.或闻到的东西.准确地说,对象是一个自包含的实体,用一组可识别的特性和行为来标识.面向对象编程,英文叫 Object-Oriented Programming,其实就是针对对象来进行编程的意思.类就是具有相同属性和功能的对象的抽象集合.实例就是一个真实的对象.比如我们属于'人'类,而个人就是'人'类

java JDK8 学习笔记——第16章 整合数据库

第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程序. 2.JDBC标准主要分为两个部分:JDBC应用程序开发者接口和JDBC驱动程序开发者接口.应用程序需要联机数据库,其相关API主要在java.sql和javax.sql两个包中. 3.应用程序使用JDBC联机数据库的通用语法: Connection conn = DriverManager.g

Shell学习笔记——第三章

第三章 /etc/passwd 文件包含一个所有系统用户账户组成的列表,以及一些关于每个用户的基本信息. 例rich:x:501:Rich Blum:/home/rich:/bin/bash 每个条目都有7个数据字段,例使用冒号分隔.系统使用这些字段中的数据向用户分配具体的特性.这些字段分别有 用户名:用户密码(如果密码存储在其他文件中,则为占位符):用户的系统用户ID编号:用户的系统组的ID编号:用户的全名:用户默认的主目录:用户的默认Shell目录: cd 命令 略过 列表命令(ls) 参数

学习笔记:第一章——计算机网络概述

学习笔记:第一章--计算机网络概述 1.0 计算机网络的定义:一些互相连接的,自治的计算机的集合称为计算机网路. 1.1 计算机网络在信息时代中的作用:连通和共享. 1.2 因特网概述:       网络的概念:网络(network)是由若干个结点(node)和连接这些结点的链路(link)组成. 网络中的结点可以是计算机,集线器,交换机和路由器: 网络和网络是通过路由器连接: 因特网是世界上最大的网络. 1.3 因特网的组成: 从因特网的工作方式上将其分为以下两大快: (1)边缘部分:由所有的

o'Reill的SVG精髓(第二版)学习笔记——第十一章

第十一章:滤镜 11.1滤镜的工作原理 当SVG阅读器程序处理一个图形对象时,它会将对象呈现在位图输出设备上:在某一时刻,阅读器程序会把对象的描述信息转换为一组对应的像素,然后呈现在输出设备上.例如我们用SVG的<filter>元素指定一组操作(也称作基元,primitive),在对象的旁边显示一个模糊的投影,然后把这个滤镜附加给一个对象: <fliter id="drop-shadow"> <!-- 这是滤镜操作 --> </fliter&g