KEMBAR78
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13 | PDF
PostgreSQL 9.0で標準実装!
5ステップで始めるPostgreSQLレプリケーション




          アップタイム・テクノロジーズ
               永安 悟史




      Copyright 2010 Uptime Technologies LLC, All rights reserved.
レプリケーション概要
•   PostgreSQL 9.0で標準実装されるレプリケーション機能は、「ストリーミ
    ング・レプリケーション(SR)」と呼ばれています。

•   ストリーミングレプリケーションは、1つのマスターノード(読み書き可能)と、
    1つ以上のスレーブノード(読み込みのみ)で構成される、シングルマス
    タ・マルチスレーブ構成です。

•   マスターノードは、マスターノード上で生成された更新情報(トランザクショ
    ンログ)をスレーブノードに転送します(ストリーミング)。

•   スレーブノードは、ログレコードを待ち受け、受信したものを自身のノード
    のWALファイルに適用していきます。

•   スレーブノードでは、リードオンリーのクエリを処理することができます
    (ホットスタンバイモード) 。

              Copyright 2010 Uptime Technologies LLC, All rights reserved.
ストリーミング・レプリケーション概念図
•   ベースバックアップで「基準」を揃え、WALレコードを連続的に転送
    (Streaming)することで「差分」を埋める。


マスター                                                                                      Crash
                                  WAL1                    WAL2                     WAL3
                ①ベースバック
                 アップの取得


            Index                        ③WALレコードを継続的に適用                                  ④フェイル
                                          (Streaming)                                      オーバー
        Table


                ②ベースバック
                 アップを展開
                                  WAL1                    WAL2                     WAL3

スレーブ


                    Copyright 2010 Uptime Technologies LLC, All rights reserved.
WALファイル、WALレコード
• 更新情報を記録していく(追記)
 –   1セグメント16MB。使い終わると次のファイルへ
 –   リカバリの際に読み込まれる
 –   pg_xlog/ 以下に配置
 –   「Write Ahead Log(WAL)」とも呼ばれる



       Aテーブルのレコード1をmに変更
        Bテーブルのレコード6をnに変更
        Aテーブルのレコード4をxに変更
        Aテーブルのレコード1をyに変更
        Bテーブルのレコード2をzに変更


            ファイルの先頭から
            順番に更新情報が
             追記されていく




                 Copyright 2010 Uptime Technologies LLC, All rights reserved.
導入の5ステップ
•   ステップ1:ビルド&インストール
•   ステップ2:データベースクラスタを初期化&複製
•   ステップ3:マスターノードの設定
•   ステップ4:スレーブノードの設定
•   ステップ5:各ノードの起動&動作確認




            Copyright 2010 Uptime Technologies LLC, All rights reserved.
ステップ1:ビルド&インストール
•   まず、ソースをコンパイルし、インストールする。(バイナリパッケージを用
    いる際は省略可)
    –   $ ./configure –-prefix=/usr/local/pgsql
    –   $ make ; make check
    –   $ su
    –   # make install




                        Copyright 2010 Uptime Technologies LLC, All rights reserved.
ステップ2:データベースクラスタを初期化&複製
•   データベースクラスタを初期化する
    – master$ initdb –D $PGDATA –-no-locale –-encoding=UTF8

•   アーカイブログモードを有効にする(postgresql.conf)
    – archive_mode = on
    – archive_command = 'cp %p /var/lib/pgsql/data/pg_xlogarch/%f'

•   ベースバックアップを取得する
    – master$ pg_ctl –D $PGDATA start
    – master$ psql –c "SELECT pg_start_backup('initial backup for SR')"
      template1
    – master$ tar cvf pg_base_backup.tar $PGDATA
    – master$ psql –c "SELECT pg_stop_backup()" template1

•   スレーブノードにベースバックアップを展開する
    – slave$ tar xvf pg_base_backup.tar
    – slave$ rm –f $PGDATA/postmaster.pid
                     Copyright 2010 Uptime Technologies LLC, All rights reserved.
ステップ3:マスターノードの設定
•   WALをスレーブに送信できるように設定(postgresql.conf)。
    –   listen_addresses = ‘*‘
    –   wal_level = hot_standby
    –   max_wal_senders = 5
    –   wal_keep_segments = 32


•   スレーブノードからの接続を受け付けられるように設定(pg_hba.conf)
    – host replication     all     10.0.2.42/32                   trust




                     Copyright 2010 Uptime Technologies LLC, All rights reserved.
ステップ4:スレーブノードの設定
•   スタンバイモードとして設定(postgresql.conf)
    – hot_standby = on


•   スタンバイ用の設定ファイルの作成(recovery.conf)
    –   standby_mode = 'on'
    –   primary_conninfo = 'host=10.0.2.41 port=5432 user=snaga'
    –   trigger_file = '/var/lib/pgsql/data/pg_failover_trigger'
    –   restore_command = 'cp /var/lib/pgsql/data/pg_xlogarch/%f "%p"'




                      Copyright 2010 Uptime Technologies LLC, All rights reserved.
ステップ5:各ノードの起動&動作確認
•   マスターサーバを起動し、スレーブサーバを起動。

•   マスターノードでは以下のようなログが見られる。
    – LOG: replication connection authorized: user=snaga host=10.0.2.42
      port=55811


•   スレーブノードでは以下のようなログが見られる。
    – LOG: streaming replication successfully connected to primary




