98 greenplum 集群搭建过程中碰到的几个问题

前言

最近有搭建 greenplum 集群的需求 

然后 在搭建的过程中碰到了一些问题, 还是有一些时间开销

并且问题也稍微有些复杂, 因此记录一下

 

 

1. Do not have enough valid segments to start the array.

报错日志信息如下 

20220408:14:15:29:021638 gpstart:gp1:gpadmin-[INFO]:-Master Started...
20220408:14:15:29:021638 gpstart:gp1:gpadmin-[INFO]:-Shutting down master
20220408:14:15:30:021638 gpstart:gp1:gpadmin-[INFO]:-Commencing parallel segment instance startup, please wait...
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[INFO]:-Process results...
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[ERROR]:-No segment started for content: 2.
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[INFO]:-dumping success segments: ['localhost.localdomain:/data/gpdb/pdata1/gpseg0:content=0:dbid=2:role=p:preferred_role=p:mode=n:status=u', 'localhost.localdomain:/data/gpdb/pdata2/gpseg1:content=1:dbid=3:role=p:preferred_role=p:mode=n:status=u']
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[INFO]:-----------------------------------------------------
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[INFO]:-DBID:4  FAILED  host:'localhost.localdomain' datadir:'/data/gpdb/pdata1/gpseg2' with reason:'Segment data directory does not exist for: '/data/gpdb/pdata1/gpseg2''
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[INFO]:-DBID:5  FAILED  host:'localhost.localdomain' datadir:'/data/gpdb/pdata2/gpseg3' with reason:'Segment data directory does not exist for: '/data/gpdb/pdata2/gpseg3''
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[INFO]:-----------------------------------------------------
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[INFO]:-----------------------------------------------------
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[INFO]:-   Successful segment starts                                            = 2
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[WARNING]:-Failed segment starts                                                = 2   <<<<<<<<
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[INFO]:-   Skipped segment starts (segments are marked down in configuration)   = 0
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[INFO]:-----------------------------------------------------
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[INFO]:-Successfully started 2 of 4 segment instances <<<<<<<<
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[INFO]:-----------------------------------------------------
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[WARNING]:-Segment instance startup failures reported
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[WARNING]:-Failed start 2 of 4 segment instances <<<<<<<<
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[WARNING]:-Review /home/gpadmin/gpAdminLogs/gpstart_20220408.log
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[INFO]:-----------------------------------------------------
20220408:14:15:31:021638 gpstart:gp1:gpadmin-[INFO]:-Commencing parallel segment instance shutdown, please wait...
20220408:14:15:32:021638 gpstart:gp1:gpadmin-[ERROR]:-gpstart error: Do not have enough valid segments to start the array.

 

问题分析 

这里观察一个细节, 启动成功的两个 segment 是 localhost.localdomain:/data/gpdb/pdata1/gpseg0 和 localhost.localdomain:/data/gpdb/pdata2/gpseg1
然后 启动失败的两个 segment 是 localhost.localdomain:/data/gpdb/pdata1/gpseg2 和 localhost.localdomain:/data/gpdb/pdata2/gpseg3
但是 实际我们期望的应该是 gp2:/data/gpdb/pdata1/gpseg0 和 gp2:/data/gpdb/pdata2/gpseg1 以及 gp3:/data/gpdb/pdata1/gpseg2 和 gp3:/data/gpdb/pdata2/gpseg3
因为可能涉及到需要 ssh 到对应的主机上面执行 启动的相关命令
但是由于 hostname 本身存在问题, 导致 ssh 的时候出现问题
此处有一些不太明晰的地方, 为什么 gp2 所在的机器 两个 segment 启动成功了?
从日志中可以看到的是 在一个地方 ssh 到了 gp2 所在的机器

 

gpstart 启动 segments 

相关代码
bin/gpstartself.gparray = GpArray.initFromCatalog(self.dburl, utility=True)// 省略部分代码segmentStartResult = segmentStartOp.startSegments(self.gparray, segmentsToStart, startMode, self.era)
gparray.initFromCatalogSELECT dbid, content, role, preferred_role, mode, status, hostname, address, port, datadir FROM pg_catalog.gp_segment_configuration ORDER BY content, preferred_role DESC然后通过这个查询结果封装 gparray
# 然后通过 hostname, 以及 datadir 的相关配置拿去 远程执行 pg_ctl 命令20220409:15:12:18:007540 gpsegstart.py_gp3:gpadmin:gp3:gpadmin-[DEBUG]:-[worker1] finished cmd: Starting seg at dir /data/gpdb/pdata2/gpseg3 cmdStr='env GPSESSID=0000000000 GPERA=ea7fa135b0ce8dae_220409151208 $GPHOME/bin/pg_ctl -D /data/gpdb/pdata2/gpseg3 -l /data/gpdb/pdata2/gpseg3/pg_log/startup.log -w -t 600 -o " -p 6001 " start 2>&1'  had result: cmd had rc=0 completed=True halted=False20220409:15:12:18:007540 gpsegstart.py_gp3:gpadmin:gp3:gpadmin-[DEBUG]:-[worker0] finished cmd: Starting seg at dir /data/gpdb/pdata1/gpseg2 cmdStr='env GPSESSID=0000000000 GPERA=ea7fa135b0ce8dae_220409151208 $GPHOME/bin/pg_ctl -D /data/gpdb/pdata1/gpseg2 -l /data/gpdb/pdata1/gpseg2/pg_log/startup.log -w -t 600 -o " -p 6000 " start 2>&1'  had result: cmd had rc=0 completed=True halted=False20220409:15:12:17:008990 gpsegstart.py_gp2:gpadmin:gp2:gpadmin-[DEBUG]:-[worker0] finished cmd: Starting seg at dir /data/gpdb/pdata1/gpseg0 cmdStr='env GPSESSID=0000000000 GPERA=ea7fa135b0ce8dae_220409151208 $GPHOME/bin/pg_ctl -D /data/gpdb/pdata1/gpseg0 -l /data/gpdb/pdata1/gpseg0/pg_log/startup.log -w -t 600 -o " -p 6000 " start 2>&1'  had result: cmd had rc=0 completed=True halted=False20220409:15:12:17:008990 gpsegstart.py_gp2:gpadmin:gp2:gpadmin-[DEBUG]:-[worker1] finished cmd: Starting seg at dir /data/gpdb/pdata2/gpseg1 cmdStr='env GPSESSID=0000000000 GPERA=ea7fa135b0ce8dae_220409151208 $GPHOME/bin/pg_ctl -D /data/gpdb/pdata2/gpseg1 -l /data/gpdb/pdata2/gpseg1/pg_log/startup.log -w -t 600 -o " -p 6001 " start 2>&1'  had result: cmd had rc=0 completed=True halted=False
涉及到的相关脚本, gpstart, startSegments, gpsegstart, gp

 

gp_segment_configuraion 的来源

pg_catalog.gp_segment_configuration 的数据来自于 gpinitsystem.LOAD_QE_SYSTEM_DATA拿到 seg_hosts 之后, HOST_LOOKUP 根据 ip 获取 hostname具体的方式是优先从 ~/.gphostcache 中获取 ip -> hostname, 其次 远程到 ip 对应的机器 通过 hostname 获取到主机名, 然后 缓存到 ~/.gphostcache注意到这个缓存, 是存在时间有效性的, 因此 我之前更新了三台机器的 hostname 之后, 数据库表中的 gp_segment_configuration 的 hostname 依然为 localhost.localdomain涉及到的相关脚本 gpinitsystem, gphostcachelookup, gphostcache, unix

 

查看 gp_segment_configuraion

进入 postgres 的方式, PGOPTIONS="-c gp_session_role=utility" psql -d postgres
查询 segment 的相关信息, select * from gp_segment_configuration order by dbid;
postgres=# select * from gp_segment_configuration order by dbid;dbid | content | role | preferred_role | mode | status | port |     hostname      | address |          datadir
------+---------+------+----------------+------+--------+------+-------------------+---------+---------------------------1 |      -1 | p    | p              | n    | u      | 5432 | host-172-19-165-8 | gp1     | /data/gpdb/master/gpseg-12 |       0 | p    | p              | n    | u      | 6000 | localhost.localdomain       | gp2     | /data/gpdb/pdata1/gpseg03 |       1 | p    | p              | n    | u      | 6001 | localhost.localdomain       | gp2     | /data/gpdb/pdata2/gpseg14 |       2 | p    | p              | n    | u      | 6000 | localhost.localdomain       | gp3     | /data/gpdb/pdata1/gpseg25 |       3 | p    | p              | n    | u      | 6001 | localhost.localdomain       | gp3     | /data/gpdb/pdata2/gpseg3

 

