[pgsql-jp: 28845] recovery mode後のタイムゾーンについて

bxcel bxcel @ prophet.jp
2003年 1月 30日 (木) 03:08:49 JST


松本と申します。

backendが異常を検出し強制的に再起動したようなのですが、その時からbackendとク
ライアントに
対するデフォルトのタイムゾーンが変わってしまい時間がずれてしまうという現象が
発生しました。

環境は、RedHat Linux7.2 + postgres 7.2.1です。

Jan 27 10:02:12 hoge postgres[2698]: [1-1] NOTICE:  Message from PostgreSQL
backend:
Jan 27 10:02:12 hoge postgres[2698]: [1-2] ^IThe Postmaster has informed me
that some other backend
Jan 27 10:02:12 hoge postgres[2698]: [1-3] ^Idied abnormally and possibly
corrupted shared memory.
Jan 27 10:02:12 hoge postgres[2698]: [1-4] ^II have rolled back the current
transaction and am
Jan 27 10:02:12 hoge postgres[2698]: [1-5] ^Igoing to terminate your
database system connection and exit.
Jan 27 10:02:12 hoge postgres[2698]: [1-6] ^IPlease reconnect to the
database system and repeat your query.

というメッセージが大量に出力された直後、

Jan 27 01:02:50 hoge postgres[12631]: [3] FATAL 1:  The database system is
in recovery mode
Jan 27 01:02:57 hoge postgres[12632]: [3] FATAL 1:  The database system is
in recovery mode
Jan 27 01:02:58 hoge postgres[12633]: [3] FATAL 1:  The database system is
in recovery mode
Jan 27 01:02:58 hoge postgres[12635]: [4] FATAL 1:  The database system is
starting up
Jan 27 01:02:58 hoge postgres[12636]: [4] FATAL 1:  The database system is
starting up
Jan 27 01:02:58 hoge postgres[12637]: [4] FATAL 1:  The database system is
starting up

となり、syslogとSQL文の結果の両方の時間が9時間ずれてしまいました。他のプロセ
スからのsyslogの
時間は正常なので、以降連続したsyslogファイル上に、正しい時間の他のプロセスか
らのsyslogと9時間
ずれたpostgresからのsyslogが、以下のように混在しています。

Jan 27 06:44:54 hoge postgres[20366]: [4] ERROR:  .....
Jan 27 15:53:46 hoge sshd(pam_unix)[21200]: session opened for user hoge by
(uid=0)
Jan 27 15:55:04 hoge sshd(pam_unix)[21861]: session opened for user hoge by
(uid=0)
Jan 27 06:55:58 hoge postgres[22035]: [4] ERROR:  .....
Jan 27 16:22:39 hoge sshd(pam_unix)[26690]: session opened for user hoge by
(uid=0)

WITHOUT TIME ZONEとしておけばSQL文の結果の方は問題なかったかもしれませんが、
backendの時間がずれたままというのは望ましくないと思います。確認していません
が
now定数などに影響がありそうですし。

過去のログを検索した所
[pgsql-jp: 27997] 強制再起動時のタイムゾーンについて
というのがありましたが、解決していないようでした。

backendが強制的に再起動するような状態を引き起こすのが根本の原因なのですが、
だからと
言ってデータベースシステムの時間がずれてしまうのは望ましい事ではないと思いま
す。

「障害に弱いな。これだからオープンソースは...」なんて事を言われたくないの
で、なんとか
解決したいと考えております。

考えられる対策方法としては、
1.backendの強制的な再起動時正しいタイムゾーンで起動するようにする
2.(消極的ですが)backendの強制的な再起動を動作させないでダウンさせる
(上位でpostmasterのプロセスを監視しているので、プロセスが無くなれば
障害として報告し再起動を試みる様にしていますので、時間がずれたまま動作
するよりは良いと考えています。)
事が考えられます。

この件に関しまして何か情報をお持ちの方いらっしゃいましたら教えてください。
ソースを解析した事はないのですが「ソースのどの辺を調べてみたら」などの情報で
も
もらえると助かります。

といってもsyslogのメッセージから「CAC_RECOVERY」や「FatalError」をキーワード
に、
タイムゾーンについては「TimeTzADT構造体」をキーワードに追いかければいいのか
ななど
と考えているレベルなのですが...

以上、よろしくお願いします。




pgsql-jp メーリングリストの案内