Pivotal Knowledge Base

フォローする

"gprecoverseg failed. (Reason='Persistent tables check failed. Please fix the persistent tables issues before running recoverseg' ) " で gprecoverseg が失敗

環境

GPDB 4.3.4.0 以降

問題

障害が発生したセグメントを復旧するために gprecoverseg を実行すると、以下のメッセージが出力され処理に失敗する。

[gpadmin@mdw_prod gpAdminLogs]$ gprecoverseg -a
20150305:14:03:33:006153 gprecoverseg:mdw:gpadmin-[INFO]:-Starting gprecoverseg with args: -a
20150305:14:03:33:006153 gprecoverseg:mdw:gpadmin-[INFO]:-local Greenplum Version: 'postgres (Greenplum Database) 4.3.4.1 build 2'
20150305:14:03:33:006153 gprecoverseg:mdw:gpadmin-[INFO]:-master Greenplum Version: 'PostgreSQL 8.2.15 (Greenplum Database 4.3.4.1 build 2) on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.4.2 compiled on Feb 10 2015 14:15:10'
20150305:14:03:33:006153 gprecoverseg:mdw:gpadmin-[INFO]:-Checking if segments are ready
20150305:14:03:33:006153 gprecoverseg:mdw:gpadmin-[INFO]:-Obtaining Segment details from master...
20150305:14:03:36:006153 gprecoverseg:mdw:gpadmin-[INFO]:-Obtaining Segment details from master...
20150305:14:03:42:006153 gprecoverseg:mdw:gpadmin-[INFO]:-Performing persistent table check
20150305:14:03:49:006153 gprecoverseg:mdw:gpadmin-[ERROR]:-Persistent table check gp_persistent_relation_node   <=> gp_global_sequence failed on host sdw8:50002.
20150305:14:03:49:006153 gprecoverseg:mdw:gpadmin-[ERROR]:-Persistent table check gp_persistent_relation_node   <=> gp_global_sequence failed on host sdw7:50001.
20150305:14:03:49:006153 gprecoverseg:mdw:gpadmin-[ERROR]:-Persistent table check gp_persistent_relation_node   <=> gp_global_sequence failed on host sdw1:50003.
20150305:14:03:49:006153 gprecoverseg:mdw:gpadmin-[CRITICAL]:-gprecoverseg failed. (Reason='Persistent tables check failed. Please fix the persistent tables issues before running recoverseg') exiting...
[gpadmin@mdw_prod gpAdminLogs]$

原因

これは、v4.3.4.0 から導入された gprecoverseg ツールの新機能で、リカバリー開始からディスク永続化関連の問題が実際に検知されるまで何時間も経過してしまう可能性があるものを、リカバリー開始初期段階で通知するものである。

GPDB v4.3.4.0 における gprecoverseg に対する機能拡張で、永続化カタログ関連の問題は、実際にセグメントのリカバリーを行う前に確認するようになっている。

解決策

gprecoverseg を稼働中のシステムで実行した場合、オブジェクトの生成・破棄に伴い誤って当該エラーメッセージを出力する可能性がある。この確認動作をスキップするには、gprecoverseg コマンドに --skip-persistent-check オプションを付与して実行する。

[gpadmin@mdw ~]$ gprecoverseg --skip-persistent-check
20150514:10:31:18:761299 gprecoverseg:mdw:gpadmin-[INFO]:-Starting gprecoverseg with args: --skip-persistent-check
20150514:10:31:18:761299 gprecoverseg:mdw:gpadmin-[INFO]:-local Greenplum Version: 'postgres (Greenplum Database) 4.3.4.1 build 2'
20150514:10:31:18:761299 gprecoverseg:mdw:gpadmin-[INFO]:-master Greenplum Version: 'PostgreSQL 8.2.15 (Greenplum Database 4.3.4.1 build 2) on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.4.2 compiled on Feb 10 2015 14:15:10'
20150514:10:31:18:761299 gprecoverseg:mdw:gpadmin-[INFO]:-Checking if segments are ready
20150514:10:31:18:761299 gprecoverseg:mdw:gpadmin-[INFO]:-Obtaining Segment details from master...
20150514:10:31:18:761299 gprecoverseg:mdw:gpadmin-[INFO]:-Obtaining Segment details from master...
20150514:10:31:18:761299 gprecoverseg:mdw:gpadmin-[INFO]:-Skipping persistent table check 

上述の誤ってエラーメッセージを出力する問題は、GPDB 4.3.4.2 で修正されている。

v4.3.4.2 以降でディスク永続化関連問題がないことを確認したい場合は、カタログの状態を確認するために以下の手順を実行することで可能となる。  

-- こちらの記事で言及されている手順に従って、まず孤立した一時的なスキーマを破棄し、gprecoverseg を再実行する。
-- 依然としてエラーが発生する場合は、こちらの記事で指摘されているように gpcheckcat を実行し、それが完了した後、gprecoverseg のエラーメッセージで報告されているセグメントに対して永続化に関連する問題が発生していないかどうか、以下のコマンドを用いて確認する。

grep -i ERROR /home/gpadmin/gpAdminLogs/<gpcheckcat のログファイル名>

Pivotal とサポート契約がある場合は、サポート担当エンジニアの補助の元、以下を実行することがあげられる。

-- 対象セグメントに問題が見られない場合は、リカバリーのため "gprecoverseg -a" を実行する。

コメント

Powered by Zendesk