处理方式

    将 hostname 修改为对应的 gp2, gp3ERROR:  permission denied: "gp_segment_configuration" is a system catalog 的处理方式 set allow_system_table_mods='TRUE';

 

 

2. 业务表查询阻塞

现象

创建一张测试表, 然后查询这张测试表, 客户端阻塞住

 

查询 当前查询相关的进程信息

[root@gp1 gpdb]# ps -ef | grep SELEC
gpadmin   7784  7761  0 16:02 ?        00:00:00 postgres:  5432, gpadmin test 192.168.33.2(50275) con10 cmd28 SELECT
root      7900 25953  0 16:09 pts/0    00:00:00 grep --color=auto SELEC

 

查看 查询进程 的堆栈信息如下, 可以看到 udp 的相关函数

    Thread 2 (Thread 0x7fd751f9c700 (LWP 29767)):#0  0x00007fd74da9420d in poll () from /lib64/libc.so.6#1  0x0000000000a7e031 in rxThreadFunc (arg=<optimized out>) at ic_udpifc.c:6234#2  0x00007fd74e60ddd5 in start_thread () from /lib64/libpthread.so.0#3  0x00007fd74da9eead in clone () from /lib64/libc.so.6Thread 1 (Thread 0x7fd752042880 (LWP 29766)):#0  0x00007fd74da9420d in poll () from /lib64/libc.so.6#1  0x00000000008012f3 in WaitLatchOrSocket (latch=latch@entry=0x1072530 <ic_control_info+144>, wakeEvents=wakeEvents@entry=27, sock=sock@entry=17, timeout=timeout@entry=250) at pg_latch.c:334#2  0x0000000000a7c38e in receiveChunksUDPIFC (pTransportStates=pTransportStates@entry=0x1566a78, pEntry=pEntry@entry=0x14637b8, motNodeID=motNodeID@entry=1, srcRoute=srcRoute@entry=0x7ffc897b6d6e, conn=conn@entry=0x0) at ic_udpifc.c:3799#3  0x0000000000a7c892 in RecvTupleChunkFromAnyUDPIFC_Internal (srcRoute=0x7ffc897b6d6e, motNodeID=1, transportStates=0x1566a78) at ic_udpifc.c:3913#4  RecvTupleChunkFromAnyUDPIFC (transportStates=0x1566a78, motNodeID=1, srcRoute=0x7ffc897b6d6e) at ic_udpifc.c:3933#5  0x0000000000a70eee in processIncomingChunks (srcRoute=<optimized out>, motNodeID=1, pMNEntry=0x13e1b88, transportStates=0x1566a78, mlStates=0x13e1ae8) at cdbmotion.c:659#6  RecvTupleFrom (mlStates=<optimized out>, transportStates=0x1566a78, motNodeID=1, srcRoute=srcRoute@entry=-100) at cdbmotion.c:615#7  0x0000000000706488 in execMotionUnsortedReceiver (node=0x14547a0) at nodeMotion.c:392#8  ExecMotion (node=node@entry=0x14547a0) at nodeMotion.c:213#9  0x00000000006c7d48 in ExecProcNode (node=node@entry=0x14547a0) at execProcnode.c:1121#10 0x00000000006eb528 in ExecLimit_guts (node=node@entry=0x14540a0) at nodeLimit.c:94#11 ExecLimit (node=node@entry=0x14540a0) at nodeLimit.c:234#12 0x00000000006c7d58 in ExecProcNode (node=node@entry=0x14540a0) at execProcnode.c:1117#13 0x00000000006bf269 in ExecutePlan (estate=estate@entry=0x1453ac8, planstate=0x14540a0, operation=operation@entry=CMD_SELECT, sendTuples=sendTuples@entry=1 '\001', numberTuples=numberTuples@entry=0, direction=direction@entry=ForwardScanDirection, dest=0x12cc9c0) at execMain.c:2980#14 0x00000000006bffdc in standard_ExecutorRun (queryDesc=0x156ea48, direction=ForwardScanDirection, count=0) at execMain.c:969#15 0x000000000088dbe7 in PortalRunSelect (portal=0x12d6a08, forward=<optimized out>, count=0, dest=<optimized out>) at pquery.c:1149#16 0x000000000088fb91 in PortalRun (portal=portal@entry=0x12d6a08, count=count@entry=9223372036854775807, isTopLevel=isTopLevel@entry=1 '\001', dest=dest@entry=0x12cc9c0, altdest=altdest@entry=0x12cc9c0, completionTag=completionTag@entry=0x7ffc897b7380 "") at pquery.c:990#17 0x000000000088a260 in exec_simple_query (query_string=0x12caaa8 "SELECT * FROM \"public\".\"test\" LIMIT 1000 OFFSET 0") at postgres.c:1798#18 0x000000000088ca05 in PostgresMain (argc=<optimized out>, argv=argv@entry=0x12aa4c0, dbname=<optimized out>, username=<optimized out>) at postgres.c:5214#19 0x00000000004cb8cb in BackendRun (port=0x12daf10) at postmaster.c:4803#20 BackendStartup (port=0x12daf10) at postmaster.c:4460#21 ServerLoop () at postmaster.c:1945#22 0x0000000000814a86 in PostmasterMain (argc=argc@entry=6, argv=argv@entry=0x12a8540) at postmaster.c:1515#23 0x00000000004ce0e1 in main (argc=6, argv=0x12a8540) at main.c:245

 

