• 検索結果がありません。

8.4.1. pgpool-II(マスタスレーブモード)に対する監視内容の変更

本構成はシングルサーバ構成と比較すると、複数のデータベースサーバ間のデータ同期、個々のサーバの障害検 知、障害発生時のフェイルオーバなどの機能が追加されています。そのため、それぞれの機能が正しく動作している かどうかを確認する死活監視の項目もあわせて追加する必要があります。また性能監視については監視対象の サーバが増えた以外は、基本的にシングル構成と違いはありません。

8.4.2. 方式の違いによる監視内容の変更点

本構成では、データ同期は PostgreSQL自身が持つストリーミングレプリケーションの機能によって行い、負荷分 散、障害検知、障害発生時のフェイルオーバをpgpool-II の機能で行います。ストリーミングレプリケーションの監視 については、前章で述べた内容と違いはありません。pgpool-II については、以下の点について監視内容の変更、ま たは監視項目の追加を行う必要があります。

a) データベースサービスの死活監視

 pgpool-II を利用する場合、アプリケーションは直接PostgreSQL にアクセスするのではなく、pgpool-II を介して データベースにアクセスすることになります。そのため、データベースサービスが正常に稼動しているか確認するた めの SQL 監視も、アクセス先をpgpool-II のエンドポイントに変更しておく必要があります。

b) pgpool-II 自身の死活監視

 pgpool-II 自身の死活監視も、PostgreSQL の死活監視と同様に、以下の観点での監視を行います。

• pgpool-II が稼動しているサーバからping応答が得られるか

• pgpool-II のプロセスが稼動しているか

• pgpool-II のプロセスから正常応答が得られるか

• pgpool-II のログにエラーが出力されていないか

 監視方法は、ログ監視以外は PostgreSQL を直接監視する場合と違いはありません。ログ監視については、

pgpool-II ではフェイルオーバなどのイベントのログが 'LOG' のレベルで出力される点に注意が必要です。

c) PostgreSQL サーバの障害発生の検知

 本構成では PostgreSQL サーバに障害が発生してもpgpool-II が自動的に障害サーバを切り離し、マスタサー バが不在になればスレーブサーバをマスタサーバに昇格させることでデータベースサービスの提供を継続します。

しかしその後速やかに障害が発生したサーバを復旧させて冗長構成を回復させるためには、障害が発生したことを 検知して通知を行うことが望ましいです。

 障害の有無は個々の PostgreSQL サーバにクエリを発行することでも確認できますが、pgpool-II では pcp_node_info コマンドを使用することで、pgpool-II の管理下にある PostgreSQL サーバの状態を取得可能で す。pcp_node_info コマンドを実行すると以下のような出力が得られます。

# pcp_node_info 10 127.0.0.1 9898 postgres password 0 192.168.0.1 5432 2 0.333333

 出力は “<ホスト名> <ポート番号> <ステータス> <ロードバランスウェイト>”の形式で出力されます。ステータ スの数値は、1 がノード稼働中で接続無し、2 がノード稼働中で接続有り、3 がノードダウンを表しています。

 また、pgpool-II 経由で PostgreSQL に接続し、'show pool_nodes;' のクエリを発行することでも同様の情報を 得ることができます。この場合の出力は以下のとおりです。こちらの方法では管理下のサーバを一度に確認でき、

pcp_node_info で得られた情報に加え、各PostgreSQL サーバの role の情報を得ることもできます。ただし、接続

64/135 © 2014 PostgreSQL Enterprise Consortium

可能な PostgreSQL サーバが残っていない場合にはセッション自体を確立できない点には注意が必要です。

# show pool_nodes;

node_id | hostname | port | status | lb_weight | role 0 | 192.168.0.1 | 5432 | 2 | 0.333333 | primary 1 | 192.168.0.2 | 5432 | 2 | 0.333333 | standby 2 | 192.168.0.3 | 5432 | 2 | 0.333333 | standby

d) PostgreSQL サーバの障害発生時のフェイルオーバの成否

 pgpool-II は管理下の PostgreSQL に障害が発生した場合、自動的に事前に設定されたフェイルオーバ用のコ マンドを実行します。フェイルオーバが成功すれば自動的にデータベースサービスが復旧されますが、障害原因に よっては失敗することも考えられます。参照処理を負荷分散している場合、データベースの死活監視を参照系の SQL で行っているとプライマリサーバが存在しなくても参照クエリは正常に応答が返ってくるため、別途フェイル オーバの成否も監視しておくことが望ましいです。

 pgpool-II の場合、フェイルオーバが実行されると、以下のようなログが出力されます。

