写点什么

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

作者:YashanDB
  • 2024-08-06
    广东
  • 本文字数:1332 字

    阅读完需:约 4 分钟

问题现象

客户使用 VMware 虚拟机使用默认安装,部署 YashanDB 个人版,在掉电之后无法启动


操作系统:


Virtualization: VMware


Operating System: CentOS Linux 7 (Core)


CPE OS Name: cpe:/o:centos:centos:7


Kernel: Linux 3.10.0-1160.el7.x86_64


Architecture: x86-64


[yashan@localhost ~]$ nohup /home/yashan/yasdb_home/yashandb/23.1.1.100/bin/yasdb open -D /home/yashan/yasdb_data/db-1-1 &


[1] 6684


[yashan@localhost ~]$ nohup: ignoring input and appending output to ‘nohup.out’


[yashan@localhost ~]$ cat nohup.out


Starting instance nomount


Instance started


Starting instance open


[1]+ Segmentation fault (core dumped) nohup /home/yashan/yasdb_home/yashandb/23.1.1.100/bin/yasdb open -D /home/yashan/yasdb_data/db-1-1


问题单:客户测试库启动后很快就 Segmentation fault

问题的风险及影响

客户为个人环境,掉电后无法拉起,手动拉起会出现 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、分析出问题的堆栈位置 setGroupBlocksLsn COD_PANIC,head->lsn 是 undo block 的 lsn,而 assist->lsn 是系统全局的 lsn 自增得到的;


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



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



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



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



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


官网参考说明:


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


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


经验总结


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


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



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



用户头像

YashanDB

关注

全自研国产新型大数据管理系统 2022-02-15 加入

还未添加个人简介

评论

发布
暂无评论
【YashanDB数据库】VMware虚拟机使用默认安装,在掉电之后数据库无法启动_yashandb_YashanDB_InfoQ写作社区