VMware虚拟机使用默认安装, 在掉电之后数据库无法启动

首页    知识库    常见问题    VMware虚拟机使用默认安装, 在掉电之后数据库无法启动

问题现象

2024/06/05 17:08 一线反馈

image2024-6-13_20-36-18

 

问题的风险及影响

客户为个人环境,掉电后无法拉起,手动拉起会出现coredump,影响个人使用

 

问题影响的版本

YashanDB版本:

YashanDB Server Personal Edition Release 23.1.1.100 x86_64 0e623bd

 

问题发生原因

VMware因为涉及虚拟化层,存在一些特有机制和考量。VMware使用缓存来提高磁盘操作速度,包括读缓存和写缓存。写操作可能先写入缓存,然后根据策略决定何时将数据落盘。

在默认安装模式下,数据不会实时落盘(实测方式:可以在虚拟机中新增文件,随机写入内容,观察虚拟机文件修改时间是否发生变化,可以确认文件没有实时写入物理磁盘)。

因为客户环境中的磁盘文件落盘不是实时,掉电过程出现异常,导致undo中的lsn比ctrl中的lsn大的情况,进而导致数据库无法启动。

 

解决方法及规避方式

因为是个人环境,没有真实数据,重新安装新版本的YashanDB。

 

问题分析和处理过程

1、客户反馈是掉电,DOUBLE_WRITE_ENABLED默认为TRUE,一线反馈客户没有修改该参数

2、系统的lsn先写入ctrl文件,再写入undo文件,在db启动的时候系统全局的lsn从ctrl文件中读取,逻辑上确保undo的lsn比系统的lsn小;

3、发现VMware虚拟机默认安装为虚拟磁盘。在默认安装方式下,在虚拟机中新增文件,随机写入内容,观察虚拟机文件修改时间并未发生变化,可以确认文件没有实时写入物理磁盘。

img2

在默认安装模式下,掉电之后,虚拟机出现磁盘文件损坏,无法进入虚拟机:

img3

4、VMware因为涉及虚拟化层,存在一些特有机制和考量。 VMware使用缓存来提高磁盘操作速度,包括读缓存和写缓存。写操作可能先写入缓存,然后根据策略(如ESXi的磁盘调度器策略)决定何时将数据落盘。实测使用“强制写入”策略(VMware的“独立-永久”磁盘模式)可确保数据立即写入,以提高数据安全性。

img4

5、因为客户环境中的磁盘文件落盘不是实时, 掉电过程出现异常, 导致undo中的lsn比ctrl中的lsn大的情况, 进而导致数据库无法启动。

官网参考说明:

更改虚拟硬盘节点和模式设置 (VMware.com)

在物理磁盘或未使用的分区上安装客户机操作系统 (VMware.com)

 

经验总结

1、VMware虚拟机,使用物理磁盘。

2、对虚拟磁盘需要设置独立-永久(创建虚拟机的时候才能修改, 启动之后不能修改):

img5

配置成功, 在首页即可看到对应的标志:

img6

浏览量:0