pgpool-II で PostgreSQL のクラスタを楽々運用しよう

OSC 2014 .Enterprise @ Tokyo
2014/12/12
SRA OSS, Inc. 日本支社
マーケティング部 OSS技術グループ
長田悠吾

自己紹介
●

長田悠吾（ナガタユウゴ）– SRA OSS, Inc. 日本支社
– マーケティング部 OSS技術グループ– pgpool-II 開発者– PostgreSQL 関連の技術調査– OSS の技術サポート– PostgreSQL の開発にも参加

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

2

SRA OSS, Inc. 日本支社●

1999年よりPostgreSQLサポートを中心にOSSビジネスを開始●PostgreSQL、Hinemos、Zabbix などのOSSサポート●

PowerGresファミリーの開発、販売●

トレーニング、導入、設計コンサルティングサービス

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

3本日のお話●PostgreSQLのクラスタリング機能–●

ストリーミングレプリケーション

でも、それだけでは出来ないことも・・・
負荷分散で検索性能をスケールアウトさせたい– サーバが落ちた場合には、人手を入れずに自動フェイルオーバさせたい–●

pgpool-II にお任せ！
機能と使い方– 新バージョン 3.4 の新機能–

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

4

PostgreSQLでクラスタリング

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

5

PostgreSQLとは●

代表的なオープンソースのRDBMSの１つ–●●

カリフォルニア大学で開発された研究用RDBMSのIngres(1970)を先祖に持つ

オーナー企業を持たず、コミュニティによる開発が続けられている–

年１回のメジャーバージョンアップ

–9.4RC1が最近リリース

PostgreSQLライセンスで配布–

BSDタイプの緩いライセンス

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

6

クラスタリングしたい・・・●

データベースクラスタリングの目的は？
– 高可用性の確保

サービスを停止させたくない●
１つのデータベースが故障しても、別のデータベースが肩代わりする●– 参照負荷分散

大量のアクセスをさばきたい●
負荷を分散して検索性能を向上●– 並列処理大量のデータを解析したい●
複数のサーバで並列的に処理●

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

7

PostgreSQLのクラスタ技術●

HAクラスタ– Pacemaker+DRBD、共有ストレージなどを利用– 待機側はサービス停止●

ストリーミングレプリケーション– PostgreSQL自体が持つ、非同期レプリケーション機能– プライマリ（更新可能） + 複数のスタンバイDB（検索のみ）– 簡単、確実、速い●

pgpool-II– クライアントとPostgreSQLの間に入ってレプリケーション機能を提供– コネクションプーリング、負荷分散、自動フェイルオーバなど他の機能もある●

Postgres-XC– PostgreSQLを改造したクラスタシステム– 書き込み性能の負荷分散
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

8

PostgreSQLのストリーミングレプリケーション●

ストリーミングレプリケーション（PostgreSQL 9.0 ～）–マスタからスレーブにトランザクションログ（WAL）を転送することによりデータの複製を実現
スタンバイは参照クエリを受け付けることができる （Hot Standby）

プライマリへは更新・参照の両方とも可能
更新クエリ
参照クエリ

クライアント

参照クエリ

リカバリし続ける

WAL転送
プライマリ

スタンバイ
WAL 書き込み

WAL 書き込み

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

9

PostgreSQLのストリーミングレプリケーション●

複数のスタンバイにレプリケーション可能–

参照性能のスケールアウトが可能–

レプリケーションのカスケーディングも可能
クライアント

更新クエリ
参照クエリ

参照クエリ
参照クエリ

プライマリレプリケーション

スタンバイ

スタンバイ

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

10しかし、PostgreSQLだけでは・・・
負荷分散はどうするの？
更新クエリ、参照クエリの振り分けは？
アプリケーションを書き換えなきゃだめ？

更新クエリ
参照クエリ

クライアント

参照クエリ
参照
クエリ

プライマリ

レプリケーション

DBサーバに障害が発生したら？
手動で対応するの？

スタンバイ

スタンバイ

プライマリがダウンしたら更新ができなくなる？！
サービスが停止してしまう！？
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

11

そこで pgpool-II です

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

