Pivotal Knowledge Base

フォローする

gpinitsystem、gpstart、もしくは gpstopがフリーズし最終的に「could not start server」というエラーで失敗する

環境

  • Hawq 1.3.x

事象

gpinitsystem、gpstart、もしくはgpstopがフリーズし最終的に一般エラーメッセージで失敗する。

waiting for server to start...................................................................................................................................................................................................................................could not start server

原因

この事例においては、gpadminアカウントがリモートのホームディレクトリーサービスからマウントされている。それにより、Hawqマスターとセグメントは全て同じgpadminの.bash_profileと.bashrcのファイルを使っていることになる。

加えて、環境変数PGHOSTがhawqマスターのホスト名と同値に設定しており、この設定値はデフォルトでgpadminのユーザ環境変数設定時に読み込まれるようになっている。

起動プロセスの間、gpsegmentstart.pyはgpadminとしてpg_ctlをコールするセグメントサーバ上で実行される。pg_ctlはセグメントのインスタンスを起動し、内部関数であるtest_postmaster_connection()をコール、セグメントインスタンスに接続し起動していることを確認するためにlibpqを使おうとする。test_postmaster_connection()関数はlibpqをコールする際にPGHOSTを直接設定しないので、当該値を環境変数から読み込むか、デフォルト値としてlocalhostを設定する。この場合、PGHOSTがgpadminの環境変数に設定されており、結果として間違ったホストに設定される(セグメントではなくhawqマスターのホストが設定される)ためtest_postmaster_connection()がfalseを返答し、セグメントの起動に失敗する。

解決策

libpq接続に期待されるホスト名として、pg_ctlが自動的にデフォルトのlocalhostを設定するよう、gpadminの環境変数設定から問題となっているPGHOST設定を削除する。

コメント

Powered by Zendesk