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集群中涉及到多个配置文件的修改,并且在应 ...
随机推荐
- ORACLE FORALL介绍
ORACLE 10G OFFICIAL DOCUMNET ---------------------------------------------------------------------- ...
- java利用hdfs api进行上传下载操作
1.说明 最近项目中一部分大文件需要存储到hadoop的hdfs组件中,自己本地用3台centos7虚拟机搭建了一套集群.本地写点java代码测试一下. 代码部分改编自网络. 环境说明 一主二仆结构. ...
- Ansible Ad-hoc,命令执行模块
目录 Ad-hoc Ad-hoc简介 Ad-hoc命令说明 Ad-hoc示例 命令执行模块 1. command模块 2. shell模块 3. raw模块 4. script模块 Ad-hoc Ad ...
- 项目实战:Qt监测操作系统物理网卡通断v1.1.0(支持windows、linux、国产麒麟系统)
需求 使用Qt软件开发一个检测网卡的功能. 兼容windows.linux,国产麒麟系统(同为linux) Demo windows上运行: 国产麒麟操作上运行: 功 ...
- 一文搞懂I/O模型
目录 基础知识 内核 内核空间&用户空间 缓存IO 文件和流 文件描述符 I/O模型 同步阻塞 I/O(blocking IO) 同步非阻塞 I/O(blocking IO) I/O 多路复用 ...
- Redis动态配制,限内存,免重启
p.p1 { margin: 0; font: 14px Menlo; color: rgba(0, 255, 255, 1); background-color: rgba(0, 0, 0, 0.8 ...
- 【Azure 媒体服务】记使用 Media Service 的官网示例代码 Audio Analyzer 出现卡顿在 Creating event processor host .. 直到 Timeout 问题
问题描述 在使用Azure Media Service的官网示例 (media-services-v3-java --> AudioAnalytics --> AudioAnalyzer ...
- curl比较有用的参数
精选参数: --include // -i curl的输出中包含http头信息--verbose // 比-i更加丰富,>表示请求的信息, <表示curl接收的信息 *表示curl额外提 ...
- java GUI 快速入门
java 中编写 GUI 有两中工具包,分别为 AWT.Swing. Swing 是 AWT 的拓展,Swing 具有比 AWT 丰富的组件和方法. AWT 和 Swing 都能跨平台使用:AWT 会 ...
- Python函数对象与闭包函数
[一]函数对象 函数对象指的是函数可以被当做 数据 来处理,具体可以分为四个方面的使用 [1]函数可以被引用 def add(x,y): return x + y func = add res = f ...