SlideShare ist ein Scribd-Unternehmen logo
1 von 63
Downloaden Sie, um offline zu lesen
日本PostgreSQLユーザ会
第25回しくみ+アプリケーション勉強会




pgpool-II と PostgreSQL ストリーミング
    レプリケーションを組合わせた
   高性能、高可用性クラスタの検証



                 2013年2月9日

                 TIS 株式会社
                 中西 剛紀 (Yoshinori Nakanishi)
はじめに
●
    今回は、PostgreSQLでクラスタを組む時のお話
    –   PostgreSQLストリーミングレプリケーションと
        pgpool-II を組合せて高性能、高可用性を狙います。
    –   実際の検証結果から、このクラスタの特徴や
        運用のノウハウや注意点を紹介します。
●
    クラスタを運用するノウハウがメインです。
    –   PostgreSQLのコアな仕組みはあまり解説しません。
    –   PostgreSQLストリーミングレプリケーションや
        pgpool-IIがどんなものか知っている前提で話します。
自己紹介(あんた誰よ?)
●
    中西 剛紀 (なかにし よしのり)
●
    所属: TIS株式会社 戦略技術センター
    –   「海岸沿いのSIer」 とか呼ばれてた会社
    –   いわゆる R&D 部門です。
●
    OSS活用推進を担当しています。
    –   社内でOSSを使ってもらうための支援
    –   元々は商用DBMSメインのDB屋さん
    –   3年前から PostgreSQL ばっかり触ってます。
OSS推奨スタック「ISHIGAKI Template」

●
    推奨OSSを組合せたアプリケーション基盤
    –   今後も発展が期待でき、商用サポートも利用可能な
        ミドルウェアを中心に選定した OSS で構成
    –   組合せた状態での独自検証を経て、
        カスタマイズした設定やドキュメント等も整備
●
    続きは WEB で
    –   OSSマイグレーションサービス
        http://www.tis.jp/service_solution/ossmigration/
ISHIGAKI HA

                     JBoss AS   PostgreSQL
  Apache

                          リソース監視
 Activeサーバ   Pacemaker                       DRBD
                    死活監視              データ同期
 Standbyサーバ Pacemaker                        DRBD
                     JBoss AS   PostgreSQL
  Apache




Active/Standby型でサーバーを冗長化したクラスタ
    ○ シンプルな構成でサーバーの可用性を向上
    × 性能はスケールしない
ISHIGAKI Cluster
                                 ロードバランサ、PostgreSQLのHA
               Ver 2.2.15        Ver 5.1.0 Ver 3.1.3 マスター
 Ver 6.2   Apache HTTP Server    JBoss AS   pgpool-II   PostgreSQL
                      mod_jk

                                                         Ver 9.1.2    ストリーミング
                                セッションレプリケート 参照負荷分散                   レプリケーション
                                                        スレーブ
           Apache HTTP Server    JBoss AS   pgpool-II   PostgreSQL
                      mod_jk




                                                        スレーブ
           Apache HTTP Server    JBoss AS   pgpool-II   PostgreSQL
                      mod_jk




Active/Active型でサーバーを冗長化したクラスタ
       ○ スケールアウトに向く構成
       × 構成が複雑で運用の難易度は高い
pgpool-II の配置について
専用のサーバに配置                   【長所】
                            ●
                              分かりやすい
                            ●
                              他ソフトの影響を受けず、最も安全に運営できる。
                            【短所】
                            ●
                              サーバを1台余計に増やす必要がある。
                            ●
                              pgpool-II のサーバが単一障害点になる。
Webサーバやアプリケーション             【長所】
サーバ(APサーバ)と同居               ●
                              Web/APサーバと pgpool-II がローカル通信で高速
                            ●
                              複数のWeb/APサーバがあれば、
                              自然と単一障害点を回避できる
                            【短所】
                            ●
                              複数の pgpool-II を並行動作させる運用が煩雑
DBサーバと同居                    【長所】
                            ●
                              pgpool-IIが単一障害点になることがない(?)。
                            ●
                              余計なサーバを追加する必要もない。
                            【短所】
                            ●
                              アプリケーションがどのDBサーバに接続するのか
                              を自ら判断する必要がある。
  ※ pgpool-II ユーザマニュアルより抜粋
    http://pgpool.projects.pgfoundry.org/pgpool-II/doc/pgpool-ja.html
ISHIGAKI Cluster の検証パターン
分類    テストケース
可用性   PostgreSQLマスターサーバ障害時のフェイルオーバ
      PostgreSQL同期スレーブサーバ障害時のフェイルオーバ
      PostgreSQL非同期スレーブサーバ障害時のフェイルオーバ
      JBoss、pgpool-IIサーバ障害時のフェイルオーバ
性能    PostgreSQLサーバ数の増加による性能向上
      JBossサーバ数の増加による性能向上
運用性   停止したPostgreSQLマスターサーバのフェイルバック
      サービス稼働中のJBossサーバ追加/削除
      サービス稼働中のPostgreSQLサーバ追加/削除
      PostgreSQLのDBデータのバックアップ


本発表は、上記の検証結果の一部をご紹介します。
本発表の協賛
●
    本発表は SRA OSS Inc. 日本支社様にも
    ご協力いただきました。
    –   我々の検証結果に対するレビュー、アドバイス

●
    石井様には特にお世話になりました。
    –   pgpool-II の修正パッチも提供いただきました。
報告ケース一覧

検証1: PostgreSQLマスタのフェイルオーバ
検証2: PostgreSQLスレーブのフェイルオーバ
検証3: 停止したPostgreSQLマスタのクラスタ復帰
検証4: PostgreSQLサーバ増加時のスケールアウト
検証5: PostgreSQLサーバ減少時の運用
検証6: マルチマスタ構成でのpgpool-II watchdog
検証7: PostgreSQL 9.2でのバックアップ方式
報告ケース一覧

検証1: PostgreSQLマスタのフェイルオーバ
検証2: PostgreSQLスレーブのフェイルオーバ
検証3: 停止したPostgreSQLマスタのクラスタ復帰
検証4: PostgreSQLサーバ増加時のスケールアウト
検証5: PostgreSQLサーバ減少時の運用
検証6: マルチマスタ構成でのpgpool-II watchdog
検証7: PostgreSQL 9.2でのバックアップ方式
検証で明らかにしたいこと

●
    PostgreSQLのマスターサーバが停まっても
    サービスは継続できるのか?

●
    マスターサーバをフェイルオーバしてサービス
    継続を図るのであれば、マスターサーバ停止
    ~サービス再開までどれ位時間がかかるのか?
マスターフェイルオーバの動作
                                  障害検知                 障害発生
                                          マスター
  Apache   JBoss AS   pgpool-II           PostgreSQL




                                                       マスター昇格
                                         新マスター
  Apache   JBoss AS   pgpool-II           PostgreSQL




                                         非同期スレーブ
  Apache   JBoss AS   pgpool-II           PostgreSQL




1. 各APサーバ上のpgpool-IIがPostgreSQL(マスター)の障害を検知する。
   該当サーバはクラスタから切り離され、DB処理を振り分けなくなる。
2. 障害を検知したpgpool-IIがスレーブのPostgreSQLに対して、
   マスタへの昇格を実行する。
3. pgpool-IIが、残ったスレーブのPostgreSQL全てに、レプリケーション先の
   変更設定を行い、PostgreSQLを再起動する。
マスターフェイルオーバの動作
                                  障害検知                  障害発生
                                         マスター
  Apache   JBoss AS   pgpool-II          PostgreSQL




                                         新マスター
  Apache   JBoss AS   pgpool-II          PostgreSQL




                                         同期スレーブ
  Apache   JBoss AS   pgpool-II          PostgreSQL



                                                      新マスターへ接続
1. 各APサーバ上のpgpool-IIがPostgreSQL(マスター)の障害を検知する。
   該当サーバはクラスタから切り離され、DB処理を振り分けなくなる。
2. 障害を検知したpgpool-IIがスレーブのPostgreSQLに対して、
   マスタへの昇格を実行する。
3. pgpool-IIが、残ったスレーブのPostgreSQL全てに、レプリケーション先の
   変更設定を行い、PostgreSQLを再起動する。
検証結果
フェイルオーバ前後のスループット遷移
                                                                                                                   ① マスター強制停止(OSハングアップ)
                                                   TPS                                                              マスターに割り振られた処理が待機状態になり、
300                                         ①        ②③ ④ ⑤                                                         スループットが急激に低下する

250
                                                     52秒                                                           ② マスターの停止を検知し、フェイルオーバ開始
200
                                                                                                                    待機状態になっていたリクエストがエラーで返され、
                                                                                                                    スループットが少し回復する。
150
                                                                                                                   ③ 新マスタの昇格完了
100                                                                                          成 功
                                                                                             失 敗
                                                                                                                    引き続き非同期スレーブから同期スレーブへの
 50                                                                                                                 昇格処理が始まる。この時点では同期スレーブが
                                                                                                                    存在せず、更新処理は待機状態になる。
   0
 1 9 :1 1 :3 0   1 9 :1 2 :0 0   1 9 :1 2 :3 0   1 9 :1 3 :0 0   1 9 :1 3 :3 0   1 9 :1 4 :0 0     1 9 :1 4 :3 0
                                                                                                                   ④ 新同期スレーブの再起動完了
                                                                                                                    新同期スレーブサーバでの参照が可能になる。

                                                                                                                   ⑤ 新同期スレーブの昇格完了
                                                                                                                    新同期スレーブのデータの再同期が終了して
  マスターサーバ停止~                                                                                                        昇格完了。マスタでの更新が可能になり、
  サービス完全再開まで1分弱                                                                                                     フェイルオーバ前と同等のスループットに戻る。
