如何解决Greenplum master node与seg node元数据不一致

作为分布式数据库,Greenplum的元数据经常(是真的,经常遇到)会出现些错误,典型的一个是master node与seg node元数据不一致,本文结合一个具体错误,介绍下解决的办法。

现象

使用gpcheckcat -p 5432 databasename检查数据库时,将报出类似如下的输出:

Relation oid: 12345678
Relation name: ns1.table1

    Name of test which found this issue: missing_extraneous_pg_class
    Name of test which found this issue: missing_extraneous_pg_attribute
    Name of test which found this issue: missing_extraneous_pg_type
        Missing relation metadata for {‘oid‘:12345678} on master (mdw:5432) seg65 (sdw20:40000) seg66 (sdw20:40001) seg67 (sdw20:40002) seg68 (sdw20:40003) seg69 (sdw21:40000) seg70 (sdw21:40001) seg71 (sdw21:40002) seg72 (sdw21:40003) seg73 (sdw22:40000) seg74 (sdw22:40001) seg75 (sdw22:40002) seg76 (sdw22:40003) seg77 (sdw23:40000) seg78 (sdw23:40001) seg79 (sdw23:40002) seg80 (sdw23:40003) seg81 (sdw24:40000) seg82 (sdw24:40001) seg83 (sdw24:40002) seg84 (sdw24:40003) seg85 (sdw25:40000) seg86 (sdw25:40001) seg87 (sdw25:40002) seg88 (sdw25:40003) 

分析

这个错误表示在master node以及错误中指出24个seg node(查询gp_segment_configuration元数据表会发现这些seg node都是primary node)中都已经没有了ns1.table1(relname=table1,oid=12345678)这个表的定义,也就是说pg_class,pg_attribute,pg_type这些元数据表都已经没有了此relation的定义。此时,尝试在master上drop ns1.table1会发现没有这个表。但是,剩余的seg node上仍然存在这个relation的定义。可以通过查询gp_segment_configuration找到剩余segment node。

解决

基本思路当然就是将残余的表定义drop掉。首先,需要从gp_segment_configuration中查到所有没在错误中列出的primary segment node的hostname和node;然后,分别登陆到这些segment node上drop掉ns1.table1。具体过程如下:

  • root登陆master host
  • 切换到Greenplum的管理员用户,比如gpadmin:
su - gpadmin
  • 查找所有primary segment node:
psql -d databasename -c "select hostname,port from gp_segment_configuration where role=‘p‘;"
  • 找到所有没在错误信息中列出的hostname+port,按照如下格式编写语句:
PGOPTIONS=‘-c gp_session_role=utility‘ psql -h hostname -p port  -d databasename -c ‘drop table if exists ns1.table1;‘
  • 在gpadmin用户下执行上一步生成的所有命令
  • 找到所有没在错误信息中列出的hostname+port,按照如下格式编写语句:
PGOPTIONS=‘-c gp_session_role=utility‘ psql -h hostname -p port  -d databasename -c ‘select * from pg_class where oid=12345678;‘
  • 在gpadmin用户下执行上一步生成的所有命令,确定每一条命令返回的都是0条记录
时间: 2024-10-19 03:12:10

如何解决Greenplum master node与seg node元数据不一致的相关文章

一个master、一个node、查看node节点是ip

一个master.一个node.查看node节点是ip # 安装顺序:先在test1 上安装完必要组件后,就开始在 test2 上单独安装node组件,实现node功能,再返回来配置test1加入集群,实现node功能 # 本实验 test1 节点不做安装kubelet组件.只有安装启动了kubelet才会生成csr,kube-apiserver通过csr请求后才会成为一个node.所以是node节点单独安装 # 注意:准备了三台,这三台都做了环境准备,但是k8s集群只是使用了 test1.te

一个master、一个node、查看node节点是主机名

一个master.一个node.查看node节点是主机名 # 安装顺序:先在test1 上安装完必要组件后,就开始在 test2 上单独安装node组件,实现node功能,再返回来配置test1加入集群,实现node功能 # 本实验 test1 节点不做安装kubelet组件.只有安装启动了kubelet才会生成csr,kube-apiserver通过csr请求后才会成为一个node.所以是node节点单独安装 # 注意:准备了三台,这三台都做了环境准备,但是k8s集群只是使用了 test1.t

Elasticsearch master node、 data node、 client node的区别与各自特点

es集群里的master node.data node和client node到底是怎么个意思,分别有何特点? master节点 主要功能是维护元数据,管理集群各个节点的状态,数据的导入和查询都不会走master节点,所以master节点的压力相对较小,因此master节点的内存分配也可以相对少些:但是master节点是最重要的,如果master节点挂了或者发生脑裂了,你的元数据就会发生混乱,那样你集群里的全部数据可能会发生丢失,所以一定要保证master节点的稳定性. data node 是负

node.js安装后输入“node -v”提示'node' 不是内部或外部命令,也不是可运行的程序的解决方法

换个电脑,重新搭配环境的时候遇到的问题.node.js已经在官网进行下载安装了,但是VScode里面显示不是内部的命令,也不是可运行的程序 但是在cmd控制台还是能查到的 借助网上的方法进行了测试和调配并没有成功,路径我也进行了配置了,不知道是哪里的问题,先在这里凑合着用吧 ps:windows+r----<  输入cmd-------<打开控制台(此处可以使用命令) 网站上的方法: https://blog.csdn.net/KingJulien2/article/details/73302

如何解决Greenplum的gpcheckcat关于persistent的错误

Greenplum的gpcheckcat是用来检查system catalog的一致性的命令,其中有专门针对磁盘文件的检查($GPHOME/bin/lib/gpcheckcat -R persistent -p 5432 databasename),主要是对于system catalog里关于磁盘文件的记录与实际磁盘文件的情况的一致性检查.本文结合一个实际错误介绍如何解决这类元数据错误. 现象 gpcheckcat的日志文件(比如/home/gpadmin/gpAdminLogs/gpcheck

hidden node and exposed node problem

Exposed node problem In wireless networks, theexposed node problem occurs when a node is prevented from sending packets to other nodes because of a neighboring transmitter. Consider an example of 4 nodes labeled R1, S1, S2, and R2, where the two rece

001 -- Circle LinkList, list initiate, add a new node, delete a node, and List traverse

#include <studio.h> #include <stdlib.h> typedef struct CLinkList { int data; struct CLinkList *next ; } node; /*initiate a circle list*/ void ds_init(node **pNode) { int item; node *temp; node *target; printf("please input the value of th

.NET程序员也学Node.js——初识Node.js

清明在石门休了八天假,一眨眼,4月又到中旬了...看到.NET在天朝彻底沦陷而又无能为力,我开始尝试去学习一些新的东西来充实自己,我自然是打死不会去学java的,没有为什么,于是乎,最近开始学习一些前端的开发技术,就让学习笔记来记录一下我的学习历程并同大家一起分享吧! 申明:我只是业余学着好玩的,顺便扩展一下视野,各位广大.NET同行不要被我带沟里去了,当然如果你想从事移动前端或者全栈开发的话还是有必要学习一下的. Node.js简介 Node.js 的推出,不仅从工程化的角度自动化掉更多琐碎费

JavaScript - Node.children和Node.childNodes的区别

写到这个也是因为群里的学长面试的时候遇到了这个问题,然后顺手分享了一下 首先是MDN里面对两个API的解释 children Node.children is a read-only property that returns a live HTMLCollection of the child elements of Node. childNodes The Node.childNodes read-only property returns a live collection of chil