•   Done! Enjoy your PostgreSQL!




                     Copyright 2010 Uptime Technologies LLC, All rights reserved.

5ステップで始めるPostgreSQLレプリケーション@hbstudy#13

  • 1.
    PostgreSQL 9.0で標準実装! 5ステップで始めるPostgreSQLレプリケーション アップタイム・テクノロジーズ 永安 悟史 Copyright 2010 Uptime Technologies LLC, All rights reserved.
  • 2.
    レプリケーション概要 • PostgreSQL 9.0で標準実装されるレプリケーション機能は、「ストリーミ ング・レプリケーション(SR)」と呼ばれています。 • ストリーミングレプリケーションは、1つのマスターノード(読み書き可能)と、 1つ以上のスレーブノード(読み込みのみ)で構成される、シングルマス タ・マルチスレーブ構成です。 • マスターノードは、マスターノード上で生成された更新情報(トランザクショ ンログ)をスレーブノードに転送します(ストリーミング)。 • スレーブノードは、ログレコードを待ち受け、受信したものを自身のノード のWALファイルに適用していきます。 • スレーブノードでは、リードオンリーのクエリを処理することができます (ホットスタンバイモード) 。 Copyright 2010 Uptime Technologies LLC, All rights reserved.
  • 3.
    ストリーミング・レプリケーション概念図 • ベースバックアップで「基準」を揃え、WALレコードを連続的に転送 (Streaming)することで「差分」を埋める。 マスター Crash WAL1 WAL2 WAL3 ①ベースバック アップの取得 Index ③WALレコードを継続的に適用 ④フェイル (Streaming) オーバー Table ②ベースバック アップを展開 WAL1 WAL2 WAL3 スレーブ Copyright 2010 Uptime Technologies LLC, All rights reserved.
  • 4.
    WALファイル、WALレコード • 更新情報を記録していく(追記) – 1セグメント16MB。使い終わると次のファイルへ – リカバリの際に読み込まれる – pg_xlog/ 以下に配置 – 「Write Ahead Log(WAL)」とも呼ばれる Aテーブルのレコード1をmに変更 Bテーブルのレコード6をnに変更 Aテーブルのレコード4をxに変更 Aテーブルのレコード1をyに変更 Bテーブルのレコード2をzに変更 ファイルの先頭から 順番に更新情報が 追記されていく Copyright 2010 Uptime Technologies LLC, All rights reserved.
  • 5.
    導入の5ステップ • ステップ1:ビルド&インストール • ステップ2:データベースクラスタを初期化&複製 • ステップ3:マスターノードの設定 • ステップ4:スレーブノードの設定 • ステップ5:各ノードの起動&動作確認 Copyright 2010 Uptime Technologies LLC, All rights reserved.
  • 6.
    ステップ1:ビルド&インストール • まず、ソースをコンパイルし、インストールする。(バイナリパッケージを用 いる際は省略可) – $ ./configure –-prefix=/usr/local/pgsql – $ make ; make check – $ su – # make install Copyright 2010 Uptime Technologies LLC, All rights reserved.
  • 7.
    ステップ2:データベースクラスタを初期化&複製 • データベースクラスタを初期化する – master$ initdb –D $PGDATA –-no-locale –-encoding=UTF8 • アーカイブログモードを有効にする(postgresql.conf) – archive_mode = on – archive_command = 'cp %p /var/lib/pgsql/data/pg_xlogarch/%f' • ベースバックアップを取得する – master$ pg_ctl –D $PGDATA start – master$ psql –c "SELECT pg_start_backup('initial backup for SR')" template1 – master$ tar cvf pg_base_backup.tar $PGDATA – master$ psql –c "SELECT pg_stop_backup()" template1 • スレーブノードにベースバックアップを展開する – slave$ tar xvf pg_base_backup.tar – slave$ rm –f $PGDATA/postmaster.pid Copyright 2010 Uptime Technologies LLC, All rights reserved.
  • 8.
    ステップ3:マスターノードの設定 • WALをスレーブに送信できるように設定(postgresql.conf)。 – listen_addresses = ‘*‘ – wal_level = hot_standby – max_wal_senders = 5 – wal_keep_segments = 32 • スレーブノードからの接続を受け付けられるように設定(pg_hba.conf) – host replication all 10.0.2.42/32 trust Copyright 2010 Uptime Technologies LLC, All rights reserved.
  • 9.
    ステップ4:スレーブノードの設定 • スタンバイモードとして設定(postgresql.conf) – hot_standby = on • スタンバイ用の設定ファイルの作成(recovery.conf) – standby_mode = 'on' – primary_conninfo = 'host=10.0.2.41 port=5432 user=snaga' – trigger_file = '/var/lib/pgsql/data/pg_failover_trigger' – restore_command = 'cp /var/lib/pgsql/data/pg_xlogarch/%f "%p"' Copyright 2010 Uptime Technologies LLC, All rights reserved.
  • 10.
    ステップ5:各ノードの起動&動作確認 • マスターサーバを起動し、スレーブサーバを起動。 • マスターノードでは以下のようなログが見られる。 – LOG: replication connection authorized: user=snaga host=10.0.2.42 port=55811 • スレーブノードでは以下のようなログが見られる。 – LOG: streaming replication successfully connected to primary • Done! Enjoy your PostgreSQL! Copyright 2010 Uptime Technologies LLC, All rights reserved.