[qemu][iSCSI]一种基于权重自动选择最优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命令来配置。

原文发布于微信公众号 - AlwaysGeek(gh_d0972b1eeb60)

原文发表时间:2018-06-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python中文社区

Django 博客教程(三):创建应用和编写数据库模型

專 欄 ❈追梦人物,Python中文社区专栏作者。电子科技大学计算机学院研究生,从事大数据分析研究方向。主要使用 Python 语言进行相关数据的分析,熟练使...

2089
来自专栏大魏分享(微信公众号:david-share)

AIX 下磁盘 I/O 性能分析

磁盘 I/O 的概念 I/O的概念,从字义来理解就是输入输出。操作系统从上层到底层,各个层次之间均存在 I/O。比如,CPU 有 I/O,内存有 I/O, VM...

3779
来自专栏大眼瞪小眼

操作系统常用算法

介绍:又称为高级调度或长程调度,调度对象是作业。根据作业控制块(JCB)中的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中...

4451
来自专栏Golang语言社区

【译】用Go实现一个静态博客生成器

静态站点生成器是一种工具,给一些输入(例如,markdown),使用HTML,CSS和JavaScript生成完全静态的网站。 为什么这很酷?一般来说,搭建一个...

6454
来自专栏Small Code

【TensorFlow | 升级】TensorFlow 1.0 发布

NOW 首届 TensorFlow 开发者大会(TensorFlow Dev Summit)已于美国时间昨日召开,YouTube 还进行了直播。更重要的是,Te...

20810

控制MongoDB中的集群分片

分片标记是MongoDB 2.2.0版中的一项新功能。它应该强制写入到本地数据中心,但也可以用来将集合固定到一个分片或一组分片。

2137
来自专栏数据和云

内存为王:DBIM RAC Share Nothing架构的挑战和解决方案

陈焕生 Oracle Real-World Performance Group 成员,senior performance engineer,专注于 OLTP...

2825
来自专栏沃趣科技

Oracle并行基础

Oracle并行基础 概述 ? Oracle企业版有一项非常厉害的技术:并行查询,也就是说一个语句可以雇佣多个服务器进程(parallel slaves也叫PX...

4707
来自专栏沃趣科技

Oracle压缩黑科技(三):OLTP压缩

原文链接:https://www.red-gate.com/simple-talk/sql/oracle/compression-in-oracle-part-...

3707
来自专栏机器学习算法原理与实践

scikit-learn 和pandas 基于windows单机机器学习环境的搭建

    很多朋友想学习机器学习,却苦于环境的搭建,这里给出windows上scikit-learn研究开发环境的搭建步骤。

822

扫码关注云+社区

领取腾讯云代金券