40 KVM管理设备-配置磁盘IO悬挂

news/2024/7/20 16:05:28 标签: KVM, 虚拟化, 开源软件, linux, 运维

文章目录

    • 40 KVM管理设备-配置磁盘IO悬挂
      • 40.1 总体介绍
        • 40.1.1 概述
        • 40.1.2 应用场景
        • 40.1.3 注意事项和约束限制
      • 40.2 磁盘IO悬挂配置
        • 40.2.1 Qemu命令行配置
        • 40.2.2 xml配置方式

KVMIO_1">40 KVM管理设备-配置磁盘IO悬挂

40.1 总体介绍

40.1.1 概述

存储故障(比如存储断链)场景下,物理磁盘的IO错误,通过虚拟化层传给虚拟机前端,虚拟机内部收到IO错误,可能导致虚拟机内部的用户文件系统变成read-only状态,需要重启虚拟机或者用户手动恢复,这给用户带来额外的工作量。

这种情况下,虚拟化平台提供了一种磁盘IO悬挂的能力,即当存储故障时,虚拟机IO下发到主机侧时将IO悬挂住,在悬挂时间内不对虚拟机内部返回IO错误,这样虚拟机内部的文件系统就不会因为IO错误而变为只读状态,而是呈现为Hang住;同时虚拟机后端按指定的悬挂间隔对IO进行重试。如果存储故障在悬挂时间内恢复正常,悬挂住的IO即可恢复落盘,虚拟机内部文件系统自动恢复运行,不需要重启虚拟机;如果存储故障在悬挂时间内未能恢复正常,则上报错误给虚拟机内部,通知给用户。

40.1.2 应用场景

使用可能会发生存储面链路断链的云盘作为虚拟磁盘后端的场景。

40.1.3 注意事项和约束限制

  • 磁盘IO悬挂仅支持virtio-blk或virtio-scsi类型的虚拟磁盘。

  • 磁盘IO悬挂的虚拟磁盘后端一般为可能会发生存储面链路断链的云盘。

  • 磁盘IO悬挂可对读写IO错误分别使能,同一磁盘的读写IO错误重试间隔和超时时间使用相同配置。

  • 磁盘IO悬挂重试间隔不包含主机侧实际读写IO的开销,即两次IO重试操作实际间隔会大于配置的IO错误重试间隔。

  • 磁盘IO悬挂无法区分IO错误的具体类型(如存储断链、扇区坏道、预留冲突等),只要硬件返回IO错误,都会进行悬挂处理。

  • 磁盘IO悬挂时,虚拟机内部IO不会返回,fdisk等访问磁盘的系统命令会卡住,虚拟机内部依赖该命令返回的业务也会一直卡住。

  • 磁盘IO悬挂时,IO无法正常落盘,可能会导致虚拟机无法优雅关机,需要强制关机。

  • 磁盘IO悬挂时,无法读取磁盘数据,会造成虚拟机无法正常重启,需要先将虚拟机强制关机,等待存储故障恢复后在重新启动虚拟机。

  • 存储故障发生后,虽然存在磁盘IO悬挂,依然解决不了以下问题:

    1. 存储相关高级特性执行失败

      高级特性包括:虚拟磁盘热插、虚拟磁盘热拔、创建虚拟磁盘、虚拟机启动、虚拟机关机、虚拟机强制关机、虚拟机休眠、虚拟机唤醒、虚拟机存储热迁移、虚拟机存储热迁移取消、虚拟机创建存储快照、虚拟机存储快照合并、查询虚拟机磁盘容量、磁盘在线扩容、插入虚拟光驱、弹出虚拟机光驱。

    2. 虚拟机生命周期执行失败

  • 配置了磁盘IO悬挂的虚拟机发起热迁移时,应该在目的端磁盘的XML配置中带上与源端相同的磁盘IO悬挂配置。

40.2 磁盘IO悬挂配置

40.2.1 Qemu命令行配置

磁盘IO悬挂功能通过在虚拟磁盘设备上指定werror=retry rerror=retry进行使能,使用retry_intervalretry_timeout进行重试策略的配置。retry_interval为IO错误重试的间隔,配置范围为0-MAX_LONG,单位为毫秒,未配置时使用默认值1000ms;retry_timeout为IO错误重试超时时间,配置范围为0-MAX_LONG,0值表示不会发生超时,单位为毫秒,未配置时使用默认值0。

virtio-blk磁盘的磁盘IO悬挂配置如下:

-drive file=/path/to/your/storage,format=raw,if=none,id=drive-virtio-disk0,cache=none,aio=native \
-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,\
drive=drive-virtio-disk0,id=virtio-disk0,write-cache=on,\
werror=retry,rerror=retry,retry_interval=2000,retry_timeout=10000

virtio-scsi磁盘的磁盘IO悬挂配置如下:

