お問い合わせ
03-5979-2701
PowerGres
PowerGres 体験記 戻る

第 2 回 ホットスタンバイ/ストリーミングレプリケーションを構築してみよう

対象バージョン: PowerGres V9.1
本文では Microsoft Windows 7 (64 ビット版) において PowerGres on Windows V9.1 Update1 を使用して解説しています。

「信頼性」はデータベースにおいて、重要な要素の一つとなります。PowerGres V9.0 より登場した ホットスタンバイ/ストリーミングレプリケーション機能は、データベースの信頼性をより高める手法として有効となります。今回は、V9.1 を利用したホットスタンバイ/ストリーミングレプリケーションの構築方法を紹介します。

  1. ホットスタンバイ/ストリーミングレプリケーション とは
  2. ホットスタンバイ/ストリーミングレプリケーションの設定
    1. 稼働系サーバの設定
    2. 待機系サーバの設定
    3. 動作確認
  3. ホットスタンバイの制限事項
  4. まとめ

ホットスタンバイ/ストリーミングレプリケーション とは

ホットスタンバイ/ストリーミングレプリケーションとは、障害発生時のダウンタイムを最小限に留める手法です。 PowerGres を 2 系統用意してそれぞれを稼動系、待機系サーバとし、稼動系サーバではデータの更新と参照を受け付け、待機系サーバではデータの参照のみを受け付けます。待機系サーバで参照を受け付けることができるので、負荷分散の効果もあります。

待機系サーバがデータの更新、参照ともに受け付けずに障害発生に備えて待機しているだけのウォームスタンバイに対して、待機系がデータの参照を受付可能なことからホットスタンバイと呼ばれます。

PowerGres はこれを実現するために、待機系サーバは、稼動系サーバから定期的にデータ更新の差分を受け取って適用します。これをストリーミングレプリケーションと呼びます。

構成イメージは以下となります。また、稼働系サーバはマスタサーバ、プライマリサーバ、待機系サーバはスレーブサーバ、スタンバイサーバと呼ばれることもあります。

図:構成イメージ

ホットスタンバイ/ストリーミングレプリケーションの設定

それでは、設定方法を紹介していきます。なお、本記事の前提条件として PowerGres V9.1 のインストール、データベースクラスタの作成は完了していることとします。まだ済んでいない場合は、第1回 PowerGres V9.1 をインストールしてみよう を参考に環境を用意して下さい。また、本記事では構築の利便性を考え、同じマシンの別ポート上で稼働系、待機系サーバを構築します。実運用における構成は、別マシン上にそれぞれのサーバを構築するということに注意して下さい。稼働系、待機系サーバ(データベースクラスタ)の情報は以下となります。

ホスト名DBクラスディレクトリポート役割
localhostC:\data5432稼働系サーバ
localhostC:\data_standby15432待機系サーバ

稼働系サーバの設定

それでは、稼働系サーバから構築しましょう。「ファイル」の「ホットスタンバイを構築」からホットスタンバイ構築ウィザードの指示に従って設定を行います。

各入力項目の説明については、以下をご覧下さい。

設定項目設定値設定項目の説明
稼働系サーバの設定/待機系サーバの設定稼働系サーバの設定設定するサーバの役割を選択します
待機系サーバの数3待機系サーバの数を設定します
レプリケーション用のスーパユーザのパスワード任意レプリケーション用のスーパユーザのパスワードを設定します
IPアドレスの範囲127.0.0.1/32稼働系サーバへの接続を受け付ける IPアドレスの範囲を設定します

まずは、稼働系サーバのサービスが開始されていることを確認します。開始されていない場合は、「サービス」の「サービスの開始」を参照してサービスを開始してください。

図: 稼働系サーバの設定画面1

「サーバ」の「ホットスタンバイを構築」を選択し、ホットスタンバイ構築ウィザードを起動し、指示に従って設定していきます。

図: 稼働系サーバの設定画面2
図: 稼働系サーバの設定画面3

「待機系サーバの数」は、後から変更することができますが、変更を反映するにはサービスの再起動が必要となるため、多めに設定しておくことをおすすめします。ここでは 3 を設定します。また、レプリケーション用のスーパユーザ repli のパスワードを設定します。「IPアドレスの範囲」には 127.0.0.1/32 を指定します。

図: 稼働系サーバの設定画面4
図: 稼働系サーバの設定画面5

これで稼働系サーバの設定は完了となります。

図: 稼働系サーバの設定画面6

待機系サーバの設定

続いて、待機系サーバを構築します。稼働系サーバと同様に「ファイル」の「ホットスタンバイを構築」からホットスタンバイ構築ウィザードの指示に従って設定を行います。

各入力項目の説明については、以下をご覧下さい。

設定項目設定値設定項目の説明
稼働系サーバの設定/待機系サーバの設定待機系サーバの設定設定するサーバの役割を選択します
ラベルstandbyWindows のサービス名として登録されます
ポート15432稼働系サーバで 5432 が使われているので、15432 を指定します
データベースディレクトリC:\data_standby今回は稼働系サーバと同一マシン上に構築しているので、重複しないようにして下さい
作業ディレクトリC:\Program Files\PowerGres91\work稼動系サーバからダウンロードしたデータを一時的に保存するディレクトリを指定します。 少なくとも稼動系サーバのデータベースディレクトリが収まる程度のディスクの空き容量が必要となります
稼働系サーバのホスト127.0.0.1稼働系サーバのホストを指定します
稼働系サーバのポート5432稼働系サーバのポートを指定します
パスワード任意稼働系サーバ構築時に設定したレプリケーション用のスーパユーザ repli のパスワードを指定します