查看 进程 7784 占用 upd 端口的相关情况, 可以看到的是占用了 两个高位端口

多半可能是防火墙的问题, 增加 30000-65535 的端口开放, 限定 udp 协议

[root@gp1 gpdb]# netstat -nlp | grep 7784
udp6       0      0 :::54096                :::*                                7784/postgres:  543
udp6       0      0 :::47865                :::*                                7784/postgres:  543

 

处理方式

防火墙增加 30000-65535 端口的 udp 服务开放, 客户端重新查询, 查询成功

 

 

完 

 

 

 

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

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

相关文章

基于springboot+vue的公交线路查询系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Find My运动相机|苹果Find My技术与相机结合,智能防丢,全球定位

运动相机设计用于在各种运动和极限环境中使用&#xff0c;如徒步、登山、攀岩、骑行、滑翔、滑雪、游泳和潜水等&#xff0c;它们通常具有防抖防震、深度防水和高清画质的特点&#xff0c;能够适应颠簸剧烈的环境&#xff0c;甚至可以承受一定程度的摔落&#xff0c;一些运动相…

基于systick实现获取系统运行时间

基于systick实现获取系统运行时间 文章目录 基于systick实现获取系统运行时间systick.c代码结构:代码功能:总结 systick.c #include <stdint.h> #include "gd32f30x.h"static volatile uint64_t g_sysRunTime 0;/** ***************************************…

数学建模【聚类模型】

一、聚类模型简介 “物以类聚&#xff0c; 人以群分”&#xff0c;所谓的聚类&#xff0c;就是将样本划分为由类似的对象组成的多个类的过程。聚类后&#xff0c;我们可以更加准确的在每个类中单独使用统计模型进行估计、分析或预测&#xff0c;也可以探究不同类之间的相关性和…

springboot233大学生就业需求分析系统

大学生就业需求分析系统设计与实现 摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff…

C语言-简单的环形队列的源码示例

概述 环形队列&#xff08;Circular Queue&#xff09;是一种常见的数据结构&#xff0c;特别适用于在单片机等资源受限的环境下实现缓冲区或队列功能。下面是一个简单的环形队列的源码示例&#xff0c;用C语言实现&#xff1a; #include <stdio.h> #include <stdint…

五种查看Spring容器中bean的方法

五种查看Spring容器中bean的方法 在Spring应用程序中&#xff0c;了解和查看容器中的Bean是进行调试和问题排查的关键。Spring提供了多种方法来查看容器中注册的Bean&#xff0c;以便我们深入了解应用程序的内部结构和调试潜在问题。本文将介绍五种常用的查看Spring容器中Bean的…

C++ map用法详细总结40例

文章目录 1. 定义与初始化2. 插入元素3. 查找元素4. 删除元素5. 遍历6. 访问成员函数7. 修改元素8. 注意事项9. 使用 equal_range 查找键值范围10. 使用 emplace 添加元素11. 使用 cbegin 和 cend 获取常量迭代器12. 排序规则自定义13. 使用 multimap 存储重复键14. 判断 map 是…

Python音乐信息管理库之beets使用详解