TIPS: pgpool-IIマルチマスタ構成
   でのフェイルオーバ運用注意点
 フェーズ1: スレーブサーバのマスタ昇格 (failover_stream.sh)
                                     2.障害検知                 1.障害発生
                                               マスター
     Apache   JBoss AS   pgpool-II             PostgreSQL



                   4.障害検知                                   3.マスター昇格中
                                              同期スレーブ
     Apache   JBoss AS   pgpool-II             PostgreSQL



                   5.障害検知
                                              非同期スレーブ
     Apache   JBoss AS   pgpool-II             PostgreSQL




    初回の昇格要求でマスタ化処理開始
    以降の昇格要求はメッセージを返すのみ                             問題なし
TIPS: pgpool-IIマルチマスタ構成
   でのフェイルオーバ運用注意点
 フェーズ2: 他スレーブを新しいマスタへ再接続 (follow_master.sh)
                              2.設定変更・再起動
                                            マスター
  Apache    JBoss AS   pgpool-II            PostgreSQL



           4.設定変更・再起動                            1.マスター昇格完了
                                            新マスター
  Apache    JBoss AS   pgpool-II            PostgreSQL


                                                         3.新マスター
           5.設定変更・再起動                                       に接続
                                           非同期スレーブ
  Apache    JBoss AS   pgpool-II            PostgreSQL




       無駄な再起動がかかってしまう                         ちと問題
対策案
●
    ロックファイルを作って余計な再起動を抑制する。
●
    フェーズ2で実行される follow_master.sh から
    呼び出される各スレーブの follow.sh に一工夫。
    if [ -f $LOCKFILE ] then
        // ロックファイルが存在すれば、何もしない
    else
     // ロックファイルがなければ、ロックファイルを作成してメイン処理を実行
        touch $LOCKFILE

         # スレーブのrecovery.confを作成
         echo "standby_mode = on" > $SLAVE_BASEDIR/$CHECKFILE
         echo "primary_conninfo = 'host=$NEW_MASTER_HOST port=5432 … '" >> $SLAVE_BASEDIR/$CHECKFILE
         echo "recovery_target_timeline = 'latest'" >> $SLAVE_BASEDIR/$CHECKFILE
         echo "restore_command = 'cp $BACKUPDIR/%f %p'" >> $SLAVE_BASEDIR/$CHECKFILE
         /usr/bin/cmp -s $SLAVE_BASEDIR/$CHECKFILE $SLAVE_BASEDIR/recovery.conf

         if [ $? -ne 0 ] ; then
             mv $SLAVE_BASEDIR/$CHECKFILE $SLAVE_BASEDIR/recovery.conf
             # スレーブのPostgreSQLを停止
             $PGCTL -m fast -w -D $SLAVE_BASEDIR stop 2>/dev/null 1>/dev/null
             # スレーブのPostgreSQLを起動
             $PGCTL -w -D $SLAVE_BASEDIR start 2>/dev/null 1>/dev/null
         else
             rm -f $SLAVE_BASEDIR/$CHECKFILE
         fi

         // ロックファイルを削除して終了
         rm $LOCKFILE
    fi
結論

●
    PostgreSQLマスターがダウンしても、
    pgpool-II がキチンとフェイルオーバしてくれます。

●
    フェイルオーバが完了するまでの時間は約1分。
    –   障害検知までの時間は設定次第
    –   切り替え時間は直前の更新負荷量にも依存

●
    pgpool-II が複数稼動する環境では、
    無駄なスレーブ再起動を防止する工夫が必要。
報告ケース一覧

検証1: PostgreSQLマスタのフェイルオーバ
検証2: PostgreSQLスレーブのフェイルオーバ
検証3: 停止したPostgreSQLマスタのクラスタ復帰
検証4: PostgreSQLサーバ増加時のスケールアウト
検証5: PostgreSQLサーバ減少時の運用
検証6: マルチマスタ構成でのpgpool-II watchdog
検証7: PostgreSQL 9.2でのバックアップ方式
検証で明らかにしたいこと

●
    PostgreSQL の同期/非同期スレーブが
    停まってもサービスは継続できるのか?
同期スレーブフェイルオーバ時の動作
                                 障害検知
                                        マスター
 Apache   JBoss AS   pgpool-II          PostgreSQL



                                                      障害発生
                                        同期スレーブ
 Apache   JBoss AS   pgpool-II          PostgreSQL




                                        同期スレーブ
 Apache   JBoss AS   pgpool-II          PostgreSQL



                                                     同期スレーブ昇格

1. 各APサーバ上のpgpool-IIがPostgreSQL(同期スレーブ)の障害を検知する。
   該当サーバはクラスタから切り離され、DB処理を振り分けなくなる。
2. PostgreSQLの機能により、非同期スレーブから同期スレーブへの
   昇格が実行される。
※ 非同期⇒同期スレーブの昇格は pgpool-II が行うわけではないことに注意
非同期スレーブ停止時の内部動作
                                    障害検知
                                            マスター
    Apache   JBoss AS   pgpool-II           PostgreSQL




                                           同期スレーブ
    Apache   JBoss AS   pgpool-II           PostgreSQL




                                                         障害発生
                                           非同期スレーブ
    Apache   JBoss AS   pgpool-II           PostgreSQL




1. 各APサーバ上のpgpool-IIがPostgreSQL(非同期スレーブ)の障害を検知する。
  該当サーバはクラスタから切り離され、DB処理を振り分けなくなる。
※ 障害が発生した非同期スレーブを切り離す以外は何もしない。
検証結果(同期スレーブ)
フェイルオーバ前後のスループット遷移
                                              TPS                                                           ① 同期スレーブ強制停止(OSハングアップ)
                              ①              ②              ③                                                同期スレーブに割り振られた処理が待機状態
300
                                                                                                             になり、スループットが急激に低下する
250
                                            62秒
200
                                                                                                            ② 同期スレーブ停止を検知し、フェイルオーバ開始
                                                                                                             参照処理のみ可能な状態になり、
150                                                                                                          スループットが少し回復する。
100
                                                                                                            ③ 新同期スレーブの昇格完了
                                                                                        成 功
 50                                                                                     失 敗                  更新可能な状態になり、スループットが回復する。

   0
  9 :2 7 :1 5   9 :2 7 :4 5   9 :2 8 :1 5     9 :2 8 :4 5   9 :2 9 :1 5   9 :2 9 :4 5         9 :3 0 :1 5




                マスターサーバ停止~サービス完全再開まで約1分
検証結果(非同期スレーブ)
フェイルオーバ前後のスループット遷移
                                                   TPS
                                                                                                                   ① 非同期スレーブ強制停止(OSハングアップ)
300
                                  ①              ② ③                                                                非同期スレーブに割り振られた処理が待機状態
                                                                                                                    になり、スループットが急激に低下する
250
                                           39秒
200
                                                                                                                   ② 非同期スレーブ停止を検知
                                                                                                                    非同期スレーブを切り離して、スループットが
150                                                                                                                 回復し始める。
100
                                                                                                                   ③ スループットが障害前レベルに回復する。
                                                                                             成 功
 50                                                                                          失 敗


   0
 1 0 :3 5 :4 5   1 0 :3 6 :1 5   1 0 :3 6 :4 5   1 0 :3 7 :1 5   1 0 :3 7 :4 5   1 0 :3 8 :1 5     1 0 :3 8 :4 5




                 マスターサーバ停止~サービス完全再開まで約40秒
結論

●
    同期スレーブのフェイルオーバもキチンとできます。
    –   まあ、PostgreSQL側でやっているわけですが。

●
    非同期スレーブは切り離されるだけなので、
    障害発生時の影響が最も小さい。
報告ケース一覧

検証1: PostgreSQLマスタのフェイルオーバ
検証2: PostgreSQLスレーブのフェイルオーバ
検証3: 停止したPostgreSQLマスタのクラスタ復帰
検証4: PostgreSQLサーバ増加時のスケールアウト
検証5: PostgreSQLサーバ減少時の運用
検証6: マルチマスタ構成でのpgpool-II watchdog
検証7: PostgreSQL 9.2でのバックアップ方式
検証で明らかにしたいこと
●
    停止したマスタをクラスタに復帰できるのか?

●
    サービスを稼動させた状態でも、クラスタに
    復帰できるのか?
フェイルバック時の内部動作
                                 旧マスター
 Apache   JBoss AS   pgpool-II   PostgreSQL



                                              新マスタから
                                 新マスター        リカバリ
 Apache   JBoss AS   pgpool-II   PostgreSQL




                                 同期スレーブ
 Apache   JBoss AS   pgpool-II   PostgreSQL




1. 旧マスターのDBを一度消去し、新マスターのDBからリカバリする。
 ※pg_basebackup コマンドを使う。
2. 非同期スレーブとして起動し、新マスターとのレプリケーションを開始する。
   ※recovery.conf を作成して起動する。
3. 2.で起動した非同期スレーブを pgpool-II 配下に参加させる。
   ※pgpool-II の pcp_attach_node コマンドを使う。
