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
© Copyright 2024