概要 在数字化时代,音乐管理变得越来越重要,特别是对于音乐爱好者和专业音乐人士而言。Python作为一种功能强大的编程语言,拥有着丰富的音乐处理库,其中Beet就是一款备受推崇的音乐信息管理工具。本文将深入探讨Beet库的功能特性、使用方法以及应用场景,并提供丰富的示例…

市场需求预测模型

市场需求预测模型是一种用于预测某个市场或产品的需求量的数学模型。它基于历史数据、市场趋势以及其他相关因素&#xff0c;通过统计和分析的方法来预测未来的市场需求情况。 市场需求预测模型可以帮助企业制定合理的生产计划、库存管理和市场营销策略。通过准确地预测市场需…

python实现数字规整(转中文)

1.思路根据正则匹配数字类型比如手机号、年月日等进行相对的数字规整 话不多说直接上代码&#xff0c;有新的类型可以按照当前方案进行新增 import redef match_year_digit(match):m str(match.group())relation {1: 一, 2: 二, 3: 三, 4: 四, 5: 五, 6: 六, 7: 七, 8: 八, …

WPF真入门教程31--WPF版房屋租售系统

1、教程回顾 到现在为止&#xff0c;“蒸”入门系列教程已完成了30刺由浅入深地讲解&#xff0c;当然不可能讲到了WPF的所有技能点&#xff0c;但读者看到了wpf的内部各种功能及之间的联系&#xff0c;在此基础上&#xff0c;再提供一个完整有效的综合项目&#xff0c;本项目采…

tcp的三次握手和四次挥手?

一&#xff1a;引出 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西&#xff1b;由于TCP不存在连接的概念&#xff0c;只存在请求和响应&#xff0c;请求和响应都是数据包&#xff0c;它们之间都是经过由TCP创建的一个从客户端发起&#xff…

身份验证错误。要求的函数不受支持。远程计算机:[IP地址]。这可能是由于CredSSP加密数据库修正

出现“身份验证错误。要求的函数不受支持。远程计算机&#xff1a;[IP地址]。这可能是由于CredSSP加密数据库修正”的问题&#xff0c;通常是因为Windows更新后&#xff0c;远程桌面连接&#xff08;RDP&#xff09;的安全性增强&#xff0c;特别是与CredSSP&#xff08;Creden…

[RoarCTF 2019]Easy Calc

这题考查的是: 字符串解析特性目录读取文件内容读取 字符串解析特性详解&#xff1a;PHP字符串解析特性 &#xff08;$GET/$POST参数绕过&#xff09;&#xff08;含例题 buuctf easycalc&#xff09;_参数解析 绕过-CSDN博客 ascii码查询表&#xff1a;ASCII 表 | 菜鸟工具 …

AI智能雷达名片小程序平台版源码系统 带完整的安装代码包以及安装部署教程

在当今数字化快速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已渗透到各个领域&#xff0c;尤其是在商务沟通领域&#xff0c;传统的名片已经不能满足现代商业的需求。小编给大家分享一款名为“AI智能雷达名片小程序平台版”的源码系统&#xff0c;该系统不仅提…

【Linux】将程序的输出显示到屏幕,同时写入到log文件

1. 将程序的输出显示到屏幕&#xff0c;同时写入到log文件 nohup python -u main.py 2>&1 | tee -a log.txt &nohup 放在命令的开头&#xff0c;表示不挂起&#xff08;no hang up&#xff09;&#xff0c;也即&#xff0c;关闭终端或者退出某个账号&#xff0c;进…

知乎引流秘籍:玩转知乎,掘金百万流量!

知乎&#xff0c;拥有3亿注册用户、日新增用户8万的超级内容平台&#xff0c;已然成为流量洼地。如何玩转知乎&#xff0c;掘金百万流量&#xff1f;这份1500字的实操指南&#xff0c;为你揭秘&#xff01; 一、知乎的优势&#xff1a;流量大、长尾效应强 1. 流量大&#xff…

QA核心竞争力

核心竞争力的三个阶段 我们知道&#xff0c;不同的工作和任务所需要的核心能力不同&#xff0c;因而核心竞争力也就不相同。QA 的入门门槛比较低&#xff0c;这也是 QA 这个群体产生恐慌和焦虑的主要原因。这个群体所涉及的技术面和技能栈非常广&#xff0c;所以整个职业生涯的…

46-全排列(回溯算法)

题目 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例 2&#xff1a; 输入&#xff1a;nu…