KingbaseES V8R6 集群运维案例-- sys_internal.init.*文件引起sys_basebackup失败
案例说明:
KingbaseES V8R6集群在执行‘repmgr standby clone’或sys_basebackup克隆备库时出现如下图相关sys_internal.init文件错误:

适用版本:
KingbaseES V8R6
二、pg_internal.init文件原理
如上图所示,此故障和pg_internal.init文件有关,下面介绍有关此文件的工作机制(摘自pg官方文档)。
pg_internal.init: 用于缓存系统表,加快系统表读取速度(每个用户创建的数据库目录下也有同名文件)。
PostgreSQL中存在两种高速缓存:syscache和relcache。syscache主要用于缓存系统表元组;relcache中包含所有访问过的表的模式信息(包含系统表)。这两个缓存在数据库中不是共享的,是每个进程独有的,通过共享消息队列来进行同步。
relcache,初始化在initpostgres时完成;其中存储的内容(RelationData)会记录到本地文件pg_internal.init中;失效和刷新常发生于执行heap_delete和heap_update类似操作后,会有对应的机制进行缓存刷新。
如下图所示,初始化postgres过程:

启动postgres服务进程:初始化relcache管理环境
- 通过"global/pg_filenode.map"、"global/pg_internal.init"文件初始化共享catalog:"pg_catalog",将系统表"pg_database"、"pg_authid"、"pg_auth_members"等的描述符信息加载到relcache里。"global/pg_filenode.map"文件里存放的是数据库中关系和文件节点的映射信息,"global/pg_internal.init"文件里存放的是"pg_class"、"pg_attribute"、"pg_proc"、"pg_type"等系统关系信息。
- 然后完成设置数据库快照
- 根据hba文件完成客户端认证
- 从pg_database获取客户端要访问的数据库的对应元组
- 根据要访问的数据库ID,加载该数据库本地的"pg_filenode.map"、"pg_internal.init"文件完成初始化。加载"pg_class"、"pg_attribute"、"pg_proc"、"pg_type"等及其索引信息。如果从相关"pg_filenode.map"、"pg_internal.init"文件初始化失败,系统会从硬编码的代码中初始化基础设施相关关系信息。不管加载那个文件,完成相关信息初始化后如有必要将重写该文件。重写时先写临时文件,写完后改文件名为正式文件。这样做是为了避免并发的后台进程读相关文件时崩溃。关于文件名举个例子,例如文件"data/global/pg_internal.init",对应的临时文件名是"data/global/pg_internal.init.pid",最后的"pid"是当前进程ID。
- 调用CheckMyDatabase方法检查当前用户的数据库访问权限,从cache里的pg_database取当前数据库的相关属性字段。
- 调用InitializeClientEncoding方法初始化客户端字符编码。
- 调用pgstat_bestart方法在PgBackendStatus设置本进程状态。至此pg服务进程的初始化工作告一段落。
二、查看KingbaseES数据库sys_internal.init文件
1)global目录下系统表cache文件

2)base目录下系统表cache文件

如上图所示,在global或base目录下都有系统表的cache文件sys_internal.init,对于此文件管理方式为,不管加载那个文件,完成相关信息初始化后如有必要将重写该文件。重写时先写临时文件,写完后改文件名为正式文件。这样做是为了避免并发的后台进程读相关文件时崩溃。文件"data/global/pg_internal.init",对应的临时文件名是"data/global/pg_internal.init.pid",最后的"pid"是当前进程ID。如下图所示,在备库克隆过程中读取到了sys_internal.init的临时文件,导致clone失败。

3)查看主库下sys_internal.init临时文件

三、问题解决方案
sys_internal.init.pid,是sys_internal.init文件在写入时,产生的临时文件,写入成功后会改名为正式文件,此文件的存在有可能是数据库系统非正常关机导致临时文件没有被及时清理所致,可以通过手工方式将此类文件删除。删除此类文件后,重新执行备库的clone,clone成功。

