Pacemaker+PostgreSQLレプリケーションで
共有ディスクレス高信頼クラスタの構築
OSC 2013 Tokyo/Spring

                        松尾 隆利
まずはPostgreSQLの
ストリーミングレプリケーションの
     簡単な紹介



Copyright(c)2013 NTT, Inc. All Rights Reserved.   2
PostgreSQLのレプリケーションとは?
 複数のサーバにデータベースを自動的に複製する機能
  ■ PostgreSQL 9.0 : 非同期レプリケーション機能
               9.1 : 同期レプリケーション機能
               9.2 : カスケードレプリケーション機能

           書き込み
      Master   非同期    Slave                                                   Slave
                                                                カスケード
             レプリケーション                                         レプリケーション


                              応答                   Slave     カスケード    Slave
   同期                                                      レプリケーション
レプリケーション
 Copyright(c)2013 NTT, Inc. All Rights Reserved.                                      3
非同期レプリケーション (PostgreSQL 9.0~)
 名前の通り、Masterへ書き込み発生時、
  レプリケーションは非同期で実行
 故障発生時、データ欠損の可能性あり
 複数のSlaveを接続可能

           書き込み
      Master   非同期    Slave
             レプリケーション




 Copyright(c)2013 NTT, Inc. All Rights Reserved.   4
同期レプリケーション (PostgreSQL 9.1~)
 Master故障時のデータ欠損なし
 同期で動作できるSlaveは一つのみ
   ■ 複数のSlaveを同期設定で接続した場合、1ノードだけ同期で動作
 Slave故障時、MasterはSlaveが復旧するまで待つ
  → トランザクション停止!
                      ?


                    書き込み
       Master



                          応答待ち!
                           応答
                                                    Slave
   同期
レプリケーション

  Copyright(c)2013 NTT, Inc. All Rights Reserved.           5
カスケードレプリケーション (PostgreSQL 9.2~)
 SlaveからSlaveへレプリケーション
 ■ MasterのCPUやネットワーク負荷の削減が可能
 カスケードレプリケーションの動作は全て非同期



                   書き込み
      Master                                               Slave     カスケード      Slave
                                                                   レプリケーション


                                                   Slave     カスケード      Slave
                                                           レプリケーション



 Copyright(c)2013 NTT, Inc. All Rights Reserved.                                        6
Slaveの特徴
 参照系のSQLを処理可能
 SlaveからMasterに接続し、切断時は自動で再接続を試みる
 レプリケーションの接続先は動的に変更できない
   ■ 変更にはSlaveのPostgreSQLの再起動が必要
 同期・非同期の設定はSlave側では制御できない
 ■ Master側のpostgresql.confの "synchronous_standby_names" の値を変
   更し設定をリロード (再起動は必要なし)


                                                           参照可

 Master                                            Slave

 Copyright(c)2013 NTT, Inc. All Rights Reserved.                 7
レプリケーション使用時の注意点①
 SlaveにWALを書きこむ前にMasterが故障した場合、
  MasterとSlave のデータ間に不整合が発生

                       書き込み
         Master                                    Slave   → Master
                                 ②WAL転送

               ① WAL書き込み                             ③ WAL書き込み
           WAL                      不整合

     この状態でSlaveをMasterに昇格させ、旧MasterをSlave
       として組み込む場合、手動でデータの同期が必要
 Pacemaker使用時、この状態が起きた場合は旧Masterにロックファイルを
     残すことで、不整合のデータをもったPostgreSQLの起動を抑止
 Copyright(c)2013 NTT, Inc. All Rights Reserved.                      8
レプリケーション使用時の注意点②
 "TimelineID"の存在
  ■ SlaveからMasterへ昇格した際インクリメントされる数値
 TimelineID が異なるとレプリケーションできない
                                                   Slave   → Master

              5                               5       6
                                異なる

       SlaveのTimelineIDをMasterと同期させるには
Master側で生成されるWALアーカイブをSlave 側にコピーするか
                 データの同期が必要
 Copyright(c)2013 NTT, Inc. All Rights Reserved.                      9
以上レプリケーションの紹介

      ここからは高信頼(HA)クラスタ




Copyright(c)2013 NTT, Inc. All Rights Reserved.   10
HAクラスタの今までの構成 ~Active/Standby 構成~
 PostgreSQLのデータは共有ディスク上に配置し通常はActive
  サーバでサービスを提供
 Activeサーバ故障時はStandbyサーバがActiveとなりサービスを
  提供 (フェイルオーバ)




                                                             フェイル
  Active                                     Standby         オーバ     Active


                                                       故障
                           データ                         発生     データ


               共有ディスク                                       共有ディスク
  Copyright(c)2013 NTT, Inc. All Rights Reserved.                             11
レプリケーション構成 ~Master/Slave 構成~
 PostgreSQLのストリーミングレプリケーション機能を用いてデー
  タを共有し、通常はMaster側でサービスを提供
 Masterサーバ故障時はSlaveサーバがMasterに昇格しサービスを
  継続




                                                                         フェイル
 Master                                             Slave                 オーバ     Master


                                                            故障
           データ                             データ
                                                            発生     データ          データ

 ローカルディスク
        ローカルディスク                                                 ローカルディスク
                                                                        ローカルディスク
  Copyright(c)2013 NTT, Inc. All Rights Reserved.                                      12
レプリケーション構成の高信頼クラスタ 3大機能
                                                                 ①フェイルオーバ

                                                    Master
                                                    故障発生
                                                                                    Master
                                                                        フェイル                 ③
                                                               故障        オーバ
                                                                                             デ
Master 同期設定                                Slave                                             ー
                                                                  古
                                                                DBデータ          DBデータ
                                                                                             タ
                                                                                             の
                                                                                             状
                                                             ②同期・非同期の設定切替                    態
  DBデータ                         DBデータ                                                        管
                                                     Slave                                   理
                                                    故障発生
                                                             Master     非同期設定
                                                                                  故障

                                                                DBデータ
                                                                                古
                                                                               DBデータ



  Copyright(c)2013 NTT, Inc. All Rights Reserved.                                            13
基本構成
                                                                               参照負荷分散用
                                              サービス提供用LAN
                    Read/Write                                             Read Only
               仮想IP1                                                 仮想IP3
            (vip-master)  レプリケーション
                                                                   (vip-slave)
                                 用LAN
             PostgreSQL     仮想IP2                                  PostgreSQL
               (Master)    (vip-rep)                                 (Slave)
                                                   Slaveからの接続用
                              制御                                         制御
                   pgsql RA                         Pacemaker       pgsql RA
               Pacemaker                              用LAN         Pacemaker
                                                    STONITH 用LAN
         サーバ#1                                      ※次ページからは省略         サーバ#2



 Copyright(c)2013 NTT, Inc. All Rights Reserved.                                       14
動作1 : Masterのフェイルオーバ


                                                                                                         vip-master

   vip-master                                    vip-slave            vip-master
                                                                      vip-master                               vip-slave
                                                                                                               vip-slave



