pgpool-II で実現する
PostgreSQLの高可用性
SRA OSS, Inc. 日本支社
技術部 盛 宣陽
y-mori@sraoss.co.jp
Copyright © 2008 SRA OSS, Inc. Japan All rights reserved.

1

SRA OSS, Inc. 日本支社
y ２００５年設立
 SRA OSS Inc. （米国カリフォルニア） に本社
 以前は SRA の一部署 （オープンソースカンパニー)y オープンソースソフトウェアビジネスを展開
 PostgreSQL
 Sylpheed
 Linux
 gcc

 パッケージ製品「PowerGres」
 Tomcat
 PHP
 その他 OSS

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

2

まず PostgreSQL とは？
y オープンソース RDBMS
y 高機能
 トランザクション
 多言語対応
 全文検索 その他多数

y 導入事例は数え切れない

誕生は１０年以上前！
祖先は Ingres （１９７０年代）

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

3

pgpool-II 開発背景
PostgreSQL への要求

可用性

限りなくダウンタイムをゼロにしたい！

シングルサーバの限界

ハードウェアの故障による可用性の低下
リソースの物理的な限界

性能もっと速く！

• CPU スケールアップ• 搭載メモリの限界• I/O の集中

１ PostgreSQL、１ サーバでは超えることのできない壁
Copyright © 2008 SRA OSS, Inc. Japan All rights reserved.

4

これを解決するために・・・
pgpool-II を開発

可用性と性能の両方を向上させる
オープンソースミドルウェア！！

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

5

pgpool-II の特徴
 ユーザと複数台の PostgreSQL の間にpgpool-II を設置することで、ユーザからは１台のデータベースに見えるユーザ

pgpoolPostgreSQL

pgpool-II の歴史
２００４年

pgpool 初期版リリース

２００６年

IPA の支援により SRA OSS で
pgpool-II 開発

２００７年

SRA OSS で開発を継続しpgpool-II v2.0 リリース

現在

pgpool Global Development Group で開発＆メンテナンス

BSDライセンスでソースコードを公開

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

6

pgpool-II の機能
pgpool-II の主な提供機能
y 可用性

運用管理

 同期レプリケーション- オンラインリカバリ
 Slony-Iとの連携
 ログシッピング

 Webベース管理ツール
 独自の管理プロトコルの提供

y 性能
 参照クエリの負荷分散 パラレルクエリ
 クエリキャッシュ コネクションプール
Copyright © 2008 SRA OSS, Inc. Japan All rights reserved.

7可用性機能 其の一

同期レプリケーション

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

8同期レプリケーション
z 更新クエリを複数サーバに送信し同期を行う
z 障害が発生した場合にはフェイルオーバを行い運用を継続
ユーザ

pgpoolz 1行の更新性能は約1/2

PostgreSQLUPDATEABCUPDATEUPDATEUPDATE
Copyright © 2008 SRA OSS, Inc. Japan All rights reserved.

9同期レプリケーション
オンラインリカバリ
z サービスを停止することなくノード復旧が可能
 新規ノードの追加も可能
 無停止でアップデートも可能
ユーザ

pgpoolz 洗練されたログベースによるリカバリz 障害が発生してから、オンラインリカバリの設定ができる!
z 管理ツールからボタン一発操作！
PostgreSQL

ABC

リカバリ

通信中
Copyright © 2008 SRA OSS, Inc. Japan All rights reserved.

10同期レプリケーション
更新処理についてy 更新処理はマスターで行ロックを取る!
y 処理の結果(何件更新したか)によってデータ整合性チェックが行われる
NODE1 (MASTER)
BEGIN;UPDATE;NODE2
BEGIN;BEGIN;

Masterで、最初に行ロックを獲得
UPDATE;COMMIT;

COMMIT;NODE3

UPDATE; Master以外は並列にクエリを送信
COMMIT;同期レプリケーション
注意が必要なクエリ
y サブクエリを伴う更新クエリには注意!
NODE1 (MASTER)
BEGIN;NODE2
BEGIN;UPDATE t1 ..
where t1.a in (select t2.a from t2);

UPDATE t1 ..
where t1.a in (select t2.a from t2);

同期レプリケーション
注意が必要なクエリ
y サブクエリを伴う更新クエリには注意!
NODE1 (MASTER)
BEGIN;NODE2
BEGIN;UPDATE t1 ..
where t1.a in (select t2.a from t2);INSERT INTO t2 ..

UPDATEの処理中に、他のユーザがINSERTされる可能性がある!

INSERT INTO t2 ..
UPDATE t1 ..
where t1.a in (select t2.a from t2);
ノード間でUPDATEの実行結果の件数が異なる場合には、トランザクションがアボートされる!

同期レプリケーション
注意が必要なクエリ
y サブクエリを伴う更新クエリには注意!
NODE1 (MASTER)
BEGIN;
LOCK TABLE t2
IN SHARE ROW EXCLUSIVE MODE;