フェイルバック時の内部動作
                                 非同期スレーブ
 Apache   JBoss AS   pgpool-II    PostgreSQL




                                  新マスター
 Apache   JBoss AS   pgpool-II    PostgreSQL




                                 同期スレーブ
 Apache   JBoss AS   pgpool-II    PostgreSQL




1. 旧マスターのDBを一度消去し、新マスターのDBからリカバリする。
 ※pg_basebackup コマンドを使う。
2. 非同期スレーブとして起動し、新マスターとのレプリケーションを開始する。
   ※recovery.conf を作成して起動する。
3. 2.で起動した非同期スレーブを pgpool-II 配下に参加させる。
   ※pgpool-II の pcp_attach_node コマンドを使う。
検証結果

●
    前述の手順で、ダウンしたマスタを復帰できた。
●
    サービスを稼動させた状態で復帰させてもOK
    –   クライアントから見たスループットに変化はなかった。
    –   復帰作業中、特にエラーも発生しなかった。
TIPS: フェイルバック時の注意事項
●
    PostgreSQLマスターのプロセスのみがダウンし
    た時に問題が発生する。           プロセスのみダウン
                                               (サーバ自体は生きてる)
          recovery.conf があるので ReadOnly で    旧マスター
         起動されるが、DB内部はマスターの状態
                                            PostgreSQL



                          設定変更・再起動
                                           新マスター
    Apache     JBoss AS   pgpool-II         PostgreSQL




一番上のサーバに更新処理を送                             非同期スレーブ
るが、更新できずエラーになる                              PostgreSQL




     レプリケーションの接続先として一番上のサー
     バが指定されるが、マスタではないのでレプリ
     ケーションできない
対策案

●
    自ノードが旧マスタであれば、PostgreSQLを
    自動的に再起動しないようスクリプトを改修
●
    フェーズ2で実行する follow_master.sh に一工夫。

    # これから実行するサーバが旧マスターであれば、何も行わない。
    if [ $NODE_ID = $OLD_MASTER_NODE_ID ] ; then
          exit 1
    fi
    # 旧マスター以外のスレーブは follow.sh を呼び出し、recovery.conf の作成と再起動を行う。
    MSG=`ssh $SLAVE_HOST /etc/ishigaki/postgresql/follow.sh
         $NEW_MASTER_HOST $SLAVE_HOST $SLAVE_BASEDIR 2>&1`
結論

●
    停止したマスターのフェイルバックもできます。
●
    マスタープロセスがダウンするケースに備えて、
    運用スクリプトを実装しておきましょう。
報告ケース一覧

検証1: PostgreSQLマスタのフェイルオーバ
検証2: PostgreSQLスレーブのフェイルオーバ
検証3: 停止したPostgreSQLマスタのクラスタ復帰
検証4: PostgreSQLサーバ増加時のスケールアウト
検証5: PostgreSQLサーバ減少時の運用
検証6: マルチマスタ構成でのpgpool-II watchdog
検証7: PostgreSQL 9.2でのバックアップ方式
検証で明らかにしたいこと

●
    サーバー数に応じて参照性能は
    スケールアウトするのか?
検証結果
●
    サーバ数1台⇒5台でのスループット




            1台        2台         3台         4台         5台
最大TPS       5099.08   10330.90   13725.50   17132.00   19263.91
1台当たりのTPS   5099.08   5165.45    4575.17    4283.00    3852.78
TPSの伸び率      1.00       2.03       2.69       3.36       3.78
測定方法のこぼれ話
●
    性能測定方法
    –   使用アプリケーション: JPetStore
    –   使用データベース: JPetStore のスキーマを利用
    –   データ件数: ユーザ 1000, 商品 250, 注文 10万
    –   実行SQL
    SELECT
       I.ITEMID,LISTPRICE,UNITCOST,SUPPLIER,I.PRODUCTID,NAME,DESCN,
       CATEGORY,I.STATUS,ATTR1,ATTR2,ATTR3,ATTR4,ATTR5,QTY,O.ORDE
       RDATE, A.email
    FROM ITEM I, INVENTORY V, PRODUCT P, ORDERS O, LINEITEM L,
       ACCOUNT A
    WHERE
       P.PRODUCTID = I.PRODUCTID and I.ITEMID = V.ITEMID
       and I.ITEMID = L.ITEMID and O.ORDERID = L.ORDERID
       and A.USERID=O.USERID and O.USERID = ${user_name} :

           意図的に高負荷の参照SQLを発行
結論

●
    参照性能はスケールする。
●
    かどうかはケースバイケース。。。
    –   スケールしやすい / しにくいケースがあります。
    –   適用シーンに合わせた検証を事前に行いましょう。
報告ケース一覧

検証1: PostgreSQLマスタのフェイルオーバ
検証2: PostgreSQLスレーブのフェイルオーバ
検証3: 停止したPostgreSQLマスタのクラスタ復帰
検証4: PostgreSQLサーバ増加時のスケールアウト
検証5: PostgreSQLサーバ減少時の運用
検証6: マルチマスタ構成でのpgpool-II watchdog
検証7: PostgreSQL 9.2でのバックアップ方式
検証で明らかにしたいこと

●
    サーバをクラスタからスマートに切り離せるか?
シュリンク時の運用手順
                 pcp_detach_node
                コマンドで切り離す           マスター
 Apache   JBoss AS   pgpool-II      PostgreSQL



           pcp_detach_node
          コマンドで切り離す                同期スレーブ
 Apache   JBoss AS   pgpool-II      PostgreSQL



           pcp_detach_node
          コマンドで切り離す                非同期スレーブ
 Apache   JBoss AS   pgpool-II      PostgreSQL



                                                 このサーバを
                                                 切り離したい

1. 対象の非同期スレーブを pgpool-II のSQL振り分け対象から外す。
   ※pcp_detach_node コマンドを使う。
2. 非同期スレーブの PostgreSQL サーバを停止する。
検証結果
●
    負荷をかけた状態で pcp_detach_node
    コマンドを実行し、PostgreSQL非同期スレーブ
    を切り離そうとすると、エラーが返されてしまう。
●
    pcp_detach_node コマンドを実行すると、
    pgpool-II は全てのバックエンドプロセスを
    再起動してしまうのが原因。
結論
●
    サービス稼動状態で、クライアントに影響を
    与えずに PostgreSQL サーバをシュリンク
    させることはできない。

●
    ただ、サービス稼動したままシュリンクさせたい
    という要望は強くない気がする。
ここからは PostgreSQL 9.2、
 pgpool-II 3.2 の新機能に
フォーカスを当ててみます。
報告ケース一覧

検証1: PostgreSQLマスタのフェイルオーバ
検証2: PostgreSQLスレーブのフェイルオーバ
検証3: 停止したPostgreSQLマスタのクラスタ復帰
検証4: PostgreSQLサーバ増加時のスケールアウト
検証5: PostgreSQLサーバ減少時の運用
検証6: マルチマスタ構成でのpgpool-II watchdog
検証7: PostgreSQL 9.2でのバックアップ方式
pgpool-II watchdog とは?
●
     pgpool-II 3.2 で追加された新機能
●
     pgpool-II の死活監視、サーバ間の情報共有が可能




    詳細は http://lets.postgresql.jp/documents/technical/pgpool-II_3.2/watchdog を参照
マルチマスタ構成と watchdog

●
    マルチマスタ構成での pgpool-II 運用の課題
    –   マスターフェイルオーバ時の無駄なスレーブ再起動
        を抑制するため、自前でロックファイルを制御する
        といった運用の工夫が必要だった。(検証1参照)
    –   複数の pgpool-II が互いに連携しないのが原因。

●
    watchdog 機能に寄せる期待
    –   サーバ情報を共有することで、フェイルオーバ
        時の運用をシンプルにできるのでは?
検証で明らかにしたいこと
●
    pgpool-II の watchdog 機能は、
    pgpool-II サーバを複数並べたマルチマスタ構成
    でも有効なのか?
検証結果

●
    PostgreSQLサーバのダウン検出時には、
    全ての pgpool-II サーバで、フェイルオーバ用
    スクリプトが実行される仕様だった。
●
    つまり、フェイルオーバスクリプトのロック制御
    は必要だということ。
結論

●
    Ver 3.2.1 ではマルチマスタ構成において、
    watchdog 機能のメリットを十分享受できず、
    利用を推奨しない。
●
    pgpool-II を Active/Standby 構成で運用する
    ケースでの利用を推奨する。
報告ケース一覧

検証1: PostgreSQLマスタのフェイルオーバ
検証2: PostgreSQLスレーブのフェイルオーバ
検証3: 停止したPostgreSQLマスタのクラスタ復帰
検証4: PostgreSQLサーバ増加時のスケールアウト
検証5: PostgreSQLサーバ減少時の運用
検証6: マルチマスタ構成でのpgpool-II watchdog
検証7: PostgreSQL 9.2でのバックアップ方式
PostgreSQLのバックアップ方式

●
    PostgreSQL のバックアップ方式
    –   オンラインで論理バックアップ ⇒ 性能 ×
    –   オフラインでマスターから取得 ⇒ サービス継続性 ×
    –   オンラインでマスターから取得 ⇒ マスター負荷 ×

●
    9.2より、オンラインでスレーブから取得が可能に
    –   バックアップ中のマスター負荷軽減を期待
    –   pg_basebackup コマンドで実施すること
        pg_start_backup(), pg_stop_backup() は NG
