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

news/2025/3/13 2:38:47/文章来源:https://www.cnblogs.com/YashanDB/p/18345103

问题现象

客户使用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、对虚拟磁盘需要设置独立-永久(创建虚拟机的时候才能修改, 启动之后不能修改):

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/778732.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 Kubernetes 中部署 Alertmanager

AlertManager 是一个开源警报系统,与 Prometheus 监控系统配合使用。本博客是 Prometheus Kubernetes 教程系列的一部分。在我们之前的文章中,我们研究了以下内容:在 Kubernetes 上部署 Prometheus 部署 Kube State Metrics在本指南中,我将介绍 Alertmanager 设置及其与 Pr…

华为云IoTDA控制台全新升级,来体验35万+开发者使用的平台

摘要:现在体验华为云IoT全新控制台,赢无线耳机等精美好礼 本文分享自华为云社区《华为云IoTDA控制台全新升级,邀您有奖体验!| 云声建议 - 华为云IoTDA专属活动(8月)》,作者:华为IoT云服务。 作为万物上云的物联网底座,华为云IoT物联网平台(设备接入IoTDA)目前接入的…

第三章 栈、队列和数组

栈 栈的基本概念 栈的定义 栈是只允许在一端进行插入或删除操作的线性表栈顶:线性表允许进行插入删除的那一端 栈底:固定的,不允许进行插入和删除的另一端 空栈:不含任何元素的空表栈的操作特性可以概括为:后进先出(LIFO) 栈的基本操作 InitStack(&S)//初始化栈,构…

第二章 线性表

线性表的定义和基本操作 线性表的定义 线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列,其中n为表长,当n=0时线性表是一个空表,若当L命名线性表,则其一般表示为L=(a1,a2,.…,an)ai 是线性表中“第i个”元素线性表中的位序 a1 是表头元素,an 是表尾元素 出第一个…

zabbix“专家坐诊”第250期问答

问题一 Q:乐维监控社区版监控交换机,能统计出端口的IP流量排名吗? A:社区版没有这个功能 ,正式版,流量报表可以实现端口IP流量排行。问题二 Q:我看了一下乐维有事件平台汇总的功能,可以接第三方的告警吗? A:可以的。 Q:有没有操作手册我看看,或者你们是基于什么做的…

uniapp中的websocket的研究,以及相关的封装

官方文档---官方文档写的跟屎一样 https://uniapp.dcloud.net.cn/api/request/websocket.html相关博客 https://www.cnblogs.com/sunnyeve/p/16757633.html

aspnet .core 网站默认不支持文件下载

将txt文件和rar文件都放到 wwwroot 目录下,会发现前者可以正常下载而后者不行。其实是需要在初始化的地方进行设置: builder.WebHost.UseKestrel(option =>{ option.ListenAnyIP(config.Port);}); WebApplication app = builder.Build(); var httpContextAccessor = ap…

2024FIC线上初赛WP

感觉需要总结一些技巧了2024FIC线上初赛WP 挖个坑,哪天想起来了补一下艰难困苦,玉汝于成

部署CPU与GPU通用的tensorflow:Anaconda环境

本文介绍在Anaconda环境中,下载并配置Python中机器学习、深度学习常用的新版tensorflow库的方法~本文介绍在Anaconda环境中,下载并配置Python中机器学习、深度学习常用的新版tensorflow库的方法。在之前的两篇文章Python TensorFlow深度学习回归代码:DNNRegressor与Python T…

采购订单列表根据条件设置行背景色

方式一:通过Python脚本实现 import clr clr.AddReference(System) clr.AddReference(Kingdee.BOS) clr.AddReference(Kingdee.BOS.Core) clr.AddReference(System.Drawing) clr.AddReference(System.Collections)from System import * from System.Collections import * from…

采购订单打开单据时表格行设置颜色

列表根据条件设置背景色import clr clr.AddReference(System) clr.AddReference(Kingdee.BOS) clr.AddReference(Kingdee.BOS.Core) clr.AddReference(System.Drawing) clr.AddReference(System.Collections)from System import * from System.Collections import * from Syst…

ArgoWorkflow 教程(一)--DevOps 另一选择?云原生 CICD 初体验

本文主要记录了如何使用 ArgoWorkflow 构建流水线,以及 ArgoWorkflow 中 的 Workflow、Template 等概念模型。本文主要分析以下问题:1)如何创建流水线 2)Workflow、Template、template 自己的引用关系 3)Workflow 和 Template 之间的参数传递问题 4)ArgoWorkflow 流水线…