2014-02-24 10:56:40 ERROR: pid 10890: connect_inet_domain_socket: getsockopt() detected error:

Connection refused

2014-02-24 10:56:40 ERROR: pid 10890: make_persistent_db_connection: connection to 192.168.0.1(5432) failed

2014-02-24 10:56:40 ERROR: pid 10890: health check failed. 0 th host 192.168.0.1 at port 5432 is down 2014-02-24 10:56:40 LOG: pid 10890: set 0 th backend down status

2014-02-24 10:56:40 LOG: pid 10890: starting degeneration. shutdown host 192.168.0.1(5432) 2014-02-24 10:56:40 LOG: pid 10890: Restart all children

2014-02-24 10:56:40 LOG: pid 10890: execute command: /usr/local/bin/failover.sh 0 192.168.0.1 5432 /var/lib/pgsql/9.3/data 1 0 192.168.0.2 0 5432 /var/lib/pgsql/9.3/data

2014-02-24 10:56:40 LOG: pid 10890: find_primary_node_repeatedly: waiting for finding a primary node 2014-02-24 10:56:41 LOG: pid 10890: find_primary_node: primary node id is 1

2014-02-24 10:56:41 LOG: pid 10890: failover: set new primary node: 1 2014-02-24 10:56:41 LOG: pid 10890: failover: set new master node: 1 2014-02-24 10:56:41 LOG: pid 10925: worker process received restart request 2014-02-24 10:56:41 LOG: pid 10890: failover done. shutdown host 192.168.0.1(5432) 2014-02-24 10:56:42 LOG: pid 10924: pcp child process received restart request

2014-02-24 10:56:42 LOG: pid 10890: PCP child 10924 exits with status 256 in failover() 2014-02-24 10:56:42 LOG: pid 10890: fork a new PCP child pid 11061 in failover() 2014-02-24 10:56:42 LOG: pid 10890: worker child 10925 exits with status 256 2014-02-24 10:56:42 LOG: pid 10890: fork a new worker child pid 11062

 フェイルオーバが失敗しプライマリサーバが存在しなくなった場合は、以下のように、find_primary_node: の行 が出力されず、failover: new primary node: の値が -1 となります。

2014-02-21 16:38:15 LOG: pid 30707: execute command: /usr/local/bin/failover.sh 0 192.168.166.165 5432 /var/lib/pgsql/9.3/data 1 0 192.168.166.39 0 5432 /var/lib/pgsql/9.3/data

sh: /usr/local/bin/failover.sh: Permission denied

2014-02-21 16:38:15 LOG: pid 30707: find_primary_node_repeatedly: waiting for finding a primary node 2014-02-21 16:38:25 LOG: pid 30707: failover: set new primary node: -1

2014-02-21 16:38:25 LOG: pid 30707: failover: set new master node: 1

8.4.3. pgpool-II(マスタスレーブモード)での監視のまとめ

本章の構成では新たに複数のデータベースサーバ間のデータ同期、個々のサーバの障害検知、障害発生時の フェイルオーバなどの機能が正しく動作しているか確認する死活監視もあわせて行う必要があります。

データ同期は PostgreSQL自身が持つストリーミングレプリケーションの機能によって行い、負荷分散、障害検知、

障害発生時のフェイルオーバはpgpool-II の機能で行います。ストリーミングレプリケーションの監視については、

前章で述べた内容と違いはありません。pgpool-II については、以下の点について監視内容の変更、または監視項 目の追加を行う必要があります。

a) データベースサービスの死活監視 b) pgpool-II 自身の死活監視

c) PostgreSQL サーバの障害発生の検知

d) PostgreSQL サーバの障害発生時のフェイルオーバの成否

66/135 © 2014 PostgreSQL Enterprise Consortium

9. pgpool-II(レプリケーションモード)

本章では、pgpool-II のレプリケーションモードを使ったクラスタ構成における可用性、バックアップ、監視について記述します。

関連したドキュメント