12

pgpool-II とは●

アプリケーションとPostgreSQLの間に入って、クラスタリング機能を提供するミドルウェア–●

アプリケーションからは普通のPostgreSQLに見える

オープンソースソフトウェア（BSDライセンス）

PostgreSQL– メジャーバージョンアップは年１回– 先月 3.4.0 がリリース

クエリ
●

多彩な機能
コネクションプーリング– 参照負荷分散– クエリキャッシュ– ヘルスチェック– 自動フェイルオーバ– オンラインリカバリ–クエリ

pgpool-II

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

13

参照負荷分散

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

14

参照負荷分散●

クエリの自動振り分け
更新クエリはプライマリサーバへ– 参照クエリはサーバ間で振り分け
–

更新・参照
プライマリ

レプリケーション

参照

更新・参照

pgpool-II参照

振り分けの重みを指定可能
レプリケーション遅延が大きいサーバには振り分けない3.4.0 からはよりきめ細やかな振り分けが可能に！

スタンバイ

スタンバイ

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

15データベースに障害が発生したら？

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

16

自動フェイルオーバ●

DBサーバの障害を自動検出（ヘルスチェック機能）–ダウンしたPostgreSQLを切り離す→ 負荷分散の対象から外れる
更新・参照
プライマリレプリケーション

参照

更新・参照

pgpool-II

スタンバイ
障害発生

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

17自動フェイルオーバ●

プライマリサーバに障害が発生した場合は？
–そのままでは更新ができなくなってしまう！

障害発生

更新・参照
プライマリ

レプリケーション

参照

更新・参照

pgpool-II

参照

スタンバイ

スタンバイ
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

18

自動フェイルオーバ●

プライマリサーバに障害が発生した場合そのままでは更新ができなくなる– 負荷分散からの切り離し– スタンバイをプライマリに自動昇格
–

障害発生

更新・参照

更新・参照

pgpool-II

フェイルオーバ時に実行される具体的な処理はユーザがスクリプトで定義可能

参照

プライマリ

レプリケーションスタンバイ

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

19

ダウンしたデータベースの復旧

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

20

オンラインリカバリ●ダウンしたスタンバイをプライマリに同期させる●

同期中も更新が可能

同期中
更新・参照

更新・参照

pgpool-II

参照

プライマリ

レプリケーションスタンバイ
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

21

オンラインリカバリ●ダウンしたスタンバイをプライマリに同期させる●

同期中も更新可能●

同期完了後、自動的に負荷分散
参照対象となるスタンバイ更新・参照

更新・参照

レプリケーション

pgpool-II

オンラインリカバリ時の処理もスクリプトで定義

参照

プライマリ

スタンバイ

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

22

オンラインリカバリ●

新しいスタンバイサーバの追加–pgpool-II に新しいサーバの情報を読み込ませてから、オンラインリカバリ– 同期完了後、負荷分散対象に参照

同期中

スタンバイ
更新・参照

更新・参照

レプリケーション

pgpool-II

参照

プライマリ

スタンバイ
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

23

オンラインリカバリ●

スタンバイの増設も容易–

参照

検索性能のスケールアウト！
参照
スタンバイ
更新・参照

更新・参照

レプリケーション

pgpool-II

参照

プライマリ

スタンバイ
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

24ここまでのまとめ●

参照性能の負荷分散–●

更新クエリと参照クエリの適切な振り分け

自動フェイルオーバ
データベース障害の自動検出＆切り離し– プライマリがダウンしたら、スタンバイが新プライマリに昇格–●

オンラインリカバリサービスを停めずにダウンしたサーバを復帰– 新しいスタンバイの追加も簡単–●

基本的にアプリケーションの書き換えは必要なし！

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

25

pgpool-IIに障害が発生したら？

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

26単一障害点？
●もし、pgpool-II に障害が発生したら？！
–

単一障害点 (Single Point of Failure) じゃないの？
参照
プライマリ

障害発生

レプリケーション

更新・参照

更新・参照

pgpool-II

参照

スタンバイ

スタンバイ
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

27

watchdog●

pgpool-II 組み込みのHA機能–

