本文来自微信公众“twt企业IT社区”,作者/张鹏,某金融科技公司高级技术主管。
多路径管理软件的主要功能
屏蔽冗余LUN
存储通过Fabric网络的Zone和存储的LUNMasking/LUN Mapping建立与服务器的关系,服务器上就可以识别存储的LUN。在多路径组网的存储区域网络中,当未安装多路径管理软件的服务器通过每条路径都会发现一个LUN,此时存储上同一个LUN,在服务器端会被认为是两个或多个不同的LUN,即出现了冗余LUN。服务器端上显示的LUN实际上仅是路径不同。当安装了多路径管理软件之后,冗余的LUN会被聚合为虚拟LUN,操作系统识别虚拟LUN,并直接对虚拟LUN进行I/O操作,I/O数据流经过多路径管理软件后,按照多路径管理软件设置的策略与存储进行I/O操作。
选择最优路径
存储系统为了保证业务运行的稳定性和连续性,一般会配置两个或者多个控制器,实现部件冗余。存储系统中每个LUN都有一一对应的所属控制器,所属控制器是存储系统为LUN指定的一个特定控制器,用来避免两个或多个控制器同时对同一个LUN进行操作,防止写冲突损坏存放的数据。在日常运行过程中,如果服务器通过非所属控制器来访问LUN,最终需要转给LUN的所属控制器进行处理,直接通过所属控制器访问对应的LUN可获得最快的I/O速率。在多路径组网环境下,服务器上虚拟LUN对应的存储系统上LUN的所属控制器,称为该LUN的优选控制器。因此,安装多路径管理软件的服务器会优先选择通过优选控制器来访问存储系统上的LUN,获得最快的I/O速率。连接到优选控制器的路径就是最优I/O访问路径。多路径管理软件能够获取LUN的优选控制器信息,能够自动为数据流选择优选控制器上的一条或多条路径进行访问以获得最佳的I/O速率。
故障切换和故障恢复
通常多路径管理软件在路径故障时可以自动将I/O转移到其他可用路径,例如:当服务器上的应用通过多路径管理软件管理的虚拟LUN进行I/O操作,多路径管理软件选择一条最优路径,向存储提交I/O请求,如果这条路径故障,导致下发到存储的I/O请求失败,多路径管理软件会得到失败的返回值,此时多路径管理软件会重新选择另一条路径,再次向存储提交I/O请求,如果路径正常,I/O下发到存储成功,多路径管理软件会接收到成功的返回值,并且把相应的状态信息反馈给操作系统和应用。请注意,多路径管理软件在发现路径故障时通常会多次重新尝试和等待,这样会消耗一定的时间,会造成一定的I/O阻塞。
多路径管理软件在检测到路径故障恢复后,会自动把I/O重新下发到该路径。路径故障恢复有两种方式:对于支持热拔插的操作系统(如Windows),服务器与存储系统之间的链路断开会导致SCSI设备被删除,相应的链路在恢复后会触发重新创建SCSI设备,对于这种场景的多路径管理软件需要立即感知到路径恢复。对于不支持热拔插的操作系统(如AIX、低版本的Linux),多路径管理软件通过周期测试感知路径恢复。
负载均衡
谈到负载均衡,需要先了解一下存储控制器的多路径机制,存储连接服务器的控制器,通常称为前端控制器,多路径机制大概分为三类:
主主模式(A/A):Symmetric Active/Active,对于特定的LUN来说,在它的路径中,两个(或多个)存储前端控制器(下面简称控制器)的目标端口均处于主动/优化(active/optimized)状态。两个控制器之间实现高速互联的通讯,一个I/O发到控制器端,两个控制器可同时参与处理。当路径出现故障,将离线(offline)故障路径并重定向I/O到其他路径,I/O重定向期间,存储控制器会充分考虑负载平衡等因素并选择最合适的路径。对于应用程序,路径切换过程是透明的的,几乎不会有延迟(延迟时间一般为几秒)。
ALUA模式:Asymmetric Active/Active,ALUA是Asymmetric Logical Unit Access(异步逻辑单元访问)的缩写,对于特定的LUN来说,在它的路径中,一个存储前端控制器(下面简称控制器)的目标端口处于主动/优化(active/optimized)状态,另一个控制器的目标端口处于主动/非优化(active/unoptimized)状态。在某一个时刻,某个LUN只是属于某一个控制器,要想实现两边的负载均衡,就是将任务A交给控制器A,将任务B交给控制器B,对于同一个任务来说,任何时候只有一个控制器在控制。多路径管理软件和控制器共同配合指定每个LUN的优选控制器,如果路径发生故障,将重新分配I/O流量到其他可用的路径,同时,停止故障路径上的I/O,此时优选控制器是否切换,多数取决于存储厂商的设计。
主从模式(A/P):Active/Passive,对于特定的LUN来说,在它的路径中,一个存储前端控制器(下面简称控制器)的目标端口处于主动/优化(active/optimized)状态,另一个控制器的目标端口处于备用(standby)状态。控制器会指定每个LUN的优选控制器,如果路径发生故障,将重新分配I/O流量到其他可用的路径,同时,停止故障路径上的I/O,此时通常会发生优选控制器的切换。
多路径管理软件配合存储前端控制器,有多种选路算法。例如轮询算法(round_robin),如果多路径管理软件管理四条路径,服务器第一次向存储系统发送I/O时,多路径管理软件将通过第一条路径传输,第二次发送时采用第二条路径,以此类推第三条,第四条。当第五次发送时又回到第一条路径传输,路径采用轮流使用的方式进行,保证了每条路径的充分利用。最小队列深度算法(min_queuedepth),服务器向存储系统发送I/O时,实时统计各路径的排队I/O数,并将I/O下发到当前排队I/O数最小的路径,即I/O队列最小的将拥有I/O发送的优先权。最小任务算法(min_task),服务器向存储系统发送I/O时,在最小队列深度算法的基础上,根据每个I/O请求的块大小计算出各路径的总体负载数据量,将I/O下发到当前负载数据量最小的路径。即最小的I/O数据量将拥有I/O发送的优先权。经过试验验证,最小队列深度选路算法在性能方面与其他的选路算法相比更优或者相当,在可靠性方面比其他选路算法更优,这三种对比更推荐使用最小队列深度算法。
进行路径周期性测试
一些厂商的多路径管理软件会对故障路径和空闲可用路径进行周期性的探测,通过故障路径的探测可以及时发现故障,及早恢复路径,通过对空闲路径的测试也可以提前发现路径故障,避免当需要做路径切换时,造成无谓的I/O失败重发,测试通常不会对业务I/O有影响。
多路径管理软件的典型部署架构
服务器在存储区域网中有多种互联架构,这里讨论几种典型的架构,不做过多穷举示例是因为,很多架构原理相似,实现效果接近,或者在实际环境中应用较少。
多路径管理软件安装在服务器上,能够支持不同组网应用,保证数据传输快速、畅通、可靠。下面讨论几种多路径管理软件的典型部署架构。
服务器双链路直连架构
服务器通过双链路直连存储区域网络是最简单、最节约的连接方式,如图2所示。
图2双链路直连架构
服务器的HBA卡分别连接一套存储不同的前端控制器。服务器连接到LUN优选控制器的路径是最优路径;连接到非优选控制器的路径是备选路径。正常情况下,多路径管理软件选择最优路径进行数据传输。当最优路径故障时,多路径管理软件选择备选路径进行数据传输。最优路径恢复后,多路径管理软件将切换回最优路径进行数据传输。这种架构HBA卡的端口和存储前端控制器端口都被独占了,不够灵活,在企业的复杂IT环境中较少使用。
服务器双链路与单交换机互联架构
服务器双链路通过一台光纤通道交换机连接存储区域网,如图3所示。服务器到存储系统之间有4条路径。从服务器到LUN的优选控制器的2条路径是最优路径,剩余2条路径是备选路径。
图3单交换机互联架构
交换机能够扩展主机端口的数量,提升存储系统的接入能力。交换机还能够延长数据传输的距离,使远处的服务器也能够连接到存储系统上。但是这种互联架构只有1个交换机,存在单点故障风险,对于高可用性要求高的企业这种架构不适用。
服务器双链路与双交换机互联架构
服务器双链路通过两台光纤通道交换机连接存储区域网,形成双交换机转发能力,如图4所示。
图4双交换机互联架构
双交换机的加入避免了交换机成为单点故障的隐患,增强了存储区域网络的高可用性。这种架构是企业中,单数据中心内部存储区域网络的典型互联架构,应用广泛。
集群服务器双链路与双交换机互联架构
在服务器双链路双交换机互联的基础上增加了1个或者多个服务器,组成集群环境,如图5所示。这是企业IT环境中常用的部署架构,增强服务器侧的高可用性和处理能力。
图5双交换机集群服务器
服务器与存储网关在存储区域网环境下互联架构
存储网关作为存储功能的补充,可以增加存储网络架构的灵活性,也可以增加一些特色功能,在一定时期也是应用比较广泛的产品。存储网关在存储区域网中的位置比较特殊,如图6所示。可以抽象的理解,服务器侧可以把存储网关看做存储,存储侧可以把存储网关看作服务器。所以存储网关其实既是存储的角色,又是服务器的角色,存储网关内部需要多路径管理软件来分别实现前端端口和后端端口的路径冗余和性能负载。需要说明的,存储网关这种类似联邦的互联机制,内部还需要有互联机制。在双数据中心双活架构中通常还需要考虑第三方仲裁的设计,暂时不在本文中分析。
图6存储网关
集群服务器在双数据中心的双活架构
双活数据中心的设计思想是两个数据中心资源的充分利用,从架构上看,物理距离分割较远(通常光纤距离小于30公里,超过距离的网络延时受到物理定律的限制无法缩小)的两个数据中心,逻辑上作为一个数据中心进行管理。如图7所示,两个数据中心的服务器分别通过光纤通道链路连接本中心和远端数据中心的存储区域网络(光纤通过长波模块直连或者通过波分设备互联远端的网络)。这种架构基本消除了单点故障的风险,服务器,网络,存储,各个层面都实现了冗余,同时配合应用程序也能更好地实现负载均衡,是比较理想的高可用性容灾架构。需要说明的是,图示中没有第三方仲裁,实际应用中要充分考虑第三方仲裁,本文主要讨论多路径管理软件,此内容没有过多描述。
图7双活架构
双活架构中,多路径管理软件起到非常重要的作用,本地的路径高可用需要多路径管理软件来实现,跨两个数据中心的冗余路径也需要多路径管理软件来管理。由于长距离可能出现的链路质量(延迟、抖动)问题,所以在配置多路径调度策略中要特别注意,例如需要多路径管理软件具有对远距离路径上进行读写控制的能力,建议服务器平时优选本地存储区域网的路径进行读写I/O,对于远距离存储区域网络的路径可以控制写I/O,当故障发生需要路径切换的时候,优先本地多路径间的路径切换,本地路径均失效的情况下,切换到远程路径。
存储双活通常需要多路径管理软件和存储的复制技术相结合来实现,存储网关双活的解决方案中存储网关作为中间层来管理两个数据中心存储的数据同步,可以通过复制技术也可以通过镜像技术来实现,同时也需要多路径管理软件来配合。