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 IDArea IDPort ID 三个亚寻址单元
高 8 位定义为 Domain 区分符, 用来区分网络中的 FC 交换机本身 Domain ID 是自主交换机分配的那主交换机怎么来的? 它是根据 WWNN 号来进行选举, WWNN 最小者获胜, 成为主交换机, 它就有资格向其他交换机分配 Domain ID
中 8 位定义为 Area 区分符, 区分同一台交换机的不同端口组如果一块芯片可以管理 1234 号 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 适配器有自己的 CPURAMROM 是一个嵌入式设备与 RAID 卡类似, 只是不像 RAID 卡需要那么多的 RAM 来做数据缓存
SCSI 迁移到 FC
如何迁移
在上面一章我们把 FC 协议进行了简单的介绍, 现在是时候把 SCSI 迁移到 FC 上了
回顾一下, 为什么要这么做, 因为 SCSI 总线只能接 16 个节点, 不利于扩展, 同时传输的距离有限, 而且不够高效等所以我们可以在主机与后端存储之间使用 FC 协议, 把基于并行 SCSI 总线的存储网络架构迁移到 FC 的网络架构
迁移的过程中存在一个问题, 我们知道 FC 协议并没有定义 SCSI 指令集这样面向磁盘存储数据的通用语言那怎么解决这个问题呢?
在大话存储学习笔记(13 章), 协议融合 http://www.cnblogs.com/dy2903/p/8426597.html 中提到了协议融合, 此时 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 这个软件还有个作用, 如果某个控制器发生故障, 通过这个软件立即重定向到另一个控制器
来源: http://www.92to.com/bangong/2018/03-29/33494787.html