続いてPostgreSQLサーバに障害が起こった時、PostgesForestとしてどのような振る舞いをするか、実際に試してみましょう。
まずはJpsqlを切断します。Jpsqlを起動したターミナルウィンドウで、CTRL+Cを押すか\qを入力してください。
[14] \q
Now closing the connection
[postgres@localhost ~]$
さらに2つめのPostgreSQLサーバを立ち上げたターミナルウィンドウで、次のコマンドを入力してPostgreSQLサーバを停止します。
[postgres@localhost ~]$ /home/postgres/forestbin/402_2/bin/forest_ctl -m f stop
これによってPostgresForestは本来あるべきPostgreSQLサーバに接続できないことになります。この状態で、再度Jpsqlを起動します。
[postgres@localhost ~]$ /home/postgres/forestbin/402_1/bin/Jpsql.sh -h localhost -p 5432 -g gsc -d sample -U postgres -W postgres
この時1つめのPostgreSQLサーバを起動したターミナルウィンドウ上では、たくさんのログが発行されていますが、その中に次のようなログを見つけることができるはずです。
INSERT INTO forest_brokenlog (serverid, datetime, ・・・
(中略)
・・・'localhost.localdomain/127.0.0.1', 'CONNECT')
これはPostgresForestが2つめのPostgreSQLサーバに異常があったことを検知して、今後は2つめのPostgreSQLサーバにアクセスしないようにサーバの切り離し処理を行った結果になります。
この状態で、Jpsqlから参照SQL/更新SQLのどちらを実行しても、まったく問題なく実行できることが確認できるはずです。PostgresForestが1つのPostgreSQLサーバのみで動作し続けているため、ユーザアプリケーションからは障害を認識することなく、何事も無かったようにサービスを継続することができるのです。
※注:
片方のPostgreSQLサーバを落として運用した後、元の状態に復旧するためにはリカバリの処理が必要になります。今回リカバリに関しては解説していませんので、ドキュメントを参照してください。
|