検証で明らかにしたいこと
●
    サービス稼動中に、PostgreSQL スレーブ
    サーバからバックアップが問題なく取得できるか。

●
    PostgreSQLスレーブサーバからバックアップを
    取得する間のマスターサーバへ与える影響は?
検証結果
       ●
           マスターサーバからオンラインバックアップ取得
           –   pg_basebackup コマンドを使用
           –   NFSマウント先のディスクへバックアップ
                                                           オ ン ラ イ ン バ ッ ク ア ッ プ (マ ス タ サ ー バ )
(% )




                 C P U 使 用 率 (マ ス タ )
                                        レ ス ポ ン ス (m s )                                          TPS
100
                                         2400                                                      60
 90                                                                    バ ックア ップ 実 行 中
                                         2200
 80                                      2000                                                      50
 70                                      1800

 60                                      1600                                                      40
                                         1400
 50
                                         1200                                                      30
 40                                      1000
                      バ ック ア ップ 実 行 中
 30                                        800                                                     20

 20                                        600
                                           400                                                     10
 10
                                           200
   0
                                             0                                                     0




       バックアップ処理がマスターサーバのCPUを占有し、
       サービス全体のスループットを下げてしまっている。
検証結果
       ●
           スレーブサーバからオンラインバックアップ取得
           –   pg_basebackup コマンドを使用
           –   NFSマウント先のディスクへバックアップ
(% )
                   C P U 使 用 率 (マ ス タ )                       オ ン ラ イ ン バ ッ ク ア ッ プ (マ ス タ )   TPS
                                          レ ス ポ ン ス (m s )
100
                バ ックア ップ 実 行 中            2400                                                   60
 90
                                          2200
 80                                       2000                                                   50

 70                                       1800
                                          1600               バ ックア ップ実 行 中                       40
 60
                                          1400
 50
                                          1200                                                   30
 40                                       1000

 30                                        800                                                   20
                                           600
 20
                                           400                                                   10
 10                                        200
  0                                           0                                                  0




       バックアップ処理がサービスへ悪影響を与えていない
結論

●
    スレーブサーバからバックアップを取得すれば、
    PostgreSQLストリーミングレプリケーション構成
    で重要なマスターサーバに悪影響を及ぼすこと
    なくバックアップが取得できるため、お勧めです。
おまけ
    Prepared Statement 使用時の問題点
●
    検証中、「Prepared Statement が存在しない」
    旨のエラーが PostgreSQLサーバで発生した。
    ERROR: portal "" cannot be run
    ERROR: bind message supplies 0 parameters, but prepared statement "" requires 1

●
    発生条件: delay_threshold 設定を有効にした時
                                            ② $1 = value ;
        JBoss AS             pgpool-II                       PostgreSQL(マスタ)
                                                                                スレーブへの更新が
                                                             PostgreSQL(スレーブ)   一定以上遅れると
                                                                                強制的にマスタへ振り分け
              ① select * from table where col =$1;
                                                             PostgreSQL(スレーブ)



     delay_threshold 有効時は、①が届いていないマスタへ
     ②を発行することがあり得るために Prepared Statement が
     存在しないエラーが起こる?
対策

●
    石井さんに相談してみました。その結果、、、
●
    1日で修正されました!ありがとうございます。
pgpool-II + PostgreSQL ストリーミング
レプリケーション構成の特徴
●
    pgpool-II は高可用な PostgreSQL クラスタを
    制御する HA クラスタソフトとしても機能する。
    –   PostgreSQLサーバのフェイルオーバ/フェイルバック
    –   コネクションプール、負荷分散も同時利用可

●
    pgpool-II がSPOFとなる問題は冗長化で解決
    –   複数APサーバに配置して、pgpool-II を並行動作
        ●
            クラウド基盤等でスケールアウトさせる用途に向く
    –   シンプルに運用したい場合は watchdog 機能で
        pgpool-II を Active/Standby 構成にしてもよい。
Pacemaker RA + PostgreSQL ストリー
ミングレプリケーション構成との違い
●
    pgpool-II は PostgreSQL がターゲット
    –   PostgreSQLの機能、特徴に合わせた設計
        ●
            ストリーミングレプリケーション構成での HA と
            クエリ内容に応じた SQL 負荷分散が連動する。

●
    Pacemaker はいろんなミドルウェアを制御
    –   サーバ全体を丸ごと HA 化できる。
    –   Pacemaker RA の方が上手な機能もある。
        ●
            同期/非同期スレーブの自動切換
        ●
            pgpool-II は同期/非同期のステータスを制御しないので、
            同期スレーブがダウンした場合にマスター停止の恐れ
今後(pgpool-IIに)期待すること
●
    複数台の pgpool-II を並行稼動させる場合、
    運用面で工夫が必要な部分がある。
    –   マスターフェイルオーバ時の独自ロック制御
    –   watchdog 機能がカバーしてくれないかなぁ。。

●
    複数台の pgpool-II を並行稼動させる場合、
    運用難易度が高いのも課題
    –   同じ設定を全ての pgpool-II サーバに反映する。
    –   サーバ数が増えると設定管理に難あり。
    –   クラスタ環境の設定を1箇所にまとめられないかなぁ。。
最後に
●
    pgpool-II と PostgreSQL ストリーミング
    レプリケーションを組合せて、
    高性能、高可用なクラスタを構築しませんか?

●
    運用にはいくつか工夫、ノウハウが必要です。
    本番稼働させる際は、十分な動作検証と
    運用テストを「自分の手」で行い、習熟しておく
    ことをお勧めします。

Weitere ähnliche Inhalte

Was ist angesagt?

PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会Shigeru Hanada
 
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@KyotoPostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@KyotoShigeru Hanada
 
PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介
PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介
PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介Masao Fujii
 
PL/Pythonで独自の集約関数を作ってみる
PL/Pythonで独自の集約関数を作ってみるPL/Pythonで独自の集約関数を作ってみる
PL/Pythonで独自の集約関数を作ってみるUptime Technologies LLC (JP)
 
PostgreSQL9.1でつくる高可用性にまつわるエトセトラ
PostgreSQL9.1でつくる高可用性にまつわるエトセトラPostgreSQL9.1でつくる高可用性にまつわるエトセトラ
PostgreSQL9.1でつくる高可用性にまつわるエトセトラNTT DATA OSS Professional Services
 
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
MySQLメインの人がPostgreSQLのベンチマークをしてみた話MySQLメインの人がPostgreSQLのベンチマークをしてみた話
MySQLメインの人がPostgreSQLのベンチマークをしてみた話hiroi10
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウトMasahiko Sawada
 