KingbaseES V8R6 集群运维案例-- sys_internal.init.*文件引起sys_basebackup失败的更多相关文章
- KingbaseES V8R6集群运维案例之---repmgr standby promote应用案例
案例说明: 在容灾环境中,跨区域部署的异地备节点不会自主提升为主节点,在主节点发生故障或者人为需要切换时需要手动执行切换操作.若主节点已经失效,希望将异地备机提升为主节点. $bin/repmgr s ...
- KingbaseES V8R3集群运维案例之---主库系统down failover切换过程分析
案例说明: KingbaseES V8R3集群failover时两个cluster都会触发,但只有一个cluster会调用脚本去执行真正的切换流程,另一个有对应的打印,但不会调用脚本,只是走相关的 ...
- KingbaseES V8R3集群运维案例之---kingbase_monitor.sh启动”two master“案例
案例说明: KingbaseES V8R3集群,执行kingbase_monitor.sh启动集群,出现"two master"节点的故障,启动集群失败:通过手工sys_ctl启动 ...
- KingbaseES V8R3集群运维案例之---cluster.log ERROR: md5 authentication failed
案例说明: 在KingbaseES V8R3集群的cluster.log日志中,经常会出现"ERROR: md5 authentication failed:DETAIL: password ...
- KingbaseES V8R3集群运维案例之---用户自定义表空间管理
案例说明: KingbaseES 数据库支持用户自定义表空间的创建,并建议表空间的文件存储路径配置到数据库的data目录之外.本案例复现了,当用户自定义表空间存储路径配置到data下时,出现的故障问 ...
- kingbaseES V8R6集群备份恢复案例之---备库作为repo主机执行物理备份
案例说明: 此案例是在KingbaseES V8R6集群环境下,当主库磁盘空间不足时,执行sys_rman备份,将集群的备库节点作为repo主机,执行备份,并将备份存储在备库的磁盘空间. 集群架构 ...
- KingbaseES V8R6集群外部备份案例
案例说明: 本案例采用sys_backup.sh执行物理备份,备份使用如下逻辑架构:集群采用CentOS 7系统,repo采用kylin V10 Server. 一主一备+外部备份 此场景为主备双机常 ...
- KingbaseES V8R6集群管理运维案例之---repmgr standby switchover故障
案例说明: 在KingbaseES V8R6集群备库执行"repmgr standby switchover"时,切换失败,并且在执行过程中,伴随着"repmr stan ...
- KingbaseES V8R6集群维护案例之---停用集群node_export进程
案例说明: 在KingbaseES V8R6集群启动时,会启动node_exporter进程,此进程主要用于向kmonitor监控服务输出节点状态信息.在系统安全漏洞扫描中,提示出现以下安全漏洞: 对 ...
- KingbaseES V8R6集群维护之--修改数据库服务端口案例
案例说明: 对于KingbaseES数据库单实例环境,只需要修改kingbase.conf文件的'port'参数即可,但是对于KingbaseES V8R6集群中涉及到多个配置文件的修改,并且在应 ...
随机推荐
- Table布局
Table布局 <table>最常用的也是最正确的使用方法是制作表格,由于其对占据的空间有着划分的作用,便可以使用<table>来布局. 实例 实现一个简单的布局,将表格的bo ...
- Swoole从入门到入土(13)——HTTP服务器[配置]
开篇之前,先复习一下如何为一个server进行配置的设置: $server->set(array( 'key' => 'value' )); 配置说明: upload_tmp_dir:设置 ...
- 使用yum 报错 :This system is not registered with RHN
解决办法:(假定你已安装yum,且网络畅通)更改yum的源, 即更换/etc/yum.repos.d/rhel-debuginfo.repo 这个文件.首先备份,如下所示: [root@localho ...
- spring boot中配置网页语言国际化
项目地址:https://gitee.com/indexman/spring_boot_in_action 开发步骤 1.编写国际化配置文件 场景是给登录页面 login.html添加国际化支持. 2 ...
- 《Similarity-based Memory Enhanced Joint Entity and Relation Extraction》论文阅读笔记
代码 原文 摘要 文档级联合实体和关系抽取是一项难度很大的信息抽取任务,它要求用一个神经网络同时完成四个子任务,分别是:提及检测.共指消解.实体分类和关系抽取.目前的方法大多采用顺序的多任务学习方式, ...
- Java 客户信息管理软件 (面向对象 封装 总结)
1 package com.bytezero.cim.bean; 2 3 /** 4 * 5 * @Description Customer为实体对象,用来封装客户信息 6 * @author Byt ...
- Java对象引用和内存管理的细节
在Java中,当局部变量(比如方法参数)的作用域结束时,这个局部变量的引用确实不再存在,但这并不意味着它引用的对象会被销毁.对象的销毁是由Java的垃圾回收器(Garbage Collector, G ...
- 用几张图实战讲解MySQL主从复制
本文分享自华为云社区<结合实战,我为MySQL主从复制总结了几张图!>,作者: 冰 河. MySQL官方文档 MySQL 主从复制官方文档链接地址如下所示: http://dev.mysq ...
- Mysql使用limit深度分页优化
1.背景: mysql使用select * limit offset, rows分页在深度分页的情况下.性能急剧下降. 例如:select * 的情况下直接⽤limit 600000,10 扫描的是约 ...
- 我的Java面试资料推荐
看法 每年去大厂试试水,借此来评估自己的能力.价值和不足,或许还能拿到一个好offer,是个合格程序员的职业表现 大厂面试,基本都是:先过算法,检验面试人的智商和逻辑能力:之后才考察语言.设计.中间件 ...