稼働系サーバの構築と同じ要領で、ホットスタンバイ構築ウィザードの指示に従って設定を行います。

図: 待機系サーバの設定画面1
図: 待機系サーバの設定画面2

ポート番号、データベースディレクトリが重複しないように注意して下さい。

図: 待機系サーバの設定画面3
図: 待機系サーバの設定画面4

待機系の構築が完了したら、Windowsサービスとしての登録を行います。

図: 待機系サーバの設定画面5
図: 待機系サーバの設定画面6

スタンバイを開始して、ホットスタンバイ/ストリーミングレプリケーションの構築は完了となります。以降は稼働系で行われるデータ更新は待機系でも反映されることになります。

図: 待機系サーバの設定画面7
図: 待機系サーバの設定画面8

動作確認

ホットスタンバイ/ストリーミングレプリケーションの構築は完了しました。ここでは構築した環境が正常に動作しているかの確認を行います。動作確認は、稼働系サーバでデータの更新を行い、その更新が待機系サーバに反映されているかを確認します。

まず始めに、テスト用のデータベース hotdb を稼働系に作成します。既にホットスタンバイ機能は有効ですので、待機系にもデータベース hotdb が作成されることになります。

図: テスト1
図: テスト2

稼働系にデータベース hotdb を作成しました。

図: テスト3

待機系にも稼働系で作成したデータベース hotdb が作成されているのがわかります。今回は、同一マシン上に稼働系・待機系を構築したので、表示が若干わかりにくいですが、ラベル名 standby のデータベース一覧に hotdb が表示されています。

図: テスト4

続いて psql コマンドツールを起動し、稼働系のデータベース hotdb にテーブルを作成し、データの投入を行います。

図: テスト5

稼働系のデータベース hotdb に接続します。

\c hotdb

図: テスト6

テスト用のテーブルとして t1 テーブルを作成します。

CREATE TABLE t1(id int);

図: テスト7

テスト用のデータを投入します。

INSERT INTO t1 VALUES (1);

図: テスト8

SELECT 文を実行して稼働系に対して正常なデータが登録されていることを確認します。

SELECT * FROM t1;

図: テスト9

待機系でも確認してみます。ラベル名 standby の表示であることに注意して下さい。

図: テスト10

待機系のデータベース hotdb に接続します。

\c hotdb

図: テスト11

稼働系に登録されたデータが待機系に反映されていることが確認できます。

SELECT * FROM t1;

図: テスト12

最後に、待機系はデータ参照のみしか受け付けないので、データ登録を行うと失敗することを確認します。

INSERT INTO t1 VALUES (2);

図: テスト13

ホットスタンバイの制限事項

ホットスタンバイ/ストリーミングレプリケーションには、以下の制限事項があります。

  1. 稼動系と待機系の PowerGres は、同一プラットフォームかつ同一バージョンである必要があります
  2. 稼動系から待機系へのフェイルオーバや参照の負荷分散は、自動では行われません。 アプリケーション側の作り込みで対応するか、pgpool-II などのミドルウェアを導入する必要があります
  3. 待機系は常にリカバリを実施しているため、データの参照しか行うことができません。 更新はエラーになります
  4. 非同期レプリケーションの場合には、稼動系の障害発生時に待機系へのフェイルオーバを行うと、待機系に未反映の更新内容は失われる可能性があります
  5. ホットスタンバイ構築後、稼働系サーバにて生成されるアーカイブログは、自動的に削除されません
    • 稼働系サーバにおいて、アーカイブログは溜りつづけてしまうので以下のようなバッチファイルやシェルスクリプトを作成し、定期的に実行することによってディスク容量の圧迫を回避できます

    Windows の場合
    @echo off
    
    rem # WALファイル保存ディレクトリ
    set xlogpath=C:\pg_data\pg_archive
    rem # 残すファイル数
    set restfile=10
    
    cd %xlogpath%
    for /f "skip=10" %%A in ('dir /b /o-n ^| find /v "archive" ^| ^
    find /v "backup"') do (
     del %%A
    )
          

    Linux の場合
    #!/bin/sh
    
    # WALファイル保存ディレクトリ
    xlogpath=/opt/pg_data/pg_archive
    # 残すファイル数
    restfile=10
    
    cd $xlogpath
    ls -t | grep -v backup | grep -v archive_status | \
    sed -e "1,${restfile}d"| xargs rm -f
          

まとめ

今回は、データベースの信頼性をより高める手法としてホットスタンバイ/ストリーミングレプリケーションの構築方法の紹介、動作確認を行いました。冗長化構成の構築は、設定が複雑で大変煩わしいものです。PowerGres 管理ツールを使うことで、少しでも簡単に構築できると感じていただけたら幸いです。

次回は、V9.1 から登場した同期レプリケーション機能、PowerGres V9.1 独自機能のレプリケーションの同期・非同期切り替え機能、実際の障害を想定したシミュレート(フェイルオーバの方法)を紹介します。