-drive file=/path/to/your/storage,format=raw,if=none,id=drive-scsi0-0-0-0,cache=none,aio=native \
-device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,\
device_id=drive-scsi0-0-0-0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,write-cache=on,\
werror=retry,rerror=retry,retry_interval=2000,retry_timeout=10000

40.2.2 xml配置方式

磁盘IO悬挂功能通过在磁盘xml配置中指定error_policy='retry' rerror_policy='retry'进行使能。主要是配置上retry_intervalretry_timeout的值。retry_interval为IO错误重试的间隔,配置范围为0-MAX_LONG,单位为毫秒,未配置时使用默认值1000ms;retry_timeout为IO错误重试超时时间,配置范围为0-MAX_LONG,0值表示不会发生超时,单位为毫秒,未配置时使用默认值0。

virtio-blk磁盘的磁盘IO悬挂xml配置如下:

<disk type='block' device='disk'>
  <driver name='qemu' type='raw' cache='none' io='native' error_policy='retry' rerror_policy='retry' retry_interval='2000' retry_timeout='10000'/>
  <source dev='/path/to/your/storage'/>
  <target dev='vdb' bus='virtio'/>
  <backingStore/>
</disk>

virtio-scsi磁盘的磁盘IO悬挂xml配置如下:

<disk type='block' device='disk'>
  <driver name='qemu' type='raw' cache='none' io='native' error_policy='retry' rerror_policy='retry' retry_interval='2000' retry_timeout='10000'/>
  <source dev='/path/to/your/storage'/>
  <target dev='sdb' bus='scsi'/>
  <backingStore/>
  <address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

image-20230325175236608


http://www.niftyadmin.cn/n/399483.html

相关文章

利用Taro打造灵活的移动App架构

最近公司的一些项目需要跨端框架&#xff0c;技术老大选了Taro&#xff0c;实践了一段时间下来&#xff0c;愈发觉得Taro是个好东西&#xff0c;所以在本篇文章中稍微介绍下。 什么是Taro&#xff1f; Taro&#xff08;或称为Taro框架&#xff09;是一种用于构建跨平台应用程…

Java 中的异常类型、异常处理机制、最佳实践

Java 异常是一种在程序运行时可能出现的错误或异常状况。它们可以由多种因素引起&#xff0c;例如无效输入、网络连接失败或系统资源不足等。 Java 提供了内置的异常类和处理机制&#xff0c;以便在程序出现异常时能够进行恰当的处理和响应。本文将探讨 Java 中的异常类型、异…

《Java并发编程实战》课程笔记(十二)

CountDownLatch 和 CyclicBarrier&#xff1a;如何让多线程步调一致&#xff1f; 原始对账系统 对账系统的业务简化后&#xff1a; 首先用户通过在线商城下单&#xff0c;会生成电子订单&#xff0c;保存在订单库&#xff1b;之后物流会生成派送单给用户发货&#xff0c;派送…

磁盘配额与进阶文件系统管理(一)

磁盘配额Quota 用途 针对www server&#xff0c;例如 每个人网页空间的容量限制&#xff1b;针对mail server&#xff0c;例如 每个人的邮件空间限制&#xff1b;针对file server&#xff0c;例如 每个人最大可用的网络硬盘空间&#xff1b;限制某一群组所能使用的最大磁盘空…

C++之——类和对象

一、类的定义&#xff1a; 如下代码&#xff1a; class people {char* name;char* sex;int age; };class就是类的关键字。people就是这个类的名字,{}为类的主体&#xff0c;里面有成员&#xff0c;变量叫做成员变量&#xff0c;函数叫做成员函数。 c语言中的struct也可以作为…

第2章:SpringMVC的@RequestMapping注解

一、SpringMVC搭建框架 1.创建一个Maven程序的步骤 ①在pom.xml导入maven依赖 <!--打包方式是war--> <!--war 包通常用于网站&#xff0c;它是一个可以直接运行的 web 模块--> <packaging>war</packaging> <dependencies><!-- SpringMVC --…

es elasticsearch 十四 各种机制 评分机制 正序索引 解决跳跃结果问题 解决耗时过长问题 解决相同属性值都到一个地方

目录 评分机制 机制 查看评分实现如何算出来的explaintrue 分析能否被搜索到 Doc value 正排序索引 Query phase Fetch phase Preference 问题 解决跳跃结果问题 Timeout 到达时间直接返回&#xff0c;解决耗时过长问题 Routing 数据准确分配到某地&#xff0c;解决相…

事件循环机制、js宏任务和微任务

js代码的执行过程&#xff0c;是js引擎先编译再执行&#xff0c;编译完成两件事&#xff1a;创建执行上下文和生成可执行代码&#xff1b;编译阶段完成后&#xff0c;js引擎开始执行可执行代码&#xff1b; 一、事件循环概述 事件循环即Event Loop&#xff0c;分为两种,分别是…