[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介
[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介
[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介Insight Technology, Inc.
 
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告Amazon Web Services Japan
 
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-Yoshinori Nakanishi
 
[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...
[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...
[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...Insight Technology, Inc.
 
MySQL 5.7とレプリケーションにおける改良
MySQL 5.7とレプリケーションにおける改良MySQL 5.7とレプリケーションにおける改良
MySQL 5.7とレプリケーションにおける改良Shinya Sugiyama
 
[D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama
[D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama
[D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama Insight Technology, Inc.
 
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57Takakiyo Tanaka
 
States of Dolphin - MySQL最新技術情報2013秋 -
States of Dolphin - MySQL最新技術情報2013秋 -States of Dolphin - MySQL最新技術情報2013秋 -
States of Dolphin - MySQL最新技術情報2013秋 -yoyamasaki
 
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012Mikiya Okuno
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1Ryosuke IWANAGA
 
MySQLバックアップの基本
MySQLバックアップの基本MySQLバックアップの基本
MySQLバックアップの基本yoyamasaki
 

Was ist angesagt? (20)

PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
 
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@KyotoPostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
 
PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介
PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介
PostgreSQL9.1同期レプリケーションとPacemakerによる高可用クラスタ化の紹介
 
PostgreSQLセキュリティ総復習
PostgreSQLセキュリティ総復習PostgreSQLセキュリティ総復習
PostgreSQLセキュリティ総復習
 
PL/Pythonで独自の集約関数を作ってみる
PL/Pythonで独自の集約関数を作ってみるPL/Pythonで独自の集約関数を作ってみる
PL/Pythonで独自の集約関数を作ってみる
 
PostgreSQL9.1でつくる高可用性にまつわるエトセトラ
PostgreSQL9.1でつくる高可用性にまつわるエトセトラPostgreSQL9.1でつくる高可用性にまつわるエトセトラ
PostgreSQL9.1でつくる高可用性にまつわるエトセトラ
 
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
MySQLメインの人がPostgreSQLのベンチマークをしてみた話MySQLメインの人がPostgreSQLのベンチマークをしてみた話
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
 
[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介
[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介
[db tech showcase Tokyo 2015] C27:楽天MySQL Backup Structure by 楽天株式会社 粟田啓介
 
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
[よくわかるクラウドデータベース] Amazon RDS for PostgreSQL検証報告
 
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
 
[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...
[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...
[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...
 
MySQL 5.7とレプリケーションにおける改良
MySQL 5.7とレプリケーションにおける改良MySQL 5.7とレプリケーションにおける改良
MySQL 5.7とレプリケーションにおける改良
 
Postgres Toolkitのご紹介
Postgres Toolkitのご紹介Postgres Toolkitのご紹介
Postgres Toolkitのご紹介
 
[D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama
[D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama [D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama
[D37]MySQLの真のイノベーションはこれだ!MySQL 5.7と「実験室」 by Ryusuke Kajiyama
 
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
 
States of Dolphin - MySQL最新技術情報2013秋 -
States of Dolphin - MySQL最新技術情報2013秋 -States of Dolphin - MySQL最新技術情報2013秋 -
States of Dolphin - MySQL最新技術情報2013秋 -
 
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
MySQLバックアップの基本
MySQLバックアップの基本MySQLバックアップの基本
MySQLバックアップの基本
 

Andere mochten auch

JPUGしくみ+アプリケーション勉強会(第20回)
JPUGしくみ+アプリケーション勉強会(第20回)JPUGしくみ+アプリケーション勉強会(第20回)
JPUGしくみ+アプリケーション勉強会(第20回)Yoshinori Nakanishi
 
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化kazuhcurry
 
OpenStack勉強会
OpenStack勉強会OpenStack勉強会
OpenStack勉強会Yuki Obara
 
PostgreSQLの冗長化について
PostgreSQLの冗長化についてPostgreSQLの冗長化について
PostgreSQLの冗長化についてSoudai Sone
 

Andere mochten auch (8)

JPUGしくみ+アプリケーション勉強会(第20回)
JPUGしくみ+アプリケーション勉強会(第20回)JPUGしくみ+アプリケーション勉強会(第20回)
JPUGしくみ+アプリケーション勉強会(第20回)
 
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
 
PostgreSQL replication
PostgreSQL replicationPostgreSQL replication
PostgreSQL replication
 
JSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのかJSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのか
 
PostgreSQLレプリケーション徹底紹介
PostgreSQLレプリケーション徹底紹介PostgreSQLレプリケーション徹底紹介
PostgreSQLレプリケーション徹底紹介
 
OpenStack勉強会
OpenStack勉強会OpenStack勉強会
OpenStack勉強会
 
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラPostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラ
 
PostgreSQLの冗長化について
PostgreSQLの冗長化についてPostgreSQLの冗長化について
PostgreSQLの冗長化について
 

Ähnlich wie JPUGしくみ+アプリケーション勉強会(第25回)

PostgreSQL on Amazon EC2の可能性
PostgreSQL on Amazon EC2の可能性PostgreSQL on Amazon EC2の可能性
PostgreSQL on Amazon EC2の可能性Serverworks Co.,Ltd.
 
MySQL負荷分散の方法
MySQL負荷分散の方法MySQL負荷分散の方法
MySQL負荷分散の方法佐久本正太
 
Art of MySQL Replication.
Art of MySQL Replication.Art of MySQL Replication.
Art of MySQL Replication.Mikiya Okuno
 
Website build exercise_opsguide_japanese
Website build exercise_opsguide_japaneseWebsite build exercise_opsguide_japanese
Website build exercise_opsguide_japanesemeilai521
 
JAWSUG版 PostgreSQL on Amazon EC2の可能性
JAWSUG版 PostgreSQL on Amazon EC2の可能性JAWSUG版 PostgreSQL on Amazon EC2の可能性
JAWSUG版 PostgreSQL on Amazon EC2の可能性Serverworks Co.,Ltd.
 
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会Mikiya Okuno
 
Using Chef for Infrastructure Automation of Ameba Pigg
Using Chef for Infrastructure Automation of Ameba PiggUsing Chef for Infrastructure Automation of Ameba Pigg
Using Chef for Infrastructure Automation of Ameba PiggYuuki Namikawa
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)Uptime Technologies LLC (JP)
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門Akihiro Kuwano
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システムTomohiro Ohtake
 
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...Insight Technology, Inc.
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)Yuuki Namikawa
 
PostgreSQL 9.0 in OSC@Tokyo,Okinawa
PostgreSQL 9.0 in OSC@Tokyo,OkinawaPostgreSQL 9.0 in OSC@Tokyo,Okinawa
PostgreSQL 9.0 in OSC@Tokyo,OkinawaTakahiro Itagaki
 
AWSのデータベースサービス全体像
AWSのデータベースサービス全体像AWSのデータベースサービス全体像
AWSのデータベースサービス全体像Amazon Web Services Japan
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説Masahiko Sawada
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 TokyoYoshiyuki Asaba
 
PHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったことPHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったことKentaro Matsui
 
Webサーバ勉強会 LT資料
Webサーバ勉強会 LT資料Webサーバ勉強会 LT資料
Webサーバ勉強会 LT資料学 松崎
 
Chefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについてChefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについてYuuki Namikawa
 

Ähnlich wie JPUGしくみ+アプリケーション勉強会(第25回) (20)

PostgreSQL on Amazon EC2の可能性
PostgreSQL on Amazon EC2の可能性PostgreSQL on Amazon EC2の可能性
PostgreSQL on Amazon EC2の可能性
 
MySQL負荷分散の方法
MySQL負荷分散の方法MySQL負荷分散の方法
MySQL負荷分散の方法
 
Art of MySQL Replication.
Art of MySQL Replication.Art of MySQL Replication.
Art of MySQL Replication.
 
Website build exercise_opsguide_japanese
Website build exercise_opsguide_japaneseWebsite build exercise_opsguide_japanese
Website build exercise_opsguide_japanese
 
JAWSUG版 PostgreSQL on Amazon EC2の可能性
JAWSUG版 PostgreSQL on Amazon EC2の可能性JAWSUG版 PostgreSQL on Amazon EC2の可能性
JAWSUG版 PostgreSQL on Amazon EC2の可能性
 
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
 
Using Chef for Infrastructure Automation of Ameba Pigg
Using Chef for Infrastructure Automation of Ameba PiggUsing Chef for Infrastructure Automation of Ameba Pigg
Using Chef for Infrastructure Automation of Ameba Pigg
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
 
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
 
PostgreSQL 9.0 in OSC@Tokyo,Okinawa
PostgreSQL 9.0 in OSC@Tokyo,OkinawaPostgreSQL 9.0 in OSC@Tokyo,Okinawa
PostgreSQL 9.0 in OSC@Tokyo,Okinawa
 
AWSのデータベースサービス全体像
AWSのデータベースサービス全体像AWSのデータベースサービス全体像
AWSのデータベースサービス全体像
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
 
PHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったことPHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったこと
 
Webサーバ勉強会 LT資料
Webサーバ勉強会 LT資料Webサーバ勉強会 LT資料
Webサーバ勉強会 LT資料
 
Chefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについてChefを利用した運用省力化とDevOpsの取り組みについて
Chefを利用した運用省力化とDevOpsの取り組みについて
 

JPUGしくみ+アプリケーション勉強会(第25回)

  • 1. 日本PostgreSQLユーザ会 第25回しくみ+アプリケーション勉強会 pgpool-II と PostgreSQL ストリーミング レプリケーションを組合わせた 高性能、高可用性クラスタの検証 2013年2月9日 TIS 株式会社 中西 剛紀 (Yoshinori Nakanishi)
  • 2. はじめに ● 今回は、PostgreSQLでクラスタを組む時のお話 – PostgreSQLストリーミングレプリケーションと pgpool-II を組合せて高性能、高可用性を狙います。 – 実際の検証結果から、このクラスタの特徴や 運用のノウハウや注意点を紹介します。 ● クラスタを運用するノウハウがメインです。 – PostgreSQLのコアな仕組みはあまり解説しません。 – PostgreSQLストリーミングレプリケーションや pgpool-IIがどんなものか知っている前提で話します。
  • 3. 自己紹介(あんた誰よ?) ● 中西 剛紀 (なかにし よしのり) ● 所属: TIS株式会社 戦略技術センター – 「海岸沿いのSIer」 とか呼ばれてた会社 – いわゆる R&D 部門です。 ● OSS活用推進を担当しています。 – 社内でOSSを使ってもらうための支援 – 元々は商用DBMSメインのDB屋さん – 3年前から PostgreSQL ばっかり触ってます。
  • 4. OSS推奨スタック「ISHIGAKI Template」 ● 推奨OSSを組合せたアプリケーション基盤 – 今後も発展が期待でき、商用サポートも利用可能な ミドルウェアを中心に選定した OSS で構成 – 組合せた状態での独自検証を経て、 カスタマイズした設定やドキュメント等も整備 ● 続きは WEB で – OSSマイグレーションサービス http://www.tis.jp/service_solution/ossmigration/
  • 5. ISHIGAKI HA JBoss AS PostgreSQL Apache リソース監視 Activeサーバ Pacemaker DRBD 死活監視 データ同期 Standbyサーバ Pacemaker DRBD JBoss AS PostgreSQL Apache Active/Standby型でサーバーを冗長化したクラスタ ○ シンプルな構成でサーバーの可用性を向上 × 性能はスケールしない
  • 6. ISHIGAKI Cluster ロードバランサ、PostgreSQLのHA Ver 2.2.15 Ver 5.1.0 Ver 3.1.3 マスター Ver 6.2 Apache HTTP Server JBoss AS pgpool-II PostgreSQL mod_jk Ver 9.1.2 ストリーミング セッションレプリケート 参照負荷分散 レプリケーション スレーブ Apache HTTP Server JBoss AS pgpool-II PostgreSQL mod_jk スレーブ Apache HTTP Server JBoss AS pgpool-II PostgreSQL mod_jk Active/Active型でサーバーを冗長化したクラスタ ○ スケールアウトに向く構成 × 構成が複雑で運用の難易度は高い
  • 7. pgpool-II の配置について 専用のサーバに配置 【長所】 ● 分かりやすい ● 他ソフトの影響を受けず、最も安全に運営できる。 【短所】 ● サーバを1台余計に増やす必要がある。 ● pgpool-II のサーバが単一障害点になる。 Webサーバやアプリケーション 【長所】 サーバ(APサーバ)と同居 ● Web/APサーバと pgpool-II がローカル通信で高速 ● 複数のWeb/APサーバがあれば、 自然と単一障害点を回避できる 【短所】 ● 複数の pgpool-II を並行動作させる運用が煩雑 DBサーバと同居 【長所】 ● pgpool-IIが単一障害点になることがない(?)。 ● 余計なサーバを追加する必要もない。 【短所】 ● アプリケーションがどのDBサーバに接続するのか を自ら判断する必要がある。 ※ pgpool-II ユーザマニュアルより抜粋 http://pgpool.projects.pgfoundry.org/pgpool-II/doc/pgpool-ja.html
  • 8. ISHIGAKI Cluster の検証パターン 分類 テストケース 可用性 PostgreSQLマスターサーバ障害時のフェイルオーバ PostgreSQL同期スレーブサーバ障害時のフェイルオーバ PostgreSQL非同期スレーブサーバ障害時のフェイルオーバ JBoss、pgpool-IIサーバ障害時のフェイルオーバ 性能 PostgreSQLサーバ数の増加による性能向上 JBossサーバ数の増加による性能向上 運用性 停止したPostgreSQLマスターサーバのフェイルバック サービス稼働中のJBossサーバ追加/削除 サービス稼働中のPostgreSQLサーバ追加/削除 PostgreSQLのDBデータのバックアップ 本発表は、上記の検証結果の一部をご紹介します。
  • 9. 本発表の協賛 ● 本発表は SRA OSS Inc. 日本支社様にも ご協力いただきました。 – 我々の検証結果に対するレビュー、アドバイス ● 石井様には特にお世話になりました。 – pgpool-II の修正パッチも提供いただきました。
  • 10. 報告ケース一覧 検証1: PostgreSQLマスタのフェイルオーバ 検証2: PostgreSQLスレーブのフェイルオーバ 検証3: 停止したPostgreSQLマスタのクラスタ復帰 検証4: PostgreSQLサーバ増加時のスケールアウト 検証5: PostgreSQLサーバ減少時の運用 検証6: マルチマスタ構成でのpgpool-II watchdog 検証7: PostgreSQL 9.2でのバックアップ方式
  • 11. 報告ケース一覧 検証1: PostgreSQLマスタのフェイルオーバ 検証2: PostgreSQLスレーブのフェイルオーバ 検証3: 停止したPostgreSQLマスタのクラスタ復帰 検証4: PostgreSQLサーバ増加時のスケールアウト 検証5: PostgreSQLサーバ減少時の運用 検証6: マルチマスタ構成でのpgpool-II watchdog 検証7: PostgreSQL 9.2でのバックアップ方式
  • 12. 検証で明らかにしたいこと ● PostgreSQLのマスターサーバが停まっても サービスは継続できるのか? ● マスターサーバをフェイルオーバしてサービス 継続を図るのであれば、マスターサーバ停止 ~サービス再開までどれ位時間がかかるのか?
  • 13. マスターフェイルオーバの動作 障害検知 障害発生 マスター Apache JBoss AS pgpool-II PostgreSQL マスター昇格 新マスター Apache JBoss AS pgpool-II PostgreSQL 非同期スレーブ Apache JBoss AS pgpool-II PostgreSQL 1. 各APサーバ上のpgpool-IIがPostgreSQL(マスター)の障害を検知する。 該当サーバはクラスタから切り離され、DB処理を振り分けなくなる。 2. 障害を検知したpgpool-IIがスレーブのPostgreSQLに対して、 マスタへの昇格を実行する。 3. pgpool-IIが、残ったスレーブのPostgreSQL全てに、レプリケーション先の 変更設定を行い、PostgreSQLを再起動する。
  • 14. マスターフェイルオーバの動作 障害検知 障害発生 マスター Apache JBoss AS pgpool-II PostgreSQL 新マスター Apache JBoss AS pgpool-II PostgreSQL 同期スレーブ Apache JBoss AS pgpool-II PostgreSQL 新マスターへ接続 1. 各APサーバ上のpgpool-IIがPostgreSQL(マスター)の障害を検知する。 該当サーバはクラスタから切り離され、DB処理を振り分けなくなる。 2. 障害を検知したpgpool-IIがスレーブのPostgreSQLに対して、 マスタへの昇格を実行する。 3. pgpool-IIが、残ったスレーブのPostgreSQL全てに、レプリケーション先の 変更設定を行い、PostgreSQLを再起動する。
  • 15. 検証結果 フェイルオーバ前後のスループット遷移 ① マスター強制停止(OSハングアップ) TPS マスターに割り振られた処理が待機状態になり、 300 ① ②③ ④ ⑤ スループットが急激に低下する 250 52秒 ② マスターの停止を検知し、フェイルオーバ開始 200 待機状態になっていたリクエストがエラーで返され、 スループットが少し回復する。 150 ③ 新マスタの昇格完了 100 成 功 失 敗 引き続き非同期スレーブから同期スレーブへの 50 昇格処理が始まる。この時点では同期スレーブが 存在せず、更新処理は待機状態になる。 0 1 9 :1 1 :3 0 1 9 :1 2 :0 0 1 9 :1 2 :3 0 1 9 :1 3 :0 0 1 9 :1 3 :3 0 1 9 :1 4 :0 0 1 9 :1 4 :3 0 ④ 新同期スレーブの再起動完了 新同期スレーブサーバでの参照が可能になる。 ⑤ 新同期スレーブの昇格完了 新同期スレーブのデータの再同期が終了して マスターサーバ停止~ 昇格完了。マスタでの更新が可能になり、 サービス完全再開まで1分弱 フェイルオーバ前と同等のスループットに戻る。
  • 16. TIPS: pgpool-IIマルチマスタ構成    でのフェイルオーバ運用注意点 フェーズ1: スレーブサーバのマスタ昇格 (failover_stream.sh) 2.障害検知 1.障害発生 マスター Apache JBoss AS pgpool-II PostgreSQL 4.障害検知 3.マスター昇格中 同期スレーブ Apache JBoss AS pgpool-II PostgreSQL 5.障害検知 非同期スレーブ Apache JBoss AS pgpool-II PostgreSQL  初回の昇格要求でマスタ化処理開始  以降の昇格要求はメッセージを返すのみ 問題なし
  • 17. TIPS: pgpool-IIマルチマスタ構成    でのフェイルオーバ運用注意点 フェーズ2: 他スレーブを新しいマスタへ再接続 (follow_master.sh) 2.設定変更・再起動 マスター Apache JBoss AS pgpool-II PostgreSQL 4.設定変更・再起動 1.マスター昇格完了 新マスター Apache JBoss AS pgpool-II PostgreSQL 3.新マスター 5.設定変更・再起動 に接続 非同期スレーブ Apache JBoss AS pgpool-II PostgreSQL  無駄な再起動がかかってしまう ちと問題
  • 18. 対策案 ● ロックファイルを作って余計な再起動を抑制する。 ● フェーズ2で実行される follow_master.sh から 呼び出される各スレーブの follow.sh に一工夫。 if [ -f $LOCKFILE ] then // ロックファイルが存在すれば、何もしない else  // ロックファイルがなければ、ロックファイルを作成してメイン処理を実行 touch $LOCKFILE # スレーブのrecovery.confを作成 echo "standby_mode = on" > $SLAVE_BASEDIR/$CHECKFILE echo "primary_conninfo = 'host=$NEW_MASTER_HOST port=5432 … '" >> $SLAVE_BASEDIR/$CHECKFILE echo "recovery_target_timeline = 'latest'" >> $SLAVE_BASEDIR/$CHECKFILE echo "restore_command = 'cp $BACKUPDIR/%f %p'" >> $SLAVE_BASEDIR/$CHECKFILE /usr/bin/cmp -s $SLAVE_BASEDIR/$CHECKFILE $SLAVE_BASEDIR/recovery.conf if [ $? -ne 0 ] ; then mv $SLAVE_BASEDIR/$CHECKFILE $SLAVE_BASEDIR/recovery.conf # スレーブのPostgreSQLを停止 $PGCTL -m fast -w -D $SLAVE_BASEDIR stop 2>/dev/null 1>/dev/null # スレーブのPostgreSQLを起動 $PGCTL -w -D $SLAVE_BASEDIR start 2>/dev/null 1>/dev/null else rm -f $SLAVE_BASEDIR/$CHECKFILE fi // ロックファイルを削除して終了 rm $LOCKFILE fi
  • 19. 結論 ● PostgreSQLマスターがダウンしても、 pgpool-II がキチンとフェイルオーバしてくれます。 ● フェイルオーバが完了するまでの時間は約1分。 – 障害検知までの時間は設定次第 – 切り替え時間は直前の更新負荷量にも依存 ● pgpool-II が複数稼動する環境では、 無駄なスレーブ再起動を防止する工夫が必要。
  • 20. 報告ケース一覧 検証1: PostgreSQLマスタのフェイルオーバ 検証2: PostgreSQLスレーブのフェイルオーバ 検証3: 停止したPostgreSQLマスタのクラスタ復帰 検証4: PostgreSQLサーバ増加時のスケールアウト 検証5: PostgreSQLサーバ減少時の運用 検証6: マルチマスタ構成でのpgpool-II watchdog 検証7: PostgreSQL 9.2でのバックアップ方式
  • 21. 検証で明らかにしたいこと ● PostgreSQL の同期/非同期スレーブが 停まってもサービスは継続できるのか?
  • 22. 同期スレーブフェイルオーバ時の動作 障害検知 マスター Apache JBoss AS pgpool-II PostgreSQL 障害発生 同期スレーブ Apache JBoss AS pgpool-II PostgreSQL 同期スレーブ Apache JBoss AS pgpool-II PostgreSQL 同期スレーブ昇格 1. 各APサーバ上のpgpool-IIがPostgreSQL(同期スレーブ)の障害を検知する。 該当サーバはクラスタから切り離され、DB処理を振り分けなくなる。 2. PostgreSQLの機能により、非同期スレーブから同期スレーブへの 昇格が実行される。 ※ 非同期⇒同期スレーブの昇格は pgpool-II が行うわけではないことに注意
  • 23. 非同期スレーブ停止時の内部動作 障害検知 マスター Apache JBoss AS pgpool-II PostgreSQL 同期スレーブ Apache JBoss AS pgpool-II PostgreSQL 障害発生 非同期スレーブ Apache JBoss AS pgpool-II PostgreSQL 1. 各APサーバ上のpgpool-IIがPostgreSQL(非同期スレーブ)の障害を検知する。 該当サーバはクラスタから切り離され、DB処理を振り分けなくなる。 ※ 障害が発生した非同期スレーブを切り離す以外は何もしない。
  • 24. 検証結果(同期スレーブ) フェイルオーバ前後のスループット遷移 TPS ① 同期スレーブ強制停止(OSハングアップ) ① ② ③ 同期スレーブに割り振られた処理が待機状態 300 になり、スループットが急激に低下する 250 62秒 200 ② 同期スレーブ停止を検知し、フェイルオーバ開始 参照処理のみ可能な状態になり、 150 スループットが少し回復する。 100 ③ 新同期スレーブの昇格完了 成 功 50 失 敗 更新可能な状態になり、スループットが回復する。 0 9 :2 7 :1 5 9 :2 7 :4 5 9 :2 8 :1 5 9 :2 8 :4 5 9 :2 9 :1 5 9 :2 9 :4 5 9 :3 0 :1 5 マスターサーバ停止~サービス完全再開まで約1分
  • 25. 検証結果(非同期スレーブ) フェイルオーバ前後のスループット遷移 TPS ① 非同期スレーブ強制停止(OSハングアップ) 300 ① ② ③ 非同期スレーブに割り振られた処理が待機状態 になり、スループットが急激に低下する 250 39秒 200 ② 非同期スレーブ停止を検知 非同期スレーブを切り離して、スループットが 150 回復し始める。 100 ③ スループットが障害前レベルに回復する。 成 功 50 失 敗 0 1 0 :3 5 :4 5 1 0 :3 6 :1 5 1 0 :3 6 :4 5 1 0 :3 7 :1 5 1 0 :3 7 :4 5 1 0 :3 8 :1 5 1 0 :3 8 :4 5 マスターサーバ停止~サービス完全再開まで約40秒
  • 26. 結論 ● 同期スレーブのフェイルオーバもキチンとできます。 – まあ、PostgreSQL側でやっているわけですが。 ● 非同期スレーブは切り離されるだけなので、 障害発生時の影響が最も小さい。
  • 27. 報告ケース一覧 検証1: PostgreSQLマスタのフェイルオーバ 検証2: PostgreSQLスレーブのフェイルオーバ 検証3: 停止したPostgreSQLマスタのクラスタ復帰 検証4: PostgreSQLサーバ増加時のスケールアウト 検証5: PostgreSQLサーバ減少時の運用 検証6: マルチマスタ構成でのpgpool-II watchdog 検証7: PostgreSQL 9.2でのバックアップ方式
  • 28. 検証で明らかにしたいこと ● 停止したマスタをクラスタに復帰できるのか? ● サービスを稼動させた状態でも、クラスタに 復帰できるのか?
  • 29. フェイルバック時の内部動作 旧マスター Apache JBoss AS pgpool-II PostgreSQL 新マスタから 新マスター リカバリ Apache JBoss AS pgpool-II PostgreSQL 同期スレーブ Apache JBoss AS pgpool-II PostgreSQL 1. 旧マスターのDBを一度消去し、新マスターのDBからリカバリする。  ※pg_basebackup コマンドを使う。 2. 非同期スレーブとして起動し、新マスターとのレプリケーションを開始する。 ※recovery.conf を作成して起動する。 3. 2.で起動した非同期スレーブを pgpool-II 配下に参加させる。 ※pgpool-II の pcp_attach_node コマンドを使う。
  • 30. フェイルバック時の内部動作 非同期スレーブ Apache JBoss AS pgpool-II PostgreSQL 新マスター Apache JBoss AS pgpool-II PostgreSQL 同期スレーブ Apache JBoss AS pgpool-II PostgreSQL 1. 旧マスターのDBを一度消去し、新マスターのDBからリカバリする。  ※pg_basebackup コマンドを使う。 2. 非同期スレーブとして起動し、新マスターとのレプリケーションを開始する。 ※recovery.conf を作成して起動する。 3. 2.で起動した非同期スレーブを pgpool-II 配下に参加させる。 ※pgpool-II の pcp_attach_node コマンドを使う。
  • 31. 検証結果 ● 前述の手順で、ダウンしたマスタを復帰できた。 ● サービスを稼動させた状態で復帰させてもOK – クライアントから見たスループットに変化はなかった。 – 復帰作業中、特にエラーも発生しなかった。
  • 32. TIPS: フェイルバック時の注意事項 ● PostgreSQLマスターのプロセスのみがダウンし た時に問題が発生する。 プロセスのみダウン (サーバ自体は生きてる) recovery.conf があるので ReadOnly で 旧マスター 起動されるが、DB内部はマスターの状態 PostgreSQL 設定変更・再起動 新マスター Apache JBoss AS pgpool-II PostgreSQL 一番上のサーバに更新処理を送 非同期スレーブ るが、更新できずエラーになる PostgreSQL レプリケーションの接続先として一番上のサー バが指定されるが、マスタではないのでレプリ ケーションできない
  • 33. 対策案 ● 自ノードが旧マスタであれば、PostgreSQLを 自動的に再起動しないようスクリプトを改修 ● フェーズ2で実行する follow_master.sh に一工夫。 # これから実行するサーバが旧マスターであれば、何も行わない。 if [ $NODE_ID = $OLD_MASTER_NODE_ID ] ; then exit 1 fi # 旧マスター以外のスレーブは follow.sh を呼び出し、recovery.conf の作成と再起動を行う。 MSG=`ssh $SLAVE_HOST /etc/ishigaki/postgresql/follow.sh $NEW_MASTER_HOST $SLAVE_HOST $SLAVE_BASEDIR 2>&1`
  • 34. 結論 ● 停止したマスターのフェイルバックもできます。 ● マスタープロセスがダウンするケースに備えて、 運用スクリプトを実装しておきましょう。
  • 35. 報告ケース一覧 検証1: PostgreSQLマスタのフェイルオーバ 検証2: PostgreSQLスレーブのフェイルオーバ 検証3: 停止したPostgreSQLマスタのクラスタ復帰 検証4: PostgreSQLサーバ増加時のスケールアウト 検証5: PostgreSQLサーバ減少時の運用 検証6: マルチマスタ構成でのpgpool-II watchdog 検証7: PostgreSQL 9.2でのバックアップ方式
  • 36. 検証で明らかにしたいこと ● サーバー数に応じて参照性能は スケールアウトするのか?
  • 37. 検証結果 ● サーバ数1台⇒5台でのスループット 1台 2台 3台 4台 5台 最大TPS 5099.08 10330.90 13725.50 17132.00 19263.91 1台当たりのTPS 5099.08 5165.45 4575.17 4283.00 3852.78 TPSの伸び率 1.00 2.03 2.69 3.36 3.78
  • 38. 測定方法のこぼれ話 ● 性能測定方法 – 使用アプリケーション: JPetStore – 使用データベース: JPetStore のスキーマを利用 – データ件数: ユーザ 1000, 商品 250, 注文 10万 – 実行SQL SELECT I.ITEMID,LISTPRICE,UNITCOST,SUPPLIER,I.PRODUCTID,NAME,DESCN, CATEGORY,I.STATUS,ATTR1,ATTR2,ATTR3,ATTR4,ATTR5,QTY,O.ORDE RDATE, A.email FROM ITEM I, INVENTORY V, PRODUCT P, ORDERS O, LINEITEM L, ACCOUNT A WHERE P.PRODUCTID = I.PRODUCTID and I.ITEMID = V.ITEMID and I.ITEMID = L.ITEMID and O.ORDERID = L.ORDERID and A.USERID=O.USERID and O.USERID = ${user_name} : 意図的に高負荷の参照SQLを発行
  • 39. 結論 ● 参照性能はスケールする。 ● かどうかはケースバイケース。。。 – スケールしやすい / しにくいケースがあります。 – 適用シーンに合わせた検証を事前に行いましょう。
  • 40. 報告ケース一覧 検証1: PostgreSQLマスタのフェイルオーバ 検証2: PostgreSQLスレーブのフェイルオーバ 検証3: 停止したPostgreSQLマスタのクラスタ復帰 検証4: PostgreSQLサーバ増加時のスケールアウト 検証5: PostgreSQLサーバ減少時の運用 検証6: マルチマスタ構成でのpgpool-II watchdog 検証7: PostgreSQL 9.2でのバックアップ方式
  • 41. 検証で明らかにしたいこと ● サーバをクラスタからスマートに切り離せるか?
  • 42. シュリンク時の運用手順 pcp_detach_node コマンドで切り離す マスター Apache JBoss AS pgpool-II PostgreSQL pcp_detach_node コマンドで切り離す 同期スレーブ Apache JBoss AS pgpool-II PostgreSQL pcp_detach_node コマンドで切り離す 非同期スレーブ Apache JBoss AS pgpool-II PostgreSQL このサーバを 切り離したい 1. 対象の非同期スレーブを pgpool-II のSQL振り分け対象から外す。 ※pcp_detach_node コマンドを使う。 2. 非同期スレーブの PostgreSQL サーバを停止する。
  • 43. 検証結果 ● 負荷をかけた状態で pcp_detach_node コマンドを実行し、PostgreSQL非同期スレーブ を切り離そうとすると、エラーが返されてしまう。 ● pcp_detach_node コマンドを実行すると、 pgpool-II は全てのバックエンドプロセスを 再起動してしまうのが原因。
  • 44. 結論 ● サービス稼動状態で、クライアントに影響を 与えずに PostgreSQL サーバをシュリンク させることはできない。 ● ただ、サービス稼動したままシュリンクさせたい という要望は強くない気がする。
  • 45. ここからは PostgreSQL 9.2、 pgpool-II 3.2 の新機能に フォーカスを当ててみます。
  • 46. 報告ケース一覧 検証1: PostgreSQLマスタのフェイルオーバ 検証2: PostgreSQLスレーブのフェイルオーバ 検証3: 停止したPostgreSQLマスタのクラスタ復帰 検証4: PostgreSQLサーバ増加時のスケールアウト 検証5: PostgreSQLサーバ減少時の運用 検証6: マルチマスタ構成でのpgpool-II watchdog 検証7: PostgreSQL 9.2でのバックアップ方式
  • 47. pgpool-II watchdog とは? ● pgpool-II 3.2 で追加された新機能 ● pgpool-II の死活監視、サーバ間の情報共有が可能 詳細は http://lets.postgresql.jp/documents/technical/pgpool-II_3.2/watchdog を参照
  • 48. マルチマスタ構成と watchdog ● マルチマスタ構成での pgpool-II 運用の課題 – マスターフェイルオーバ時の無駄なスレーブ再起動 を抑制するため、自前でロックファイルを制御する といった運用の工夫が必要だった。(検証1参照) – 複数の pgpool-II が互いに連携しないのが原因。 ● watchdog 機能に寄せる期待 – サーバ情報を共有することで、フェイルオーバ 時の運用をシンプルにできるのでは?
  • 49. 検証で明らかにしたいこと ● pgpool-II の watchdog 機能は、 pgpool-II サーバを複数並べたマルチマスタ構成 でも有効なのか?
  • 50. 検証結果 ● PostgreSQLサーバのダウン検出時には、 全ての pgpool-II サーバで、フェイルオーバ用 スクリプトが実行される仕様だった。 ● つまり、フェイルオーバスクリプトのロック制御 は必要だということ。
  • 51. 結論 ● Ver 3.2.1 ではマルチマスタ構成において、 watchdog 機能のメリットを十分享受できず、 利用を推奨しない。 ● pgpool-II を Active/Standby 構成で運用する ケースでの利用を推奨する。
  • 52. 報告ケース一覧 検証1: PostgreSQLマスタのフェイルオーバ 検証2: PostgreSQLスレーブのフェイルオーバ 検証3: 停止したPostgreSQLマスタのクラスタ復帰 検証4: PostgreSQLサーバ増加時のスケールアウト 検証5: PostgreSQLサーバ減少時の運用 検証6: マルチマスタ構成でのpgpool-II watchdog 検証7: PostgreSQL 9.2でのバックアップ方式
  • 53. PostgreSQLのバックアップ方式 ● PostgreSQL のバックアップ方式 – オンラインで論理バックアップ ⇒ 性能 × – オフラインでマスターから取得 ⇒ サービス継続性 × – オンラインでマスターから取得 ⇒ マスター負荷 × ● 9.2より、オンラインでスレーブから取得が可能に – バックアップ中のマスター負荷軽減を期待 – pg_basebackup コマンドで実施すること pg_start_backup(), pg_stop_backup() は NG
  • 54. 検証で明らかにしたいこと ● サービス稼動中に、PostgreSQL スレーブ サーバからバックアップが問題なく取得できるか。 ● PostgreSQLスレーブサーバからバックアップを 取得する間のマスターサーバへ与える影響は?
  • 55. 検証結果 ● マスターサーバからオンラインバックアップ取得 – pg_basebackup コマンドを使用 – NFSマウント先のディスクへバックアップ オ ン ラ イ ン バ ッ ク ア ッ プ (マ ス タ サ ー バ ) (% ) C P U 使 用 率 (マ ス タ ) レ ス ポ ン ス (m s ) TPS 100 2400 60 90 バ ックア ップ 実 行 中 2200 80 2000 50 70 1800 60 1600 40 1400 50 1200 30 40 1000 バ ック ア ップ 実 行 中 30 800 20 20 600 400 10 10 200 0 0 0 バックアップ処理がマスターサーバのCPUを占有し、 サービス全体のスループットを下げてしまっている。
  • 56. 検証結果 ● スレーブサーバからオンラインバックアップ取得 – pg_basebackup コマンドを使用 – NFSマウント先のディスクへバックアップ (% ) C P U 使 用 率 (マ ス タ ) オ ン ラ イ ン バ ッ ク ア ッ プ (マ ス タ ) TPS レ ス ポ ン ス (m s ) 100 バ ックア ップ 実 行 中 2400 60 90 2200 80 2000 50 70 1800 1600 バ ックア ップ実 行 中 40 60 1400 50 1200 30 40 1000 30 800 20 600 20 400 10 10 200 0 0 0 バックアップ処理がサービスへ悪影響を与えていない
  • 57. 結論 ● スレーブサーバからバックアップを取得すれば、 PostgreSQLストリーミングレプリケーション構成 で重要なマスターサーバに悪影響を及ぼすこと なくバックアップが取得できるため、お勧めです。
  • 58. おまけ Prepared Statement 使用時の問題点 ● 検証中、「Prepared Statement が存在しない」 旨のエラーが PostgreSQLサーバで発生した。 ERROR: portal "" cannot be run ERROR: bind message supplies 0 parameters, but prepared statement "" requires 1 ● 発生条件: delay_threshold 設定を有効にした時 ② $1 = value ; JBoss AS pgpool-II PostgreSQL(マスタ) スレーブへの更新が PostgreSQL(スレーブ) 一定以上遅れると 強制的にマスタへ振り分け ① select * from table where col =$1; PostgreSQL(スレーブ) delay_threshold 有効時は、①が届いていないマスタへ ②を発行することがあり得るために Prepared Statement が 存在しないエラーが起こる?
  • 59. 対策 ● 石井さんに相談してみました。その結果、、、 ● 1日で修正されました!ありがとうございます。
  • 60. pgpool-II + PostgreSQL ストリーミング レプリケーション構成の特徴 ● pgpool-II は高可用な PostgreSQL クラスタを 制御する HA クラスタソフトとしても機能する。 – PostgreSQLサーバのフェイルオーバ/フェイルバック – コネクションプール、負荷分散も同時利用可 ● pgpool-II がSPOFとなる問題は冗長化で解決 – 複数APサーバに配置して、pgpool-II を並行動作 ● クラウド基盤等でスケールアウトさせる用途に向く – シンプルに運用したい場合は watchdog 機能で pgpool-II を Active/Standby 構成にしてもよい。
  • 61. Pacemaker RA + PostgreSQL ストリー ミングレプリケーション構成との違い ● pgpool-II は PostgreSQL がターゲット – PostgreSQLの機能、特徴に合わせた設計 ● ストリーミングレプリケーション構成での HA と クエリ内容に応じた SQL 負荷分散が連動する。 ● Pacemaker はいろんなミドルウェアを制御 – サーバ全体を丸ごと HA 化できる。 – Pacemaker RA の方が上手な機能もある。 ● 同期/非同期スレーブの自動切換 ● pgpool-II は同期/非同期のステータスを制御しないので、 同期スレーブがダウンした場合にマスター停止の恐れ
  • 62. 今後(pgpool-IIに)期待すること ● 複数台の pgpool-II を並行稼動させる場合、 運用面で工夫が必要な部分がある。 – マスターフェイルオーバ時の独自ロック制御 – watchdog 機能がカバーしてくれないかなぁ。。 ● 複数台の pgpool-II を並行稼動させる場合、 運用難易度が高いのも課題 – 同じ設定を全ての pgpool-II サーバに反映する。 – サーバ数が増えると設定管理に難あり。 – クラスタ環境の設定を1箇所にまとめられないかなぁ。。
  • 63. 最後に ● pgpool-II と PostgreSQL ストリーミング レプリケーションを組合せて、 高性能、高可用なクラスタを構築しませんか? ● 運用にはいくつか工夫、ノウハウが必要です。 本番稼働させる際は、十分な動作検証と 運用テストを「自分の手」で行い、習熟しておく ことをお勧めします。