PostgreSQL                                 PostgreSQL                  故障
                                                                   PostgreSQL                            PostgreSQL
  故障
 (Master)
                  vip-rep
                                             (Slave)
                                                                      ②停止
                                                                    (Master)
                                                                                     vip-rep   vip-rep
                                                                                                         ⑤(Slave)
                                                                                                            (Master)


   pgsql RA                                    pgsql RA               pgsql RA                               pgsql RA
                                                                                                             pgsql RA

 Pacemaker                                  Pacemaker               Pacemaker                            Pacemaker
                                                                                                         Pacemaker
サーバ#1                                                  サーバ#2       サーバ#1
                                                                   サーバ#1                                              サーバ#2
                                                                                                                      サーバ#2


                                                                                 ④
                                                                       古
                                                               ②   #1のPostgreSQLを停止
① 故障を検知                                                        ③   仮想IPを停止
   旧Masterは不整合が発生し                                             ④   #1のデータが古いことを記録
   ている可能性があるため                                                 ⑤   #2をMasterに昇格(promote)
   ロックファイルが残る                                                  ⑥   #2で仮想IPを起動
     Copyright(c)2013 NTT, Inc. All Rights Reserved.                                                                          15
動作2: Masterフェイルオーバ後の復旧


                                             vip-master
                                             vip-master
                                                                                  ⑥             vip-master

                                                                   vip-slave                             vip-slave
                                                   vip-slave
                                                   vip-slave
                                                   vip-slave
                                                   vip-slave
                                                                                  ⑤
                                                                               レプリケーション
     故障
 ①故障復旧
 PostgreSQL                                  PostgreSQL
                                             PostgreSQL         PostgreSQL                      PostgreSQL
                                   vip-rep
                                   vip-rep                                            vip-rep
  (Master)                                   (Master)
                                               (Slave)           ④ (Slave)                       (Master)

    pgsql RA
    pgsql RA
    pgsql       故
                故                                pgsql RA
                                                 pgsql RA
                                                  pgsql RA         pgsql RA
                                                                   pgsql RA                           pgsql RA

  Pacemaker
  Pacemaker                                  Pacemaker
                                             Pacemaker           Pacemaker                        Pacemaker
                   ③ ロック削除
 サーバ#1
 サーバ#1
 サーバ#1             故障情報クリア                              サーバ#2
                                                        サーバ#2
                                                       サーバ#2
                                                       サーバ#2    サーバ#1                                        サーバ#2


                  ② データ同期
         古                                          新

① 故障の復旧                                                         ④ #1がSlaveで起動
② #1のデータを#2と同期                                                  ⑤ レプリケーション開始
  → 不整合解消、TimelineID同期                                            → 非同期設定で接続
③ #1のロックファイル削除と                                                   → 同期設定に切替
  故障情報をクリア                                                      ⑥ Slave用仮想IP移動
     Copyright(c)2013 NTT, Inc. All Rights Reserved.                                                                 16
動作3 : 同期・非同期設定の切替
          ②
                                                                                                ⑤
                                                                          vip-slave

③検知   vip-master               同期                   vip-slave          vip-master
                                                                                        ⑦非同期               vip-slave



  PostgreSQL                   設定             PostgreSQL              PostgreSQL         設定         PostgreSQL
                     vip-rep                                                          vip-rep          ④停止
   (Master)                                     (Slave)                (Master)                       (Slave)


      pgsql RA                                    pgsql RA               pgsql RA                         pgsql RA

   Pacemaker                                   Pacemaker               Pacemaker                        Pacemaker
                                                                                                        Pacemaker

  サーバ#1                                                   サーバ#2       サーバ#1                                    サーバ#2
                                                                                                               サーバ#2


                                                                                                    ⑥
                                                                                                          古
① Slaveの故障発生                                                      ④   #2のPostgreSQLを停止
② Masterのトランザクション停止                                               ⑤   Slave用仮想IP移動
③ Slaveの故障検知と                                                     ⑥   #2のデータが古いことを記録
  レプリケーション切断を検知                                                   ⑦   非同期設定に変更
 SELECT * from pg_stat_replication                                    → トランザクション再開
        Copyright(c)2013 NTT, Inc. All Rights Reserved.                                                                17
動作4 : 起動


                                                                                                ⑥
          vip-slave                                                       vip-slave
                      ③仮想IP起動                                                                          vip-slave
      vip-master                                                     vip-master



  PostgreSQL                                                      PostgreSQL                        PostgreSQL
     停止               vip-rep                       停止               停止               vip-rep           停止
                                                                                                      (Slave)
   (Master)                                                        (Master)


②起動   pgsql RA
      pgsql RA                                                       pgsql RA                         pgsql RA     ⑤起動
   Pacemaker                                                       Pacemaker                        Pacemaker

  サーバ#1                                                   サーバ#2   サーバ#1                                    サーバ#2


   ①                                                                                  ④ データ同期
        新                                           古                 新                                 古

