上一个话题讨论了vSphere故障排除的网络相关典型场景,本篇内容探讨一下存储相关的典型故障场景。
首先我们简单回顾一下vSphere所支持的常见的存储类型:DAS,NAS(NFS),SAN(iSCSI,FC和FCoE),这些存储的连接协议不一样,有FC网络和IP网络之分,但是不管什么网络,都有可能存在ESXi主机和存储连接问题导致存储不可访问,这个时候需要检查主机和存储之间的链路问题,但是今天我们重点讨论一下多路径的故障场景。
那究竟什么是多路径呢?我们来看张图:(拿iSCSI举例)
在上图中,主机和iSCSI存储的连接可以通过独立硬启动器(HBA卡)、非独立硬启动器(带有启动器功能的网卡)和软启动器(VMkernel内的软适配器)来实现。实现多路径的目的是为了提高冗余性和负载均衡。
再普及一下,VMkernel中自带的多路径算法有三个:Round Robin(循环)、MRU(最近使用)和Fixed(固定),分别针对不同的存储控制器类型,同时vSphere还支持第三方的多路径插件,比如EMC的Powerpath等,但是有可能是收费的。需要在ESXi的shell中通过命令行进行安装。
让我们再回到上边的iSCSI连接的拓扑图,对于独立硬启动器来说,只要安装多张HBA卡,通过多个物理交换机连接到存储的两个控制器就可以轻松实现多路径。但是对于非独立硬启动器或者软启动器来说,相对操作复杂一点,首先创建两个VMkernel端口(假如在一个虚拟交换机上),其次将这两个VMkernel端口所在的端口组分别绑定一个物理网卡(其中一个网卡设置为avtive,另一个设置为unused),最后将这两个VMkernel端口绑定在软适配器上,就完成了多路径设置,如下图:
那么回到正题,如果在存储路径出现故障时,就会影响虚拟机业务,本篇重点探讨一下常见的两个关于存储路径的故障:PDL(永久性设备丢失-Permanent Device Loss )和APD(所有路径失败-All Paths Down ),在ESXi主机的日志:/var/log/vmkernel.log 中可能会出现这样的错误。
PDL(永久性设备丢失-Permanent Device Loss )
如果 ESXi 主机永久无法使用某个存储设备,则会将其视为处于PDL状况。如果存储阵列确定设备永久无法使用,会向 ESXi 主机发送 SCSI 感知代码。通过感知代码,主机可识别设备已发生故障,并将其状态注册为 PDL。必须在设备的所有路径上都收到感知代码,才能将设备视为永久丢失。注册设备的 PDL 状态后,主机将停止尝试与设备重新建立连接或向其发出命令,以避免受阻或无响应。
出现PDL现象的可能原因有:
-
存储设备被意外移除
-
存储设备唯一ID变化
-
存储设备出现不可恢复的硬件故障
-
存储设备空间耗尽
在Web Client上会出现以下现象:
-
Datastores 不可访问
-
所有存储路径显示为“dead”状态
如果出现了PDL,有可能需要重新挂载设备,甚至有可能需要从虚拟机的备份数据进行恢复。如果设备不存在打开的连接或者在最后连接关闭之后,主机将自动移除 PDL 设备和通向该设备的所有路径。通过将高级主机参数 Disk.AutoremoveOnPDL 设置为 0可禁用路径的自动删除功能。
如果设备通过 PDL 条件返回,则主机可以发现该设备,但会将其视为新设备。不保证已恢复设备上虚拟机的数据一致性。
如果存储设备发生永久性故障,无法返回相应的 SCSI 感知代码或 iSCSI 登录拒绝,则主机无法检测 PDL 状况,而是继续将设备连接问题视为 APD。
以下是 VMkernel 日志中 SCSI 感知代码的示例,表明设备处于 PDL 状态。
H:0x0 D:0x2 P:0x0 Valid sense data:0x5 0x25 0x0 or Logical Unit Not Supported
APD(所有路径失败-All Paths Down )
如果存储设备在未指定的一段时间内对 ESXi 主机不可用,则被视为处于APD状况。与PDL现象相反,APD现象是暂时的,有可能设备会在短暂时间之内变的可用。
出现APD的可能原因有:
-
存储设备以不可控制的方式被移除
-
VMkernel长时间检测不到存储设备的连接线
-
连接存储的网络连接全部中断
在Web Client中也会显示所有的存储路径显示为"dead"状态。
为了防止出现APD现象,ESXi主机可以设置两个高级参数来处理APD:
-
全局设置:Misc.APDHandlingEnable
默认值是1。
主机不断重新尝试发出的命令,以便重新建立与设备之间的连接。如果主机命令在较长一段时间内无法重新尝试,则主机及其虚拟机可能会存在性能问题以及潜在无法响应的风险。
为了避免出现这些问题,主机使用默认的 APD 处理功能。当设备进入 APD 状况时,系统便会立即打开定时器,并允许主机在限定时间段内继续重试非虚拟机命令。
如果禁用了 APD 处理功能,主机将无限期持续重试发出命令,尝试重新连接到 APD 设备。该行为可能导致主机上的虚拟机超过其内部 I/O 超时值而无响应或发生故障。主机可能与 vCenter Server 断开连接。
-
超时设置:Misc.APDTimeout
默认值是140秒。可以输入介于 20 和 99999 秒之间的值。
这通常长于大部分设备从连接丢失恢复所需的时间。如果设备在此时间内可用,主机及其虚拟机则会继续运行,而不会遭遇任何问题。在设备进入 APD 状况后,计时器会立即启动。
如果设备没有恢复并且超时时间结束,则主机停止重新尝试,并终止任何非虚拟机 I/O。主机会将 APD 设备标记为无法访问,并将所有挂起或新的非虚拟机 I/O 标记为失败,但是虚拟机 I/O 将继续重试。
***************我是分割线***************
以上我们讨论了常见的PDL和APD的存储故障,但是假如真的遇到了这两个故障,vSphere有没有一些可用性的保护机制呢?当然有!
从vSphere 6.0开始,vSphere HA功能可以针对这两个错误进行自动的检测并对受影响的虚拟机进行高可用保护。因为在VMkernel里有一个组件VMCP(虚拟机组件保护)默认是启动的,用来检测PDL和APD。
PDL故障检测:
默认是禁用的,当启用时可以设置把受影响的虚拟机关掉,vSphere HA就会把这些虚拟机在其他主机重新启动。
APD故障检测:
默认是禁用的,启用时可以设置把受影响的虚拟机关掉,vSphere HA就会把这些虚拟机在其他主机重新启动。同时也可以不做任何动作但是记录一个事件。另外,在重启虚拟机时也分激进和保守两个选择:激进指的是不管其他主机是否可以连接到存储,受影响的虚拟机都会发生故障切换;保守指的是如果其他主机无法连接到存储,就不会对受影响的虚拟机进行故障切换,除非其他有主机可以访问到存储。
在上图中还有一个选项:恢复响应。默认是禁用,可以设置为“Reset VMs”,该功能指的是:在APD恢复响应超时时间(默认3分钟,上图所示)结束之前,APD故障解决了,vSphere HA是什么响应。可以禁止响应,也可以重置虚拟机。
另外,恢复响应超时时间默认是3分钟,该时间指的是:APD超时时间(如前半篇所述,默认140秒)结束后,再等待的超时时间(默认3分钟)。如果过了这两个超时时间之和(320秒),则会触发vSphere HA针对APD的故障响应(关闭虚拟机并在其他主机重启)。
关于VMCP对PDL和APD的故障处理和响应,如下的流程图描述的非常详细,请参考:
以上就是关于PDL和APD的常见存储故障,希望你能从中有所收获。