首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一种基于权重自动选择最优iSCSI访问路径的方法

前言:

qemu和后端存储设备之间,使用iSCSI协议的情况下,为了防止后端出现崩溃,一般会使用iSCSI redirect功能做高可用。在两条iSCSI路径的情况下,iSCSI redirect确实能做到一部分高可用的能力。

然而,实际情况下,iSCSI redirect需要额外的管理工作,而且只支持两条。组件的数量变多,也导致了连接数量变多,作者认为并不是最好的解决方案。

于是,作者设计并实现了另外的一个方案。这个方案并不是业界的通用方案,目前作者把这个方案命名为“iSCSI priority path”。

分析:

1,iSCSI redirect

先来分析iSCSI redirect方案的实现原理:

例子中的iSCSI initiator地址是192.168.1.10,iSCSI redirect地址是192.168.1.200,同时配置了两个iSCSI target分别是192.168.1.100和192.168.1.101。

一,更新redirect的地址为192.168.1.100

二,initiator向redirect请求

三,initiator得到了一个重定向的地址,是真正的target 192.168.1.100。

四,initiator和target 192.168.1.100之间建立连接访问数据

如果iSCSI target 192.168.1.100发生故障,需要切换target。

五,更新redirect的地址到另外的target 192.168.1.101

六,initiator因为发生了NOP,就会向redirect重连

七,redirect返回了更新后的新的地址,也就是192.168.1.101

八,initiator和target 192.168.1.101之间建立连接访问

结合上图,可以看到iSCSI redirect可以实现 iSCSI的高可用。但是也存在一定的缺陷:多了一个iSCSI redirect进程,需要被管理起来,虽然相对稳定,不会轻易发生crash,但是使用的时候,也需要额外的逻辑来处理异常情况,并且需要listen本地端口的,发生端口冲突等等工作也随之而来。如果发生故障的 iSCSI target恢复运行,initiator只有在下一次发生NOP的时候才会重连。两个target可能是在不同的机架或者机房里,那么,在逻辑上,它们的权重也应该有所差异,优先使用更近的target才对。

2, iSCSI priority path

先来看物理拓扑的情况,在机房A中的机架N上的iSCSI客户端,以及三条iSCSI的访问路径,分别是:

P0:在相同机房A中的相同机架N上iSCSI服务端。

P1:在相同机房A中的不同机架M上的iSCSI服务端。

P2:在不同机房B中的不同机架X上的iSCSI服务端。

在三条路径正常的情况下,路径P0具有最高的权重,客户端正在使用路径P0。

3,iSCSI change path

权重最高的路径P0发生了异常,客户端切换到拥有较高权重的路径P1。如果P1也发生故障,则选择P2。

4,iSCSI更优路径选择

P0的路径已经恢复,那么P0的权重逐渐增加。P0的权重超过P1和P2的时候,就会选择切换回到P0路径上。

5,路径权重计算

现在有三条iSCSI路径p0,p1,p2,它们的最大权重分别是100,90,80。当前使用的路径p0的权重是100,如果发生异常,则把当前路径p0的权重减掉一半,则当前路径p0的权重变成50;那么客户端在三条路径中选择权重最高的路径p1作为最优路径,达到了高可用并选择可用的最优路径的效果。

同时,客户端周期性的探测各个路径的情况(例如使用inquiry查询,查询结果OK则证明路径正常工作),如果路径p0从异常中恢复,路径p0的权重逐渐增加。当路径p0的权重大于路径p1、路径p2的权重时,客户端自动切换到路径p0。

路径恢复后,权重是逐渐增加的,防止增长过快,造成权重大小变化比较剧烈,造成路径切换抖动。

6,虚拟化的实现

典型的使用场景是qemu使用iSCSI协议访问后端。那么实现上需要改动的几个地方:

a,因为更换路径(也就是T端的IP+PORT),所有需要有API来支持。所以需要修改libiscsi来支持。

b,周期性的探测后端,所以需在在qemu中启动timer来做probe。

c,默认只能给qemu配置一个T端的地址,所以需要开发额外的qmp命令来配置。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180601G1LHGO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券