① データが新しい方を選択 (#1とする) ④ データを同期
② #1のPacemakerを起動          → TimelineIDがそろう
  → Slaveで起動 → Masterに遷移 ⑤ Pacemaker起動
③ 仮想IPが#1で起動               → レプリケーション開始
                         ⑥ Slave用仮想IP移動
        Copyright(c)2013 NTT, Inc. All Rights Reserved.                                                            18
初期起動と2回目以降の起動の違い
 初期起動 (Pacemakerの設定が空の場合)
 ■ サーバを単独起動した場合、 Pacemaker上にデータの状態が
   記録されていないため、必ずMasterになる
       • ロックファイルが残っている場合は除く
 ■ 同時に2つのサーバ起動した場合、お互いのデータの新旧を
   比較し、新しい方がMasterになる


 2回目以降の起動
 ■ Pacemaker上にデータの状態が記録されているため、
   この状態を確認し、最新のデータを持っている場合のみ
   Masterになれる


 Copyright(c)2013 NTT, Inc. All Rights Reserved.   19
まとめ
 レプリケーション構成の高信頼クラスタ3大機能
 ■ Masterのフェイルオーバ
 ■ レプリケーションの同期・非同期設定の切替
 ■ データの状態管理


 運用時の注意
 ■ TimelineIDがずれている場合はレプリケーション接続できない
 ■ ロックファイルが残っている場合は他のサーバとデータの
   整合性が崩れている可能性あり
   → データを手動で同期して解消



 Copyright(c)2013 NTT, Inc. All Rights Reserved.   20
デモ


Copyright(c)2013 NTT, Inc. All Rights Reserved.        21
デモ環境                                                                           Slave用
                                         サービス提供用LAN                            VIP省略

    仮想IP1
 (vip-master)                         レプリケーション用
                                              LAN
  PostgreSQL                         仮想IP2                        PostgreSQL
 <Master>                           (vip-rep)                     <Slave>
                                              Pacemaker用
    Pacemaker                                     LAN             Pacemaker

ホスト名 :              pm01                                         ホスト名 :   pm02
                                                  ディスク監視や
                                                  ネットワーク監視
                                                  、STONITH は省略

Copyright(c)2013 NTT, Inc. All Rights Reserved.                                         22
postgresql.conf (クラスタリングで重要な点のみ)
<レプリケーション設定の説明は省略>

 listen_address = *
  ■ Slaveには仮想IP(vip-master)が存在しないため特定IPでListen
    できない
 synchronous_standby_names はコメントアウト
  ■ Pacemakerが同期・非同期を切り替えるため動的に書き換える
 restart_after_crash = off
  ■ PacemakerがPostgreSQLの状態管理をするため、PostgreSQL
    プロセスの自動再起動はoff



   Copyright(c)2013 NTT, Inc. All Rights Reserved.   23
Pacemakerの設定
property                                                      primitive pgsql ocf:heartbeat:pgsql 
 no-quorum-policy="ignore"                                     params 
 stonith-enabled="false"                                         pgctl="/usr/pgsql-9.1/bin/pg_ctl" 
                                                                  psql="/usr/pgsql-9.1/bin/psql" 
rsc_defaults                                                     pgdata="/var/lib/pgsql/9.1/data/" 
 resource-stickiness="INFINITY"                                  rep_mode="sync" 
 migration-threshold="1"                                          xlog_check_count="0" 
                                                                  node_list="pm01 pm02" 
ms msPostgresql pgsql                                            restore_command="cp /var/lib/pgsql/9.1/data/pg_archive/%f %p" 
 meta                                                            primary_conninfo_opt="keepalives_idle=60 keepalives_interval=5 keepalives_count=5" 
  master-max="1"                                                 master_ip="192.168.104.110" 
  master-node-max="1"                                            stop_escalate="0" 
  clone-max="2"                                                op start timeout="30s" interval="0s" on-fail="restart" 
  clone-node-max="1"                                           op monitor timeout="30s" interval="4s" on-fail="restart" 
  notify="true"                                                 op monitor timeout="30s" interval="2s" on-fail="restart" role="Master" 
                                                                op promote timeout="30s" interval="0s" on-fail="restart" 
group master-group                                             op demote timeout="30s" interval="0s" on-fail="stop" 
  vip-master vip-rep                                            op stop timeout="30s" interval="0s" on-fail="block" 
                                                                op notify timeout="60s" interval="0s"
primitive vip-master ocf:heartbeat:IPaddr2 
 params                                                       colocation rsc_colocation-2 inf: master-group   msPostgresql:Master
   ip="192.168.103.110" 
   nic="eth3"                                                 order rsc_order-2 inf: msPostgresql:promote master-group:start symmetrical=false
   cidr_netmask="24"                                          order rsc_order-3 0: msPostgresql:demote master-group:stop symmetrical=false
 op start timeout="60s" interval="0s" on-fail="restart" 
 op monitor timeout="60s" interval="10s" on-fail="restart" 
 op stop timeout="60s" interval="0s" on-fail="block"

primitive vip-rep ocf:heartbeat:IPaddr2 
 params 
   ip="192.168.104.110" 
   nic="eth4" 
   cidr_netmask="24" 
 op start timeout="60s" interval="0s" on-fail="restart" 
 op monitor timeout="60s" interval="10s" on-fail="restart" 
 op stop timeout="60s" interval="0s" on-fail="block"


             Copyright(c)2013 NTT, Inc. All Rights Reserved.                                                                                        24
Pacemakerの設定 (抜粋)
group master-group                            Master側で動かす仮想IPは扱いやすいようにグループ化
    vip-master vip-rep                         Master側で動かす仮想IPは扱いやすいようにグループ化

primitive vip-rep ocf:heartbeat:IPaddr2                       レプリケーション用仮想IPの設定
  params 
    ip="192.168.104.110" 
    nic="eth4" 
    cidr_netmask="24" 
primitive pgsql ocf:heartbeat:pgsql                      PostgreSQLリソースの設定
  params 
    rep_mode="sync" 
    xlog_check_count="0" 
                                 同期レプリケーションのMaster/Slave使用を宣言
                                 同期レプリケーションのMaster/Slave使用を宣言
    node_list="pm01 pm02" 
    restore_command="cp /var/lib/pgsql/9.1/data/pg_archive/%f %p" 
    primary_conninfo_opt="keepalives_idle=60 keepalives_interval=5 keepalives_count=5 " 
    master_ip="192.168.104.110" 
    stop_escalate="0" 
                       レプリケーション接続先はレプリケーション用仮想IP(vip-rep)を設定
                       レプリケーション接続先はレプリケーション用仮想IP(vip-rep)を設定
                                                                   リソースの処理順番の設定
order rsc_order-3 0:msPostgresql:demote                  master-group:stop symmetrical=false
                                  MasterのPostgreSQLを停止した後に仮想IPを停止することで
                                  MasterのPostgreSQLを停止した後に仮想IPを停止することで
       Copyright(c)2013 NTT, Inc. All Rights Reserved.               25
                                            レプリケーションの異常切断を防ぐ
Pacemaker状態表示例 (crm_mon –A 実行時)
============
Last updated: Sun Feb 17 19:01:31 2013
Stack: Heartbeat
Current DC: pm01 (11111111-1111-1111-1111-111111111111) - partition with quorum
Version: 1.0.12-066152e
2 Nodes configured, unknown expected votes
2 Resources configured.
============

Online: [ pm01 pm02 ]

Resource Group: master-group
    vip-master         (ocf::heartbeat:IPaddr2):                     Started pm01
    vip-rep            (ocf::heartbeat:IPaddr2):                     Started pm01
Master/Slave Set: msPostgresql
    Masters: [ pm01 ]
    Slaves: [ pm02 ]

Node Attributes:
* Node pm01:
    + master-pgsql:0                                    :   1000
    + pgsql-data-status                                 :   LATEST
    + pgsql-master-baseline                             :   0000000046000000
    + pgsql-status                                      :   PRI
* Node pm02:
    + master-pgsql:1                                    : 100
    + pgsql-data-status                                 : STREAMING|SYNC
    + pgsql-status                                      : HS:sync



       デモでは見にくいので grep と sed を駆使して・・・
       デモでは見にくいので grep と sed を駆使して・・・
      Copyright(c)2013 NTT, Inc. All Rights Reserved.                               26
Pacemaker状態表示簡略版 (今回のデモ専用)
Online: [ pm01 pm02 ]                                   サーバの状態
vip-master              Started pm01
vip-rep                 Started pm01                  仮想IPの状態
 Masters:               [ pm01 ]
  Slaves:               [ pm02 ]                      Master/Slave状態
------------------------------------------
* Node pm01:
    + pgsql-data-status : LATEST                        データの状態
    + pgsql-status      : PRI                           PostgreSQLの状態
* Node pm02:
    + pgsql-data-status : STREAMING|SYNC                データの状態
    + pgsql-status      : HS:sync                       PostgreSQLの状態




    Copyright(c)2013 NTT, Inc. All Rights Reserved.               27
属性値
                                                    用途
                                                    用途
                                                    ・ Masterへの昇格可否の判断
                                                    ・ Masterへの昇格可否の判断
 pgsql-data-status
   ■ PostgreSQLのデータ状態。Pacemaker再起動しても残る。
     (例)
     LATEST, STREAMING|ASYNC, STREAMING|SYNC
     DISCONNECTED 等



 pgsql-status                                      用途
                                                    用途
                                                    ・ PostgreSQLの状態把握
                                                    ・ PostgreSQLの状態把握
   ■ 現在のPostgreSQLの状態                               ・ 他のリソースとの連携
                                                    ・ 他のリソースとの連携
     (例)
     PRI, HS:alone, HS:async, HS:sync, UNKNOWN 等


  Copyright(c)2013 NTT, Inc. All Rights Reserved.                       28
【デモ】 Master起動 (初期起動)
  pm01のPacemakerを起動し設定を反映
   # /etc/init.d/heartbeat start
   # crm configure load update config.crm


仮想IP起動                                       vip-master




                                                          vip-rep
                                      PostgreSQL
                                       (Master)
Slaveを経由し
てMasterが起動
                                         Pacemaker
    STOP
                                       PM01                         PM02
 → HS:alone
 → PRI                                                                     データ状態
   Copyright(c)2013 NTT, Inc. All Rights Reserved.                          LATEST   29
【デモ】 Master起動 (初期起動)
Online: [ pm01 ]
vip-master              Started pm01
vip-rep                 Started pm01
 Masters:               [ pm01 ]
 Stopped:               [ pgsql:1 ]
------------------------------------------
* Node pm01:
    + pgsql-data-status : LATEST
    + pgsql-status      : PRI




    Copyright(c)2013 NTT, Inc. All Rights Reserved.   30
【デモ】 Slave起動
 データを同期してpm02のPacemakerを起動
 # <データ同期 (バックアップ・リストア)>
 # /etc/init.d/heartbeat start

                                                                                  PostgreSQL状態
                                           vip-master
                                                                                     STOP
                                                                                   → HS:alone
                                    PostgreSQL          vip-rep
                                                                   PostgreSQL      → HS:async
                                     (Master)                        (Slave)       → HS:sync

                                       Pacemaker                   Pacemaker

                                     PM01                               PM02
                                                                                   データ状態
                                                                                →DISCONNECTED
                                           新                  同期                →STREAMING|ASYNC
 Copyright(c)2013 NTT, Inc. All Rights Reserved.                                →STREAMING|SYNC 31
【デモ】 Slave起動
Online: [ pm01 pm02 ]
vip-master              Started pm01
vip-rep                 Started pm01
 Masters:               [ pm01 ]
  Slaves:               [ pm02 ]
------------------------------------------
* Node pm01:
    + pgsql-data-status : LATEST
    + pgsql-status      : PRI
* Node pm02:
    + pgsql-data-status : STREAMING|SYNC
    + pgsql-status      : HS:sync
------------------------------------------




    Copyright(c)2013 NTT, Inc. All Rights Reserved.   32
【デモ】 Slaveの故障
 pm02のPostgreSQLのプロセスをkill
   # killall -9 postgres
                                                                                      故障検知

                                             vip-master
                                                                                       HS:sync
                                      PostgreSQL          vip-rep      故障
                                                                    PostgreSQL            ↓
                                       (Master)                        (停止)             STOP
非同期設定
                                         Pacemaker                  Pacemaker
 へ切替
(表示上わからない)
                                       PM01                              PM02    データ状態
                                                                                 STREAMING|SYNC
                                                                                 → DISCONNECTED

   Copyright(c)2013 NTT, Inc. All Rights Reserved.                                            33
【デモ】 Slaveの故障
Online: [ pm01 pm02 ]
vip-master              Started pm01
vip-rep                 Started pm01
 Masters:               [ pm01 ]
  Slaves:               [ pgsql:1 ]
------------------------------------------
* Node pm01:
    + pgsql-data-status : LATEST
    + pgsql-status      : PRI
* Node pm02:
    + pgsql-data-status : DISCONNECT
    + pgsql-status      : STOP
------------------------------------------
    pgsql:1_monitor_4000 (node=pm02, call=7,          故障情報
rc=7, status=complete): not running


    Copyright(c)2013 NTT, Inc. All Rights Reserved.          34
【デモ】 Slaveの復旧
pm02のPostgreSQL故障情報クリア
 #    crm resource cleanup msPostgresql pm02
                                                                                  STOP
                                                                                  → HS:alone
                                                                                  → HS:async
                                           vip-master
                                                                                  →HS:sync
                                    PostgreSQL          vip-rep
                                                                  PostgreSQL
                                     (Master)                       (Slave)


                                       Pacemaker                  Pacemaker

                                     PM01                              PM02
                                                                                 データ状態
                                                                                 DISCONNECTED
                                                                               → STREAMING|ASYNC
                                                                               → STREAMING|SYNC

 Copyright(c)2013 NTT, Inc. All Rights Reserved.                                               35
【デモ】 Slaveの復旧
Online: [ pm01 pm02 ]
vip-master              Started pm01
vip-rep                 Started pm01
 Masters:               [ pm01 ]
  Slaves:               [ pm02 ]
------------------------------------------
* Node pm01:
    + pgsql-data-status : LATEST
    + pgsql-status      : PRI
* Node pm02:
    + pgsql-data-status : STREAMING|SYNC
    + pgsql-status      : HS:sync
------------------------------------------
    pgsql:1_monitor_4000 (node=pm02, call=7,          故障情報
rc=7, status=complete): not running
                                                       クリア
    Copyright(c)2013 NTT, Inc. All Rights Reserved.          36
【デモ】 Masterの故障 (フェイルオーバ)
 pm01のPostgreSQLのプロセスをkill
   # killall -9 postgres

 故障検知
                                            vip-master                          vip-master    仮想IPの移動

                                                         vip-rep   vip-rep
                                     PostgreSQL                              PostgreSQL
                                        (停止)                                  (Master)
                                                                                                HS:sync
                                        Pacemaker                            Pacemaker        → PRI
                                      PM01                                          PM02
データ状態記録                                                                                        データ状態
  LATEST
                                                                                             STREAMING|SYNC
→ DISCONNECTED
                                                                                             → LATEST
   Copyright(c)2013 NTT, Inc. All Rights Reserved.                                                        37
【デモ】 Masterの故障 (フェイルオーバ)
Online: [ pm01 pm02 ]
vip-master              Started pm02
vip-rep                 Started pm02
 Masters:               [ pm02 ]
  Slaves:               [ pgsql:0 ]
------------------------------------------
* Node pm01:
    + pgsql-data-status : DISCONNECT
    + pgsql-status      : STOP
* Node pm02:
    + pgsql-data-status : LATEST
    + pgsql-status      : PRI
------------------------------------------
    pgsql:0_monitor_2000 (node=pm01, call=25,         故障情報
rc=7, status=complete): not running


    Copyright(c)2013 NTT, Inc. All Rights Reserved.          38
コミュニティの最近の動き
 resource-agents 3.9.4 (11/23リリース)
  ■ Pacemaker 1.1.x の仕様変更に追従
     • Pacemaker 1.0.x との互換は保持
  ■ recovery.confの、archive_cleanup_commandや
    recovery_end_commandを設定可能に
  ■ promote時にPostgreSQLをpromoteするのではなく、
    recovery.confを削除して再起動させることでMaster化可能に
     • Timeline ID のインクリメント防止可能に


 resource-agents 3.9.5 (2/8リリース)
  ■ Slave (Hot Stanby)で起動するためだけの機能追加
    (Active-Stanby構成で使用)

   Copyright(c)2013 NTT, Inc. All Rights Reserved.   39
コミュニティの最近の動き
 Pacemaker 1.0.13 (2/13リリース)
  ■ Linux-HA Japan では resource-agents 3.9.5 を同梱し、
    リポジトリパッケージとして4月以降にリリース予定




   Copyright(c)2013 NTT, Inc. All Rights Reserved.   40
動作環境

Pacemaker 1.0.12 以上推奨
resource-agents 3.9.3 以上
  ■ Linux-HA Japan Pacemakerリポジトリパッケージ

       1.0.12-1.2 以上に同梱 (2012年7月リリース)

PostgreSQL 9.1 以上
  ■ 9.0では動きません



 Copyright(c)2013 NTT, Inc. All Rights Reserved.   41
参考
ドキュメントおよび設定例 (GitHubのWiki)
  github t-matsuo                                  検索


  ■ https://github.com/t-matsuo/resource-agents/wiki/


Pacemakerダウンロード・インストール
  Linux-HA Japan                                   検索



  ■ http://linux-ha.sourceforge.jp/




 Copyright(c)2013 NTT, Inc. All Rights Reserved.        42
Question?




Copyright(c)2013 NTT, Inc. All Rights Reserved.               43

Pacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/Spring

  • 1.
  • 2.
    まずはPostgreSQLの ストリーミングレプリケーションの 簡単な紹介 Copyright(c)2013 NTT, Inc. All Rights Reserved. 2
  • 3.
    PostgreSQLのレプリケーションとは?  複数のサーバにデータベースを自動的に複製する機能 ■ PostgreSQL 9.0 : 非同期レプリケーション機能 9.1 : 同期レプリケーション機能 9.2 : カスケードレプリケーション機能 書き込み Master 非同期 Slave Slave カスケード レプリケーション レプリケーション 応答 Slave カスケード Slave 同期 レプリケーション レプリケーション Copyright(c)2013 NTT, Inc. All Rights Reserved. 3
  • 4.
    非同期レプリケーション (PostgreSQL 9.0~) 名前の通り、Masterへ書き込み発生時、 レプリケーションは非同期で実行  故障発生時、データ欠損の可能性あり  複数のSlaveを接続可能 書き込み Master 非同期 Slave レプリケーション Copyright(c)2013 NTT, Inc. All Rights Reserved. 4
  • 5.
    同期レプリケーション (PostgreSQL 9.1~) Master故障時のデータ欠損なし  同期で動作できるSlaveは一つのみ ■ 複数のSlaveを同期設定で接続した場合、1ノードだけ同期で動作  Slave故障時、MasterはSlaveが復旧するまで待つ → トランザクション停止! ? 書き込み Master 応答待ち! 応答 Slave 同期 レプリケーション Copyright(c)2013 NTT, Inc. All Rights Reserved. 5
  • 6.
    カスケードレプリケーション (PostgreSQL 9.2~) SlaveからSlaveへレプリケーション ■ MasterのCPUやネットワーク負荷の削減が可能  カスケードレプリケーションの動作は全て非同期 書き込み Master Slave カスケード Slave レプリケーション Slave カスケード Slave レプリケーション Copyright(c)2013 NTT, Inc. All Rights Reserved. 6
  • 7.
    Slaveの特徴  参照系のSQLを処理可能  SlaveからMasterに接続し、切断時は自動で再接続を試みる レプリケーションの接続先は動的に変更できない ■ 変更にはSlaveのPostgreSQLの再起動が必要  同期・非同期の設定はSlave側では制御できない ■ Master側のpostgresql.confの "synchronous_standby_names" の値を変 更し設定をリロード (再起動は必要なし) 参照可 Master Slave Copyright(c)2013 NTT, Inc. All Rights Reserved. 7
  • 8.
    レプリケーション使用時の注意点①  SlaveにWALを書きこむ前にMasterが故障した場合、 MasterとSlave のデータ間に不整合が発生 書き込み Master Slave → Master ②WAL転送 ① WAL書き込み ③ WAL書き込み WAL 不整合 この状態でSlaveをMasterに昇格させ、旧MasterをSlave として組み込む場合、手動でデータの同期が必要 Pacemaker使用時、この状態が起きた場合は旧Masterにロックファイルを 残すことで、不整合のデータをもったPostgreSQLの起動を抑止 Copyright(c)2013 NTT, Inc. All Rights Reserved. 8
  • 9.
    レプリケーション使用時の注意点②  "TimelineID"の存在 ■ SlaveからMasterへ昇格した際インクリメントされる数値  TimelineID が異なるとレプリケーションできない Slave → Master 5 5 6 異なる SlaveのTimelineIDをMasterと同期させるには Master側で生成されるWALアーカイブをSlave 側にコピーするか データの同期が必要 Copyright(c)2013 NTT, Inc. All Rights Reserved. 9
  • 10.
    以上レプリケーションの紹介 ここからは高信頼(HA)クラスタ Copyright(c)2013 NTT, Inc. All Rights Reserved. 10
  • 11.
    HAクラスタの今までの構成 ~Active/Standby 構成~ PostgreSQLのデータは共有ディスク上に配置し通常はActive サーバでサービスを提供  Activeサーバ故障時はStandbyサーバがActiveとなりサービスを 提供 (フェイルオーバ) フェイル Active Standby オーバ Active 故障 データ 発生 データ 共有ディスク 共有ディスク Copyright(c)2013 NTT, Inc. All Rights Reserved. 11
  • 12.
    レプリケーション構成 ~Master/Slave 構成~ PostgreSQLのストリーミングレプリケーション機能を用いてデー タを共有し、通常はMaster側でサービスを提供  Masterサーバ故障時はSlaveサーバがMasterに昇格しサービスを 継続 フェイル Master Slave オーバ Master 故障 データ データ 発生 データ データ ローカルディスク ローカルディスク ローカルディスク ローカルディスク Copyright(c)2013 NTT, Inc. All Rights Reserved. 12
  • 13.
    レプリケーション構成の高信頼クラスタ 3大機能 ①フェイルオーバ Master 故障発生 Master フェイル ③ 故障 オーバ デ Master 同期設定 Slave ー 古 DBデータ DBデータ タ の 状 ②同期・非同期の設定切替 態 DBデータ DBデータ 管 Slave 理 故障発生 Master 非同期設定 故障 DBデータ 古 DBデータ Copyright(c)2013 NTT, Inc. All Rights Reserved. 13
  • 14.
    基本構成 参照負荷分散用 サービス提供用LAN Read/Write Read Only 仮想IP1 仮想IP3 (vip-master) レプリケーション (vip-slave) 用LAN PostgreSQL 仮想IP2 PostgreSQL (Master) (vip-rep) (Slave) Slaveからの接続用 制御 制御 pgsql RA Pacemaker pgsql RA Pacemaker 用LAN Pacemaker STONITH 用LAN サーバ#1 ※次ページからは省略 サーバ#2 Copyright(c)2013 NTT, Inc. All Rights Reserved. 14
  • 15.
    動作1 : Masterのフェイルオーバ vip-master vip-master vip-slave vip-master vip-master vip-slave vip-slave PostgreSQL PostgreSQL 故障 PostgreSQL PostgreSQL 故障 (Master) vip-rep (Slave) ②停止 (Master) vip-rep vip-rep ⑤(Slave) (Master) pgsql RA pgsql RA pgsql RA pgsql RA pgsql RA Pacemaker Pacemaker Pacemaker Pacemaker Pacemaker サーバ#1 サーバ#2 サーバ#1 サーバ#1 サーバ#2 サーバ#2 ④ 古 ② #1のPostgreSQLを停止 ① 故障を検知 ③ 仮想IPを停止 旧Masterは不整合が発生し ④ #1のデータが古いことを記録 ている可能性があるため ⑤ #2をMasterに昇格(promote) ロックファイルが残る ⑥ #2で仮想IPを起動 Copyright(c)2013 NTT, Inc. All Rights Reserved. 15
  • 16.
    動作2: Masterフェイルオーバ後の復旧 vip-master vip-master ⑥ vip-master vip-slave vip-slave vip-slave vip-slave vip-slave vip-slave ⑤ レプリケーション 故障 ①故障復旧 PostgreSQL PostgreSQL PostgreSQL PostgreSQL PostgreSQL vip-rep vip-rep vip-rep (Master) (Master) (Slave) ④ (Slave) (Master) pgsql RA pgsql RA pgsql 故 故 pgsql RA pgsql RA pgsql RA pgsql RA pgsql RA pgsql RA Pacemaker Pacemaker Pacemaker Pacemaker Pacemaker Pacemaker ③ ロック削除 サーバ#1 サーバ#1 サーバ#1 故障情報クリア サーバ#2 サーバ#2 サーバ#2 サーバ#2 サーバ#1 サーバ#2 ② データ同期 古 新 ① 故障の復旧 ④ #1がSlaveで起動 ② #1のデータを#2と同期 ⑤ レプリケーション開始 → 不整合解消、TimelineID同期 → 非同期設定で接続 ③ #1のロックファイル削除と → 同期設定に切替 故障情報をクリア ⑥ Slave用仮想IP移動 Copyright(c)2013 NTT, Inc. All Rights Reserved. 16
  • 17.
    動作3 : 同期・非同期設定の切替 ② ⑤ vip-slave ③検知 vip-master 同期 vip-slave vip-master ⑦非同期 vip-slave PostgreSQL 設定 PostgreSQL PostgreSQL 設定 PostgreSQL vip-rep vip-rep ④停止 (Master) (Slave) (Master) (Slave) pgsql RA pgsql RA pgsql RA pgsql RA Pacemaker Pacemaker Pacemaker Pacemaker Pacemaker サーバ#1 サーバ#2 サーバ#1 サーバ#2 サーバ#2 ⑥ 古 ① Slaveの故障発生 ④ #2のPostgreSQLを停止 ② Masterのトランザクション停止 ⑤ Slave用仮想IP移動 ③ Slaveの故障検知と ⑥ #2のデータが古いことを記録 レプリケーション切断を検知 ⑦ 非同期設定に変更 SELECT * from pg_stat_replication → トランザクション再開 Copyright(c)2013 NTT, Inc. All Rights Reserved. 17
  • 18.
    動作4 : 起動 ⑥ vip-slave vip-slave ③仮想IP起動 vip-slave vip-master vip-master PostgreSQL PostgreSQL PostgreSQL 停止 vip-rep 停止 停止 vip-rep 停止 (Slave) (Master) (Master) ②起動 pgsql RA pgsql RA pgsql RA pgsql RA ⑤起動 Pacemaker Pacemaker Pacemaker サーバ#1 サーバ#2 サーバ#1 サーバ#2 ① ④ データ同期 新 古 新 古 ① データが新しい方を選択 (#1とする) ④ データを同期 ② #1のPacemakerを起動 → TimelineIDがそろう → Slaveで起動 → Masterに遷移 ⑤ Pacemaker起動 ③ 仮想IPが#1で起動 → レプリケーション開始 ⑥ Slave用仮想IP移動 Copyright(c)2013 NTT, Inc. All Rights Reserved. 18
  • 19.
    初期起動と2回目以降の起動の違い  初期起動 (Pacemakerの設定が空の場合) ■ サーバを単独起動した場合、 Pacemaker上にデータの状態が 記録されていないため、必ずMasterになる • ロックファイルが残っている場合は除く ■ 同時に2つのサーバ起動した場合、お互いのデータの新旧を 比較し、新しい方がMasterになる  2回目以降の起動 ■ Pacemaker上にデータの状態が記録されているため、 この状態を確認し、最新のデータを持っている場合のみ Masterになれる Copyright(c)2013 NTT, Inc. All Rights Reserved. 19
  • 20.
    まとめ  レプリケーション構成の高信頼クラスタ3大機能 ■Masterのフェイルオーバ ■ レプリケーションの同期・非同期設定の切替 ■ データの状態管理  運用時の注意 ■ TimelineIDがずれている場合はレプリケーション接続できない ■ ロックファイルが残っている場合は他のサーバとデータの 整合性が崩れている可能性あり → データを手動で同期して解消 Copyright(c)2013 NTT, Inc. All Rights Reserved. 20
  • 21.
    デモ Copyright(c)2013 NTT, Inc.All Rights Reserved. 21
  • 22.
    デモ環境 Slave用 サービス提供用LAN VIP省略 仮想IP1 (vip-master) レプリケーション用 LAN PostgreSQL 仮想IP2 PostgreSQL <Master> (vip-rep) <Slave> Pacemaker用 Pacemaker LAN Pacemaker ホスト名 : pm01 ホスト名 : pm02 ディスク監視や ネットワーク監視 、STONITH は省略 Copyright(c)2013 NTT, Inc. All Rights Reserved. 22
  • 23.
    postgresql.conf (クラスタリングで重要な点のみ) <レプリケーション設定の説明は省略>  listen_address= * ■ Slaveには仮想IP(vip-master)が存在しないため特定IPでListen できない  synchronous_standby_names はコメントアウト ■ Pacemakerが同期・非同期を切り替えるため動的に書き換える  restart_after_crash = off ■ PacemakerがPostgreSQLの状態管理をするため、PostgreSQL プロセスの自動再起動はoff Copyright(c)2013 NTT, Inc. All Rights Reserved. 23
  • 24.
    Pacemakerの設定 property primitive pgsql ocf:heartbeat:pgsql no-quorum-policy="ignore" params stonith-enabled="false" pgctl="/usr/pgsql-9.1/bin/pg_ctl" psql="/usr/pgsql-9.1/bin/psql" rsc_defaults pgdata="/var/lib/pgsql/9.1/data/" resource-stickiness="INFINITY" rep_mode="sync" migration-threshold="1" xlog_check_count="0" node_list="pm01 pm02" ms msPostgresql pgsql restore_command="cp /var/lib/pgsql/9.1/data/pg_archive/%f %p" meta primary_conninfo_opt="keepalives_idle=60 keepalives_interval=5 keepalives_count=5" master-max="1" master_ip="192.168.104.110" master-node-max="1" stop_escalate="0" clone-max="2" op start timeout="30s" interval="0s" on-fail="restart" clone-node-max="1" op monitor timeout="30s" interval="4s" on-fail="restart" notify="true" op monitor timeout="30s" interval="2s" on-fail="restart" role="Master" op promote timeout="30s" interval="0s" on-fail="restart" group master-group op demote timeout="30s" interval="0s" on-fail="stop" vip-master vip-rep op stop timeout="30s" interval="0s" on-fail="block" op notify timeout="60s" interval="0s" primitive vip-master ocf:heartbeat:IPaddr2 params colocation rsc_colocation-2 inf: master-group msPostgresql:Master ip="192.168.103.110" nic="eth3" order rsc_order-2 inf: msPostgresql:promote master-group:start symmetrical=false cidr_netmask="24" order rsc_order-3 0: msPostgresql:demote master-group:stop symmetrical=false op start timeout="60s" interval="0s" on-fail="restart" op monitor timeout="60s" interval="10s" on-fail="restart" op stop timeout="60s" interval="0s" on-fail="block" primitive vip-rep ocf:heartbeat:IPaddr2 params ip="192.168.104.110" nic="eth4" cidr_netmask="24" op start timeout="60s" interval="0s" on-fail="restart" op monitor timeout="60s" interval="10s" on-fail="restart" op stop timeout="60s" interval="0s" on-fail="block" Copyright(c)2013 NTT, Inc. All Rights Reserved. 24
  • 25.
    Pacemakerの設定 (抜粋) group master-group Master側で動かす仮想IPは扱いやすいようにグループ化 vip-master vip-rep Master側で動かす仮想IPは扱いやすいようにグループ化 primitive vip-rep ocf:heartbeat:IPaddr2 レプリケーション用仮想IPの設定 params ip="192.168.104.110" nic="eth4" cidr_netmask="24" primitive pgsql ocf:heartbeat:pgsql PostgreSQLリソースの設定 params rep_mode="sync" xlog_check_count="0" 同期レプリケーションのMaster/Slave使用を宣言 同期レプリケーションのMaster/Slave使用を宣言 node_list="pm01 pm02" restore_command="cp /var/lib/pgsql/9.1/data/pg_archive/%f %p" primary_conninfo_opt="keepalives_idle=60 keepalives_interval=5 keepalives_count=5 " master_ip="192.168.104.110" stop_escalate="0" レプリケーション接続先はレプリケーション用仮想IP(vip-rep)を設定 レプリケーション接続先はレプリケーション用仮想IP(vip-rep)を設定 リソースの処理順番の設定 order rsc_order-3 0:msPostgresql:demote master-group:stop symmetrical=false MasterのPostgreSQLを停止した後に仮想IPを停止することで MasterのPostgreSQLを停止した後に仮想IPを停止することで Copyright(c)2013 NTT, Inc. All Rights Reserved. 25 レプリケーションの異常切断を防ぐ
  • 26.
    Pacemaker状態表示例 (crm_mon –A実行時) ============ Last updated: Sun Feb 17 19:01:31 2013 Stack: Heartbeat Current DC: pm01 (11111111-1111-1111-1111-111111111111) - partition with quorum Version: 1.0.12-066152e 2 Nodes configured, unknown expected votes 2 Resources configured. ============ Online: [ pm01 pm02 ] Resource Group: master-group vip-master (ocf::heartbeat:IPaddr2): Started pm01 vip-rep (ocf::heartbeat:IPaddr2): Started pm01 Master/Slave Set: msPostgresql Masters: [ pm01 ] Slaves: [ pm02 ] Node Attributes: * Node pm01: + master-pgsql:0 : 1000 + pgsql-data-status : LATEST + pgsql-master-baseline : 0000000046000000 + pgsql-status : PRI * Node pm02: + master-pgsql:1 : 100 + pgsql-data-status : STREAMING|SYNC + pgsql-status : HS:sync デモでは見にくいので grep と sed を駆使して・・・ デモでは見にくいので grep と sed を駆使して・・・ Copyright(c)2013 NTT, Inc. All Rights Reserved. 26
  • 27.
    Pacemaker状態表示簡略版 (今回のデモ専用) Online: [pm01 pm02 ] サーバの状態 vip-master Started pm01 vip-rep Started pm01 仮想IPの状態 Masters: [ pm01 ] Slaves: [ pm02 ] Master/Slave状態 ------------------------------------------ * Node pm01: + pgsql-data-status : LATEST データの状態 + pgsql-status : PRI PostgreSQLの状態 * Node pm02: + pgsql-data-status : STREAMING|SYNC データの状態 + pgsql-status : HS:sync PostgreSQLの状態 Copyright(c)2013 NTT, Inc. All Rights Reserved. 27
  • 28.
    属性値 用途 用途 ・ Masterへの昇格可否の判断 ・ Masterへの昇格可否の判断  pgsql-data-status ■ PostgreSQLのデータ状態。Pacemaker再起動しても残る。 (例) LATEST, STREAMING|ASYNC, STREAMING|SYNC DISCONNECTED 等  pgsql-status 用途 用途 ・ PostgreSQLの状態把握 ・ PostgreSQLの状態把握 ■ 現在のPostgreSQLの状態 ・ 他のリソースとの連携 ・ 他のリソースとの連携 (例) PRI, HS:alone, HS:async, HS:sync, UNKNOWN 等 Copyright(c)2013 NTT, Inc. All Rights Reserved. 28
  • 29.
    【デモ】 Master起動 (初期起動)  pm01のPacemakerを起動し設定を反映 # /etc/init.d/heartbeat start # crm configure load update config.crm 仮想IP起動 vip-master vip-rep PostgreSQL (Master) Slaveを経由し てMasterが起動 Pacemaker STOP PM01 PM02 → HS:alone → PRI データ状態 Copyright(c)2013 NTT, Inc. All Rights Reserved. LATEST 29
  • 30.
    【デモ】 Master起動 (初期起動) Online:[ pm01 ] vip-master Started pm01 vip-rep Started pm01 Masters: [ pm01 ] Stopped: [ pgsql:1 ] ------------------------------------------ * Node pm01: + pgsql-data-status : LATEST + pgsql-status : PRI Copyright(c)2013 NTT, Inc. All Rights Reserved. 30
  • 31.
    【デモ】 Slave起動  データを同期してpm02のPacemakerを起動 # <データ同期 (バックアップ・リストア)> # /etc/init.d/heartbeat start PostgreSQL状態 vip-master STOP → HS:alone PostgreSQL vip-rep PostgreSQL → HS:async (Master) (Slave) → HS:sync Pacemaker Pacemaker PM01 PM02 データ状態 →DISCONNECTED 新 同期 →STREAMING|ASYNC Copyright(c)2013 NTT, Inc. All Rights Reserved. →STREAMING|SYNC 31
  • 32.
    【デモ】 Slave起動 Online: [pm01 pm02 ] vip-master Started pm01 vip-rep Started pm01 Masters: [ pm01 ] Slaves: [ pm02 ] ------------------------------------------ * Node pm01: + pgsql-data-status : LATEST + pgsql-status : PRI * Node pm02: + pgsql-data-status : STREAMING|SYNC + pgsql-status : HS:sync ------------------------------------------ Copyright(c)2013 NTT, Inc. All Rights Reserved. 32
  • 33.
    【デモ】 Slaveの故障 pm02のPostgreSQLのプロセスをkill # killall -9 postgres 故障検知 vip-master HS:sync PostgreSQL vip-rep 故障 PostgreSQL ↓ (Master) (停止) STOP 非同期設定 Pacemaker Pacemaker へ切替 (表示上わからない) PM01 PM02 データ状態 STREAMING|SYNC → DISCONNECTED Copyright(c)2013 NTT, Inc. All Rights Reserved. 33
  • 34.
    【デモ】 Slaveの故障 Online: [pm01 pm02 ] vip-master Started pm01 vip-rep Started pm01 Masters: [ pm01 ] Slaves: [ pgsql:1 ] ------------------------------------------ * Node pm01: + pgsql-data-status : LATEST + pgsql-status : PRI * Node pm02: + pgsql-data-status : DISCONNECT + pgsql-status : STOP ------------------------------------------ pgsql:1_monitor_4000 (node=pm02, call=7, 故障情報 rc=7, status=complete): not running Copyright(c)2013 NTT, Inc. All Rights Reserved. 34
  • 35.
    【デモ】 Slaveの復旧 pm02のPostgreSQL故障情報クリア # crm resource cleanup msPostgresql pm02 STOP → HS:alone → HS:async vip-master →HS:sync PostgreSQL vip-rep PostgreSQL (Master) (Slave) Pacemaker Pacemaker PM01 PM02 データ状態 DISCONNECTED → STREAMING|ASYNC → STREAMING|SYNC Copyright(c)2013 NTT, Inc. All Rights Reserved. 35
  • 36.
    【デモ】 Slaveの復旧 Online: [pm01 pm02 ] vip-master Started pm01 vip-rep Started pm01 Masters: [ pm01 ] Slaves: [ pm02 ] ------------------------------------------ * Node pm01: + pgsql-data-status : LATEST + pgsql-status : PRI * Node pm02: + pgsql-data-status : STREAMING|SYNC + pgsql-status : HS:sync ------------------------------------------ pgsql:1_monitor_4000 (node=pm02, call=7, 故障情報 rc=7, status=complete): not running クリア Copyright(c)2013 NTT, Inc. All Rights Reserved. 36
  • 37.
    【デモ】 Masterの故障 (フェイルオーバ) pm01のPostgreSQLのプロセスをkill # killall -9 postgres 故障検知 vip-master vip-master 仮想IPの移動 vip-rep vip-rep PostgreSQL PostgreSQL (停止) (Master) HS:sync Pacemaker Pacemaker → PRI PM01 PM02 データ状態記録 データ状態 LATEST STREAMING|SYNC → DISCONNECTED → LATEST Copyright(c)2013 NTT, Inc. All Rights Reserved. 37
  • 38.
    【デモ】 Masterの故障 (フェイルオーバ) Online:[ pm01 pm02 ] vip-master Started pm02 vip-rep Started pm02 Masters: [ pm02 ] Slaves: [ pgsql:0 ] ------------------------------------------ * Node pm01: + pgsql-data-status : DISCONNECT + pgsql-status : STOP * Node pm02: + pgsql-data-status : LATEST + pgsql-status : PRI ------------------------------------------ pgsql:0_monitor_2000 (node=pm01, call=25, 故障情報 rc=7, status=complete): not running Copyright(c)2013 NTT, Inc. All Rights Reserved. 38
  • 39.
    コミュニティの最近の動き  resource-agents 3.9.4(11/23リリース) ■ Pacemaker 1.1.x の仕様変更に追従 • Pacemaker 1.0.x との互換は保持 ■ recovery.confの、archive_cleanup_commandや recovery_end_commandを設定可能に ■ promote時にPostgreSQLをpromoteするのではなく、 recovery.confを削除して再起動させることでMaster化可能に • Timeline ID のインクリメント防止可能に  resource-agents 3.9.5 (2/8リリース) ■ Slave (Hot Stanby)で起動するためだけの機能追加 (Active-Stanby構成で使用) Copyright(c)2013 NTT, Inc. All Rights Reserved. 39
  • 40.
    コミュニティの最近の動き  Pacemaker 1.0.13(2/13リリース) ■ Linux-HA Japan では resource-agents 3.9.5 を同梱し、 リポジトリパッケージとして4月以降にリリース予定 Copyright(c)2013 NTT, Inc. All Rights Reserved. 40
  • 41.
    動作環境 Pacemaker 1.0.12 以上推奨 resource-agents3.9.3 以上 ■ Linux-HA Japan Pacemakerリポジトリパッケージ 1.0.12-1.2 以上に同梱 (2012年7月リリース) PostgreSQL 9.1 以上 ■ 9.0では動きません Copyright(c)2013 NTT, Inc. All Rights Reserved. 41
  • 42.
    参考 ドキュメントおよび設定例 (GitHubのWiki) github t-matsuo 検索 ■ https://github.com/t-matsuo/resource-agents/wiki/ Pacemakerダウンロード・インストール Linux-HA Japan 検索 ■ http://linux-ha.sourceforge.jp/ Copyright(c)2013 NTT, Inc. All Rights Reserved. 42
  • 43.