講演資料のダウンロードはこちらから

PostgreSQLのエンタープライズ向け
利用を促進するクラスタ技術について
EnterpriseDB Summit 2014
2014年7月17日
SRA OSS, Inc. 日本支社
取締役支社長
PostgreSQLコミッター
石井 達夫
自己紹介
●
●
●
●
SRA OSS, Inc.で日本支社運営を担当
PostgreSQLの開発者(コミッタ)
PostgreSQL用のクラスタソフト “pgpool-II” の最
初の開発者
PostgreSQL以外では、クラウド関連の技術や構成
管理の技術に関心がある
2
Copyright(c) 2014 SRA OSS, Inc. Japan
SRA OSS, Inc.のご紹介
●
●
1999年よりPostgreSQLサポートを中心にOSS
ビジネスを開始、2005年に現在の形に至る
主なビジネス
●
PostgreSQLなどのOSSサポート
●
PowerGresファミリーの開発、販売
●
●
トレーニング、導入、設計コンサルティング
サービス
EnterpriseDB製品の販売、サポート
3
Copyright(c) 2014 SRA OSS, Inc. Japan
エンタープライズ領域に普及し始めた
PostgreSQL
●
●
●
●
●
20年近い歴史の中で機能・性能が充実
安定性と品質の高さ
大規模ハードウェアへの対応
大規模システムでも使われている実績
昨年あたりから特に盛り上がりを見せる
●
大手クラウドサービスのPostgreSQL対応
–
–
●
Amazon RDS for Postgres
Heroku
注目される派生製品の登場
–
–
–
–
–
PowerGres
EnterpriseDB
Amazon Redshift
Amazon RDS for PostgreSQL
Greenplum
4
Copyright(c) 2014 SRA OSS, Inc. Japan
本格的DBへと成長した
PostgreSQL
ソースコード行数
1,400,000
JSONB
ロジカル
レプリケーションの基
礎
マテリアライズ
ドビュー
他DBとの連携
組み込み
レプリケーショ
ン
1,200,000
再帰SQL
Window関数
マルチ
プロセッサ
最適化
1,000,000
800,000
80コアまで
スケール
カスケーディング
レプリケーション
WALログ
TOAST
PL/pgSQL
600,000
トリガ
400,000
Concurrent
Vacuum
200,000
HOT
全文検索
autovacuu
m
Windows
対応
真の
シリアライザブル
トランザクション
分離レベル
行ロック
MVCC
0
6.1
6.2
6.3
6.4
副問い合わせ
マルチバイト
5
6.5
7.0
7.1
7.2
7.3
7.4
8.0
8.1
8.2
8.3
8.4
9.0
9.1
9.2
2014年夏から秋にリリース予定
Copyright(c) 2014 SRA OSS, Inc. Japan
9.3
9.4
高いPostgreSQLのコード品質
●
Coverity Scan 2011 Open Source Integrity
Report
●
●
http://softwareintegrity.coverity.com/registerfor-the-2011-coverity-scan-report.html
静的解析手法による、ソースコード1,000行あたりのバ
グ数で品質を評価
–
–
–
Linux: 0.62
PostgreSQL: 0.21
商用ソフト: 0.6
6
Copyright(c) 2014 SRA OSS, Inc. Japan
メニーコア対応で大規模
ハードウェアを効率活用
コア数と同じ80ユー
ザまでリニアに検索
性能が向上
PostgreSQL Enterprise Consortium公開資料より
7
Copyright(c) 2014 SRA OSS, Inc. Japan
大規模事例の登場
●
「Zaland」というヨーロッパ
最大のオンライン服飾販売
サイト
●
●
●
●
●
8
2008年創立、売上1,600億
円
3TB以上のDBサイズ
マスタDBサーバは90台以
上
800台以上のアプリケーショ
ンサーバ(Tomcat)
200人以上のアプリ開発者
Copyright(c) 2014 SRA OSS, Inc. Japan
ミッションクリティカル領域で
更に求められること
●
●
●
可用性(High Availability:HA)
スケールアウト
これらの要件を実現するために開発されたのがク
ラスタシステム
9
Copyright(c) 2014 SRA OSS, Inc. Japan
可用性(High Availability:HA)とは
●
システムが停止しないで使い続けられる能力のこと
●
●
年間の稼働時間を目安にする(稼働率)
可用性を高めるには、以下のどちらかまたは両方を
使う。今日は冗長化の方向でお話します
●
●
信頼性を上げる
冗長化する
10
Copyright(c) 2014 SRA OSS, Inc. Japan
稼働率目標と実現手法
稼働率
年間動作不能時
間
実現手法
99%
3日15時間36分
バックアップとリストア
99.9%
8時間46分
バックアップとリストアに加え、夜間待機が必要
99.99%
52分34秒
クラスタ+手動切り替え+夜間待機
99.999%
5分15秒
クラスタ+自動切り替え
99.9999%
32秒
特殊なハードウェアが必要
Wikipediaより
11
Copyright(c) 2014 SRA OSS, Inc. Japan
DBにおけるクラスタシステムの難しさ
読み出し
読み出し
書き込み
DB1
DB2
DB3
書き込みが行われたDB2の内容がDB1、DB3と異なるものになってしまう
DB2への変更内容をDB1, DB3に伝搬させる仕組みが必要
12
Copyright(c) 2014 SRA OSS, Inc. Japan
HAクラスタの概念
DB1がダウンしたら
DB2が稼動系に
取って代わる
Standby側はDB2サーバに
アクセスしない
読み出し
書き込み
何らかの方法でデータコピー
DB2
稼動系
(active)
13
またはストレージを
共有
ストレージ
Copyright(c) 2014 SRA OSS, Inc. Japan
待機系
(standby)
待機側はストレージを
マウントしない
HAクラスタの特徴
●
●
●
●
●
枯れた技術であり、多くの商用製品やOSS製品が
ある
共有ストレージを使った構成も組めるが、最近はソ
フトウェアでデータをコピーし、共有ストレージを必
要としない構成が多い(その代わり更新処理の性能
劣化が多少発生する)
アプリケーションの修正は不要
待機系のリソースが活用できないのが欠点
可用性は向上するが、性能は向上しない
14
Copyright(c) 2014 SRA OSS, Inc. Japan
HAクラスタの例:
Amazon RDS for PostgreSQL
EC2
EC2
PostgreSQL
PostgreSQL
Replication
Availability Zone #1
15
AWS Cloud
Availability Zone #2
Copyright(c) 2014 SRA OSS, Inc. Japan
HAクラスタの例:
PowerGres HA Pacemaker版
●
●
●
オープンソースのHAクラスタソフトPacemaker/Heartbeat
オープンソースのデータレプリケーションソフトDRBD
PowerGres独自のクラスタ管理ツールPowerGres Cluster Manager
仮想
IPアドレス
Pacemaker/
Heartbeat
Pacemaker/
Heartbeat
PowerGres
PowerGres
レプリケーション
PowerGres
Cluster Manager
DRBD
稼働系ノード
待機系ノード
HAクラスタ
16
Copyright(c) 2014 SRA OSS, Inc. Japan
管理
性能向上手法としてのクラスタ
●
●
●
HAクラスタでは可用性は向上するが、スケールアウトはしない
待機系のリソースが活用できない
これらの欠点を補うソフトウェア
●
pgpool-II
–
–
–
●
検索性能を向上できる
可用性も向上できる
実績あり
Postgres-XC
–
–
–
検索性能だけでなく更新性能も向上できる
可用性の向上には工夫が必要
実績は少ない
17
Copyright(c) 2014 SRA OSS, Inc. Japan
pgpool-IIとは
●
●
●
●
●
●
PostgeSQL/PowerGres/Postgres
Plus Advanced Serverで使えるクラ
スタリングミドルウェア
OSSとして公開 (BSDライセンス)
PostgreSQLから独立したproxyとし
て動作、アプリケーションの改修は最
低限
幅広いPostgreSQLのバージョンに対
応
性能や可用性を高める多くの機能
メジャーバージョンアップは年に1回、
マイナーバージョンアップは2-3ヶ月に
1回、最新バージョンは3.3系
21
Copyright(c) 2014 SRA OSS, Inc. Japan
pgpool-IIによるクラスタの概念
アプリケーションからは普通の
PostgreSQLに見える
検索/更新
問い合わせを負荷分散できるか
どうかを判断
検索
更新
PostgreSQL
primary
更新の伝搬は
PostgreSQLの
機能を利用
22
検索処理を複数のPostgreSQL
で分担することにより、性能向上
(負荷分散)
pgpool-II
検索
検索
PostgreSQL
standby
streaming replication
Copyright(c) 2014 SRA OSS, Inc. Japan
PostgreSQL
standby
pgpool-IIによるクラスタの概念
検索/更新
pgpool-II
検索
更新
PostgreSQL
primary
検索
PostgreSQL
standby
streaming replication
23
Copyright(c) 2014 SRA OSS, Inc. Japan
ダウンしたPostgreSQLを
自動切り離して運用を継続
(自動フェイルオーバ)
X
PostgreSQL
standby
pgpool-IIによるクラスタの概念
検索/更新
pgpool-II
primaryのPostgreSQL
がダウンした場合には
そのままでは更新処理が
できなくなってしまう
X
PostgreSQL
primary
検索
更新
検索
検索
PostgreSQL
standby
streaming replication
24
Copyright(c) 2014 SRA OSS, Inc. Japan
PostgreSQL
standby
pgpool-IIによるクラスタの概念
検索/更新
pgpool-II
primaryサーバがダウンした時には
切り離すとともにstandbyサーバを
primaryに自動昇格させる
X
PostgreSQL
primary
検索
更新
検索
PostgreSQL
primary
PostgreSQL
standby
streaming replication
25
Copyright(c) 2014 SRA OSS, Inc. Japan
pgpool-IIによるクラスタの概念
検索/更新
待機用のpgpool-IIを
用意し、稼動系のpgpool-IIが
ダウンした時にフェイルオーバ
させることも可能(watchdog)
pgpool-II
検索
更新
PostgreSQL
primary
検索
pgpool-II
検索
PostgreSQL
standby
streaming replication
26
Copyright(c) 2014 SRA OSS, Inc. Japan
PostgreSQL
standby
pgpool-IIの構造
pgpool-IIメインプロセス
watchdog
起動
設定ファイル
pgpool.conf
pgpool-IIメインプロセス
監視
起動
pgpool-II子プロセス
SQLパーサ
プロトコルエンジン
実際には多数のプロセス
が起動される。
コネクション
プール
PostgreSQL
PostgreSQL
クエリキャッシュ
PostgreSQL
27
Copyright(c) 2014 SRA OSS, Inc. Japan
pgpool-IIの必要とするリソース
●
●
●
●
ディスクIOはほとんど発生しない
ネットワーク性能が重要
多数のプロセスが並行して動くので、CPU数は多
い方が良いが、CPU負荷は軽いので、特別高速な
CPUである必要はない
必要メモリ
●
子プロセスあたり50MB位が目安
–
子プロセスの本数はnum_init_childrenで決まる
28
Copyright(c) 2014 SRA OSS, Inc. Japan
pgpool-II設定
●
num_init_children
●
●
●
max_pool
●
●
PostgreSQLへのコネクションプールキャッシュの数
num_init_children*max_pool < PostgreSQLの最大接続数
(max_connections)である必要がある
●
●
起動する子プロセスの数
同時に受け付けるアプリケーションからの接続数を決定
実際には更に余裕が必要。詳細はマニュアルにて
num_init_childrenを超えたアプリケーションからの接続はカーネ
ル内のlistenキューに保持される。Linuxなら、net.core.somaxcon
の設定に注意(num_init_children*2以上必要)
29
Copyright(c) 2014 SRA OSS, Inc. Japan
ヘルスチェック設定
health_check_period: ヘルスチェックの間隔
開始
PostgreSQLから応答あり。OK
health_check_timeout秒間応答なし
health_check_retry_delay秒間待つ
最大health_check_max_retries回リトライ
●
各種設定値を短くしすぎると誤検知でフェイルオーバが頻発
●
長くし過ぎるとエラー検知までの時間が長くなる
30
Copyright(c) 2014 SRA OSS, Inc. Japan
フェイルオーバ設定
●
failover_command
●
●
典型的な処理
●
●
ヘルスチェックでpgpool-IIがPostgreSQLのダウンを検出した時に
呼び出すスクリプトを設定
primaryサーバがダウンした場合には、昇格候補のstandbyサーバ
上で “pg_ctl promote”コマンドをsshで実行する
以下の情報がpgpool-IIから渡される
●
●
●
ダウンしたノード番号
以前のprimaryノード番号
現在、ダウンしていないもっとも若いノードの番号(master node id)
31
Copyright(c) 2014 SRA OSS, Inc. Japan
オンラインリカバリ設定
●
●
●
primary PostgreSQLのDBを指定ノードに同期し
てstandbyサーバを作る
実際のスクリプトはユーザが作る(サンプルあり)
同期中も更新処理を受け付ける
pgpool-II
pgpool_recovery
recovery_1st_stage_command
ベースバックアップを実行
pcp_recovery_node
(管理コマンド)
primary
PostgreSQL
standby
PostgreSQL
更新差分はWALをロールフォワード
32
Copyright(c) 2014 SRA OSS, Inc. Japan
チューニング
●
relcache_expire
●
●
●
relcache_size
●
●
上記キャッシュが保持できるテーブル数。テーブルが多い場合には増やす
check_temp_table
●
●
pgpool-IIが持つテーブルのメタ情報のキャッシュ期限
頻繁にテーブルを作成したりする場合は無期限ではなく、短くする
テーブルが一時テーブルかどうかのチェックを行うかどうか。一時テーブ
ルを使っていない場合はoffにすることにより、内部クエリの数を減らせる
memory_cache_enabled
●
検索中心のシステムでは有効にすることにより性能向上
33
Copyright(c) 2014 SRA OSS, Inc. Japan
pgpool-IIの運用管理(1)
●
pgpool-IIの起動
●
●
pgpool-IIの停止
●
●
pgpool start
pgpool stop
設定ファイルの再読み込み
●
pgpool reload
34
Copyright(c) 2014 SRA OSS, Inc. Japan
pgpool-IIの運用管理(2)
●
DBノードの状態を表示
# show pool_nodes;
node_id | hostname | port | status | lb_weight | role ­­­­­­­­­+­­­­­­­­­­+­­­­­­­+­­­­­­­­+­­­­­­­­­­­+­­­­­­­­­
0 | /tmp | 11000 | 2 | 0.333333 | primary
1 | /tmp | 11001 | 2 | 0.333333 | standby
2 | /tmp | 11002 | 2 | 0.333333 | standby
●
pgpool-IIの管理下から外す
●
●
pgpool-IIの管理下に組み入れる
●
●
pcp_detach_node
pcp_attach_node
オンラインリカバリを実行する
●
pcp_recovery_node
35
Copyright(c) 2014 SRA OSS, Inc. Japan
pgpool-IIの運用管理(3)
●
新しいstandbyノードを追加する
●
●
●
●
●
●
PostgreSQLのインストールと、initdbだけやっておく(起動
はしない)
pgpool.confに新しいDBの情報を記述
“pgpool reload”でpgpool.confの再読み込み
DBノードがダウン状態でpgpool-IIに認識される
pcp_recovery_nodeを実行、DBの同期を取り、オンライン
状態にする
新しくpgpool-IIに接続したセッションから新しいDB
ノードを利用できるようになる
36
Copyright(c) 2014 SRA OSS, Inc. Japan
今後の予定
●
2014年9月くらいまでに次期メジャーバージョン(3.4.0)のリリース
●
●
●
PostgreSQL 9.4対応
SQLパーサがPostgreSQL 9.4相当に
新しい設定項目の追加
–
–
–
–
●
内部的な改良
–
–
●
print_user
check_unlogged_table
listen_backlog_multiplier
connect_timeout
PostgreSQLのメモリーマネージャ、例外処理の移植によるコードの簡素化、信頼性の向上
ソースツリーの整理
導入構築を容易に
●
●
●
インストーラの提供
パッケージの提供
Dockerイメージの提供
37
Copyright(c) 2014 SRA OSS, Inc. Japan
まとめ
●
●
●
●
ミッションクリティカル
領域でのPostgreSQL
の利用
可用性の向上のため
のクラスタ
性能向上のためのクラ
スタ
pgpool-IIの紹介
38
Copyright(c) 2014 SRA OSS, Inc. Japan
参考URL
●
SRA OSSのサイト(多数のスライドや技術情報あり)
●
●
pgpool-IIオフィシャルサイト
●
●
●
http://www.sraoss.co.jp
http://www.pgpool.net
http://www.pgpool.net/pgpoolweb/contrib_docs/simple_sr_setting2_3.3/index
-ja.html
PostgreSQLに関する各種技術情報
●
http://lets.postgresql.jp
39
Copyright(c) 2014 SRA OSS, Inc. Japan
お知らせ
(株)AITのブースにて、IBM POWER上のPostgreSQLのデモを
行っています。是非新しいPOWER8の実力をお確かめください!
PostgreSQL 参照多重アクセス性能の比較
400000
350000
300000
250000
T
P
S
200000
150000
POWER7
(64 コア ×4 スレッド )
1/3のコア数で
より高い性能!
100000
POWER8
(20 コア ×8 スレッド)
50000
0
0
20
40
60
80
pgbench 同時接続数
40
Copyright(c) 2014 SRA OSS, Inc. Japan
100
120
140
オープンソースとともに
Copyright(c) 2014 SRA OSS, Inc. Japan
41