pgpool-II を Active/Standby 構成にする–

仮想IPでpgpool-IIにアクセス
pgpool-II(Active)
更新・参照

更新・参照

プライマリ

レプリケーション

仮想IP
参照
相互監視
参照

pgpool-II(Standby)

スタンバイ

スタンバイ

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

28

watchdog●

Active pgpool-II に障害発生すると・・・–

Standby pgpool-II が Active に昇格–

仮想IPでの付け替えが行われる
pgpool-II(Down)

更新・参照

相互監視

仮想IP

pgpool-II(Active)

更新・参照

プライマリ

レプリケーション

参照
スタンバイ
参照

スタンバイ

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

29

クエリキャッシュによる性能向上

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

30

インメモリクエリキャッシュ●

SELECTクエリの結果をメモリ内にキャッシュする機能
同じクエリが来たときに再利用する– DBへのアクセスが減り、応答速度が向上–

クエリ

pgpool-II
クエリ

結果
キャッシュの保存/検索結果
PostgreSQL

メモリ

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

31

pgpool-II 活用事例

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

32

第一法規株式会社様 事例
●

●

●

●

大量の判例などを検索する
システム
PostgreSQLのストリーミン
グレプリケーション +pgpool-II で、負荷分散による性能向上、可用性向上
インメモリクエリキャッシュ機能を活用して検索性能を向上
一度発生したDB障害でもpgpool-II の自動フェイルオーバ機能により、サービスは停止することなく継続できた。

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

33

株式会社 Gengo様 事例●

翻訳サービスのクラウドソー
シング企業

●

AWS上でシステム構築●

３万トランザクション/日

●

●

●

PostgreSQLのマスタの仮想イメージがある日突然壊れたトラブルをきっかけに、SPoF解消のため pgpool-II を導入
同時にPostgreSQLのバージョンアップ。オンラインリカバリ機能を活用しダウンタイムを最小限に。
AWSによる強制インスタンス再起動メンテナンスも自動フェイルオーバ機能で乗り切った

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

34

pgpool-II の運用管理

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

35

pgpool-IIの運用管理コマンド●

pgpool コマンド– 起動●

pgpool start– 停止●

pgpool stop

– 設定ファイルの読み込み●

pgpool reload– 起動時オプション●

デーモンモード、デバッグモード、設定ファイルの指定、バックエンドステータスの破棄、・・・

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

36

pgpool-IIの運用管理コマンド●

pcp コマンド– DBノードをpgpool-IIの管理下から外す●

pcp_detach_node– DBノードをpgpool-IIの管理下に組み入れる●

pcp_attach_node– オンラインリカバリを実行する●

pcp_recovery_node– DBノードの状態を取得する●

pcp_node_info– watachdog ステータスを取得する●

pcp_watchdog_info
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

37

pgpool-IIの運用管理コマンド●

SHOW コマンド–

pgpool-II の内部情報を取得できるクエリ–

ノード情報、プロセス情報、コネクションプーリング、キャッシュヒット率、現在の設定、バージョン
postgres=# SHOW pool_nodes;
node_id | hostname | port | status | lb_weight | role---------+----------+-------+--------+-----------+--------0| /tmp | 11002 | 2| 0.333333 | primary
1| /tmp | 11003 | 2| 0.333333 | standby
2| /tmp | 11004 | 2| 0.333333 | standby(3 rows)
postgres=# SHOW pool_version;
pool_version--------------------3.4.0 (tataraboshi)(1 row)
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

38

GUI で管理したい

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

39

pgpoolAdmin●

pgpool-II のGUI管理ツール–

PHPで書かれたWebアプリケーション–

pgpool-II と DBノードの操作および状態確認が可能

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

40導入が難しそう・・・？

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

41

pgpool-II インストーラ●

pgpool-II と pgpoolAdmin を２台のサーバにインストール●

表示される質問に答えていくだけで設定が完了●–レプリケーション–

Watchdog–

負荷分散–

ヘルスチェック–

インメモリクエリチェック

管理–

フェイルオーバスクリプト

pgpool-II

server1

server2