NODE2
BEGIN;UPDATE t1 ..
where t1.a in (select t2.a from t2);
LOCK TABLE t2
IN SHARE ROW EXCLUSIVE MODE;
テーブルがロックされているため、他のユーザはINSERTINTO t2を実行できない

UPDATE t1 ..
where t1.a in (select t2.a from t2);

同期レプリケーション
その他 注意が必要なクエリ
y 同じテーブルに対して、UPDATEとINSERTが行われる場合かつ新規に追加されるINSERT文がUPDATEの対象に含まれる場合
y INSERT INTO.. SELECT構文やVALUE句の中のSELECTy ユーザ定義関数内で、SELECTの実行結果を使って更新処理を行う処理

可用性機能 其の二

Slony-I との連携

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

16

Slony-I との連携
yyyy

Slony-Iによる非同期レプリケーション y
更新クエリはマスタのみに送信
自動フェイルオーバ+ Slony-Iのマスタyの切り替え
新規ノードの追加も可能
ユーザ

UPDATE

pgpoolslonikテーブルの追加などスキーマの変更ができない
非同期レプリケーションのため、フェイルオーバ時にデータをロストする可能性がある
PostgreSQLUPDATE

Slony-I
Slony-I可用性機能 其の三

ログシッピング

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

18

ログシッピングyyyPostgreSQLのPITRによるログシッピン y
グを行う
更新クエリはマスタのみに送信y
障害が発生した場合には、自動フェイルオーバー処理を実行

ユーザ

pgpoolフェイルオーバ後に、サーバを一台追加してバックアップサーバの構築も可能
障害発生時にWAL領域のデータがロストする

PostgreSQLUPDATEUPDATE

ログシッピング可用性 まとめy

同期レプリケーション
メリット-同期レプリケーション
 デメリット-クエリを選び既存のシステムからの移行はアプリケーションの修正が必要

ySlony-Iとの連携


メリット-クエリの自由度は高い デメリット-非同期レプリケーション-ファイルオーバ時にデータロストの可能性がある。
-Slony-Iの操作がやや困難

y

ログシッピングメリット-PostgreSQLの機能のみを利用したレプリケーションシステム-クエリは何でも使える デメリット-フェイルオーバ時にデータロストする可能性がある。
-ログのメンテナンスが大変

性能機能 其の一

負荷分散

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

21

負荷分散
z 同期レプリケーション、Slony-Iとの連携を行っている場合のみ有効
z 検索クエリは重みをつけてランダムに振り分ける

ユーザ

z 負荷を PostgreSQL 間で分かち合うので検索性能が向上

pgpoolPostgreSQLSELECTWeb システムなどに最適
Copyright © 2008 SRA OSS, Inc. Japan All rights reserved.

22

性能機能 其の二パラレルクエリ

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

23

パラレルクエリ
z データを分割してPostgreSQL間で分担 z 問い合わせを並列に処理するので高速z 検索クエリを一斉に実行して結果を pgpool-II でまとめる
ユーザ

pgpoolABC

PostgreSQLABCAB

C

会計システムなどの意思決定システムなどに最適
Copyright © 2008 SRA OSS, Inc. Japan All rights reserved.

24その他の機能Copyright © 2008 SRA OSS, Inc. Japan All rights reserved.

25その他の機能z コネクションプーリング （性能）z クエリキャッシュ （性能）z 障害時に指定したコマンドを実行 （運用管理）
z 管理者へのメール送信など

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

26

pgpool-HAz オープンソースの HeartBeat と組み合わせてさらなる可用性
z Active-Standby 構成でpgpool の死活監視
z 仮想 IP を利用することでクライアントはサーバが切り替わったことを意識する必要がない
z 現状ではオンラインリカバリはできない

ユーザ

pgpoolPostgreSQL

ActiveHeartbeatStandby

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

27

pgpool 利用事例 （１）y 自動車産業のデータ交換システム
 http://www.postgresql.org/communityfiles/14.pdf
 クライアントはGM, Ford, 本田, 日産などの自動車メーカー
 データベースの負荷分散に pgpool を利用

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

28

pgpool 利用事例 （２）y Weblog 解析システム
 http://joeconway.com/
terabytes_osc2005.pdf
 ５２０GB のデータを解析 pgpool のレプリケーション
機能を利用

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

29

PostgreSQL 公式マニュアルでの紹介
y Chapter 25.

High Availability, Load Balancing, and Replication
和訳：
複数サーバ並列クエリ処理
上記のソリューション（レプリケーションソフト）は複数のクエリを複数のサーバで負荷分散することができるが、１つのクエリを複数のサーバで並列に処理することができない。これはデータを分割してそれぞれのサーバでクエリの一部を処理した結果を返す必要がある。
pgpool-II ではこれが可能である。…
Copyright © 2008 SRA OSS, Inc. Japan All rights reserved.

30

今後の予定y オンラインリカバリも含めpgpool-II複数台構成のサポート

WEB server + pgpool
負荷分散装置

PostgreSQLご清聴ありがとうございました

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

32