greenplum 集群故障(Sorry,too many clients already )排查:
阿新 • • 發佈:2018-09-27
設置 actions nts -m max sorry resources activity 鏈接 故障現象:
1:所有業務調度任務執行失敗;
2:手動測試無法連接數據庫;
3:並沒有收到集群的異常告警;
處理步驟:
1:首先登陸 gpcc 查看集群狀態; 發現所有greenplum 節點及服務都正常,但是屏幕打印報錯信息 :Sorry,too many clients already (alert) 2:在master節點通過gpstate -s和查看/usr/local/gpdata/gpmaster/gpseg-1/pg_log/gpdbxxxxxx.csv日誌,都可以看到以下報錯信息 "ERROR","58M01","failed to acquire resources on one or more segments","FATAL: sorry, too many clients already. Performance Monitor - failed to connect to gpperfmon database: FATAL: sorry, too many clients already.
登陸服務器查看集群狀態:
gpstate -b =》 顯示簡要狀態
gpstate -f =》 顯示備用主機詳細信息
gpstate -m =》 顯示鏡像實例同步狀態
gpstate -Q =》 快速檢查主機狀態
確認集群節點無異常!
調整集群最大連接數
此時基本確定集群連接數過多導致,準備使用殺掉連接解決問題,但是數據庫集群已經無法連接,使用gpconfig 命令修改;
主要修改參數如下: max_connections :最大連接數,Segment建議設置成Master的5-10倍。 查看現有配置值: gpconfig -s max_connections GUC : max_connections Master value: 250 Segment value: 750 #### 修改配置 gpconfig -c max_connections -v 2000 -m 500
max_prepared_transactions 這個參數只有在啟動數據庫時,才能被設置。它決定能夠同時處於prepared狀態的事務的最大數目(參考PREPARE TRANSACTION命令)。如果它的值被設為0。則將數據庫將關閉prepared事務的特性。它的值通常應該和max_connections的值一樣大。每個事務消耗600字節(b)共享內存。 查看現有配置值: gpconfig -s max_prepared_transactions Values on all segments are consistent GUC : max_prepared_transactions Master value: 250 Segment value: 250 修改配置 gpconfig -c max_prepared_transactions -v 500
修改參數後,重啟數據庫生效
關閉數據庫 :gpstop -M fast -a
快速啟動: gpstart -a
驗證配置是否生效:
gpconfig -s max_connections
gpconfig -s max_prepared_transactions
數據啟動後,已經可以正常使用!此時涉及的數據庫沒有涉及在線業務,所有直接重啟了。
使用超級用戶登陸,處理步驟參考:
# su - gpadmin
psql -d postgres
查看所有的連接;
postgres=# SELECT * FROM pg_stat_activity;
執行以下命令查看當前的總連接數:
psql -d postgres -c "select count(*) from pg_stat_activity"
查看第2步檢查到的報錯庫的連接數:
psql -d postgres -c "select count(*) from pg_stat_activity where datname = ‘pt_roi‘"
通過以下命令來斷開報錯的庫的連接,釋放資源:
SELECT pg_terminate_backend(pg_stat_activity.procpid) FROM pg_stat_activity WHERE pg_stat_activity.datname = ‘ $(DATABASES)‘ AND procpid <> pg_backend_pid();
問題的原因分析:
1:新業務服務沒有經過測試就上線,產生大量的異常鏈接,導致數據庫鏈接被沾滿;
2:數據庫連接沒有做監控告警,導致連接被占滿後才知道,需要添加連接數監控告警,大於正常數出發告警,提前處理;
3:調整數據庫任務、網絡鏈接超時時間,防止大量網絡連接不能斷開;
greenplum 集群故障(Sorry,too many clients already )排查: