[pgsql-jp: 39117] Re: データディレクトリが突然使用できなくなったことを検知する設定について

高尾 宏治 kouji @ netlab.jp
2008年 1月 30日 (水) 21:40:18 JST


高尾です。

On 2008/01/30, at 17:27, 高尾 宏治 wrote:

>> なので、アンマウントとかディスククラッシュをシミュレートするのに、
>> mvコマンドは不適切なのだと思います。
>> 例えば、USBメモリ上にDBファイルを配置し、稼動中に引っこ抜いたりすれば
>> 簡単にI/Oエラーが出るんじゃないでしょうか。
>
> 情報ありがとうございます。
> 上記の方法で再度、動作を確認してみます。

確認しました。
PostgreSQL 8.2で確認したところ、
データディレクトリがない場合にpsqlがエラーを返しました。
なお、postmasterは停止しませんでした。

定期的にSELECTを発行し、何回か連続して失敗したときに
postmasterを強制終了させるようにしようと思います。
助言ありがとうございました。

なお、以下に確認時の作業ログを書きます。
何かの参考になれば幸いです。

----- ここから -----
USBメモリ上にデータディレクトリを用意。
USBメモリのファイルシステムがFAT32の場合、PostgreSQLを起動できない。
PostgreSQLは、データディレクトリのパーミッションが700でなければいけない。
このため、USBメモリのファイルシステムをHFS+に変更した。(Mac OSXの環境で試しています。)

  $ sudo cp -r /sw/var/postgresql-8.2/data2 /Volumes/PostgreSQL/

PostgreSQL の起動。

  $ (BASE_DIR="/Volumes/PostgreSQL"; unset LC_ALL; LANG=C sudo -u postgres "/sw/bin/pg_ctl-8.2" start -D "${BASE_DIR}/data2" -l "${BASE_DIR}/pgsql-data2.log")

動作確認。

  $ psql -Upostgres -d testdb -h localhost -p 5433 -c "BEGIN; SELECT * FROM users; "
   id |    name     
  ----+-------------
    1 | TAKAO Kouji
    2 | user name
  (2 rows)

USBメモリを抜き、SELECTやINSERTを試す。

  $ psql -Upostgres -d testdb -h localhost -p 5433 -c "BEGIN; SELECT * FROM users; "
  psql: FATAL:  could not open file "global/pg_database": No such file or directory
  $ psql -Upostgres -d testdb -h localhost -p 5433 -c "INSERT INTO users VALUES (3, 'test');"  
  psql: FATAL:  could not open file "global/pg_database": No such file or directory

SELECTやINSERTが失敗した。

次は、この状態でpgpoolを起動し、pgpoolのヘルスチェックでエラーが検知で
きるかどうか確認した。エラーを検知しなかった。

  $ sudo pgpool -n
  2008-01-30 21:30:14 LOG:   pid 2300: pgpool successfully started
  2008-01-30 21:30:14 LOG:   pid 2300: starting health checking
  ...
----- ここまで -----

以上です。

---
株式会社ネットワーク応用通信研究所 研究員 高尾 宏治
〒690-0826 島根県松江市学園南二丁目12番5号
          HOYOパークサイドビル・2F
TEL:0852-28-9280 FAX:0852-28-9281
URL:http://www.netlab.jp/
e-mail:kouji @ netlab.jp




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