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.pswp.cn/news/711405.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711405.shtml
英文地址,請注明出處:http://en.pswp.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…