pgpoolAdmin

pgpoolAdmin
管理
相互監視

pgpool-II

pgpool-II オフィシャルサイトから入手可能

PostgreSQL

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

PostgreSQL

42

テスト目的でとりあえず使ってみたい?
●

pgpool-setup–

pgpool-II の tar ball に同梱されているツール–

コマンド１つで、ローカルマシン上にテスト環境（デモ環境）を構築–

pgpool-II １台 + 複数の PostgreSQL の構成–

レグレッションテストでも利用されている–（余談ですが）pgpool-II のビルドファームが運用開始●

毎日１回レグレッションテストを実行してメール通知

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

43

pgpool-II 3.4.0 の新機能

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

44

pgpool-II 3.4.0●

pgpool-II 3.4.0 が11月にリリース！

●

参照負荷分散のきめ細かい指定が可能に–●

PostgreSQLへの接続待ちタイムアウトが指定可能に–●

アプリケーション名やデータベース名で、クエリの送り先を制御可能

AWSなどの仮想環境ではネットワーク遅延が大きく、これがフェイルオーバ発生の原因となっていた

PostgreSQL 9.4 のパーサを移植– 新しい構文や機能に対応●

PostgreSQLのメモリマネージャ & 例外処理マネージャを移植●

IPv6対応●etc....
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

45きめ細かな負荷分散●

アプリケーション名、DB名によって接続先が指定できる

更新・参照

検索
アプリケーション1

プライマリ（アプリ２）
参照

更新・参照

アプリケーション2

レプリケーション

pgpool-II

検索

スタンバイ
（アプリ２）

スタンバイ（アプリ１）
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

46

きめ細かな負荷分散●

アプリケーション名、DB名によって接続先が指定できる

重い検索

更新・参照

分析アプリケーション

プライマリ
参照

更新・参照

Webアプリケーション

レプリケーション

pgpool-II

重い検索

スタンバイ

スタンバイ
（分析用）
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

47

きめ細かな負荷分散●

アプリケーション名、DB名によって接続先が指定できる

pg_dump

更新・参照

管理コンソールプライマリ
参照

更新・参照

Webアプリケーション

レプリケーション

pgpool-II

pg_dump

スタンバイ

スタンバイ
（バックアップ用）
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

48

きめ細かな負荷分散●

アプリケーション名、DB名によって接続先が指定できる

更新ののみ!
プライマリ
参照

更新・参照

Webアプリケーション

レプリケーション

pgpool-II

参照

スタンバイ

スタンバイ
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

49きめ細かな負荷分散●

アプリケーション名、DB名によって接続先が指定できる

参照
スタンバイ
更新のみ!

更新・参照

Webアプリケーション

レプリケーション

pgpool-II

プライマリ
参照

スタンバイ
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

50

今後の予定●pgpool-II 3.5 の開発– 性能改善– PostgreSQL 9.5 対応– pcp コマンドの改善– 取得できる内部情報の追加●●負荷分散の状況

pgpool-II オフィシャルのyum レポジトリ– 近日公開予定

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

51

まとめ
●

PostgreSQLのクラスタ技術– ストリーミングレプリケーション + pgpool-II がおすすめ！

●

pgpool-II の機能– 負荷分散& 自動クエリ振り分け– 自動フェイルオーバ– オンラインリカバリ & サーバの追加も容易– watchdog で pgpool-II 自体の高可用性化– インメモリクエリキャッシュ– PgpoolAdmin、インストーラ、テスト環境構築ツール●

pgpool-II 3.4.0 新機能の紹介– きめ細かな参照負荷分散の指定
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

52

参考URL●●●

pgpool-II オフィシャルサイト
–http://www.pgpool.net/–

http://www.pgpool.net/jp/

SRA OSS, Inc. 日本支社–

セミナー資料、事例情報、技術情報–

http://www.pgecons.org/

Let's Postgres–

PostgreSQL 情報のポータルサイト–

http://lets.postgresql.jp/

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

53

オープンソースとともにURL： http://www.sraoss.co.jp/
E-mail： sales@sraoss.co.jp
Tel： 03-5979-2701
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

54