前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[qemu][iSCSI]一种基于权重自动选择最优iSCSI访问路径的方法

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

作者头像
皮振伟
发布2018-07-23 17:45:54
1.2K0
发布2018-07-23 17:45:54
举报
文章被收录于专栏:皮振伟的专栏皮振伟的专栏

前言: 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命令来配置。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AlwaysGeek 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档