「信頼性」はデータベースにおいて、重要な要素の一つとなります。PowerGres V9.0 より登場した ホットスタンバイ/ストリーミングレプリケーション機能は、データベースの信頼性をより高める手法として有効となります。今回は、V9.1 を利用したホットスタンバイ/ストリーミングレプリケーションの構築方法を紹介します。
ホットスタンバイ/ストリーミングレプリケーションとは、障害発生時のダウンタイムを最小限に留める手法です。 PowerGres を 2 系統用意してそれぞれを稼動系、待機系サーバとし、稼動系サーバではデータの更新と参照を受け付け、待機系サーバではデータの参照のみを受け付けます。待機系サーバで参照を受け付けることができるので、負荷分散の効果もあります。
待機系サーバがデータの更新、参照ともに受け付けずに障害発生に備えて待機しているだけのウォームスタンバイに対して、待機系がデータの参照を受付可能なことからホットスタンバイと呼ばれます。
PowerGres はこれを実現するために、待機系サーバは、稼動系サーバから定期的にデータ更新の差分を受け取って適用します。これをストリーミングレプリケーションと呼びます。
構成イメージは以下となります。また、稼働系サーバはマスタサーバ、プライマリサーバ、待機系サーバはスレーブサーバ、スタンバイサーバと呼ばれることもあります。
それでは、設定方法を紹介していきます。なお、本記事の前提条件として PowerGres V9.1 のインストール、データベースクラスタの作成は完了していることとします。まだ済んでいない場合は、第1回 PowerGres V9.1 をインストールしてみよう を参考に環境を用意して下さい。また、本記事では構築の利便性を考え、同じマシンの別ポート上で稼働系、待機系サーバを構築します。実運用における構成は、別マシン上にそれぞれのサーバを構築するということに注意して下さい。稼働系、待機系サーバ(データベースクラスタ)の情報は以下となります。
ホスト名 | DBクラスディレクトリ | ポート | 役割 |
---|---|---|---|
localhost | C:\data | 5432 | 稼働系サーバ |
localhost | C:\data_standby | 15432 | 待機系サーバ |
それでは、稼働系サーバから構築しましょう。「ファイル」の「ホットスタンバイを構築」からホットスタンバイ構築ウィザードの指示に従って設定を行います。
各入力項目の説明については、以下をご覧下さい。
設定項目 | 設定値 | 設定項目の説明 |
---|---|---|
稼働系サーバの設定/待機系サーバの設定 | 稼働系サーバの設定 | 設定するサーバの役割を選択します |
待機系サーバの数 | 3 | 待機系サーバの数を設定します |
レプリケーション用のスーパユーザのパスワード | 任意 | レプリケーション用のスーパユーザのパスワードを設定します |
IPアドレスの範囲 | 127.0.0.1/32 | 稼働系サーバへの接続を受け付ける IPアドレスの範囲を設定します |
まずは、稼働系サーバのサービスが開始されていることを確認します。開始されていない場合は、「サービス」の「サービスの開始」を参照してサービスを開始してください。
「サーバ」の「ホットスタンバイを構築」を選択し、ホットスタンバイ構築ウィザードを起動し、指示に従って設定していきます。
「待機系サーバの数」は、後から変更することができますが、変更を反映するにはサービスの再起動が必要となるため、多めに設定しておくことをおすすめします。ここでは 3 を設定します。また、レプリケーション用のスーパユーザ repli のパスワードを設定します。「IPアドレスの範囲」には 127.0.0.1/32 を指定します。
これで稼働系サーバの設定は完了となります。
続いて、待機系サーバを構築します。稼働系サーバと同様に「ファイル」の「ホットスタンバイを構築」からホットスタンバイ構築ウィザードの指示に従って設定を行います。
各入力項目の説明については、以下をご覧下さい。
設定項目 | 設定値 | 設定項目の説明 |
---|---|---|
稼働系サーバの設定/待機系サーバの設定 | 待機系サーバの設定 | 設定するサーバの役割を選択します |
ラベル | standby | Windows のサービス名として登録されます |
ポート | 15432 | 稼働系サーバで 5432 が使われているので、15432 を指定します |
データベースディレクトリ | C:\data_standby | 今回は稼働系サーバと同一マシン上に構築しているので、重複しないようにして下さい |
作業ディレクトリ | C:\Program Files\PowerGres91\work | 稼動系サーバからダウンロードしたデータを一時的に保存するディレクトリを指定します。 少なくとも稼動系サーバのデータベースディレクトリが収まる程度のディスクの空き容量が必要となります |
稼働系サーバのホスト | 127.0.0.1 | 稼働系サーバのホストを指定します |
稼働系サーバのポート | 5432 | 稼働系サーバのポートを指定します |
パスワード | 任意 | 稼働系サーバ構築時に設定したレプリケーション用のスーパユーザ repli のパスワードを指定します |
稼働系サーバの構築と同じ要領で、ホットスタンバイ構築ウィザードの指示に従って設定を行います。
ポート番号、データベースディレクトリが重複しないように注意して下さい。
待機系の構築が完了したら、Windowsサービスとしての登録を行います。
スタンバイを開始して、ホットスタンバイ/ストリーミングレプリケーションの構築は完了となります。以降は稼働系で行われるデータ更新は待機系でも反映されることになります。
ホットスタンバイ/ストリーミングレプリケーションの構築は完了しました。ここでは構築した環境が正常に動作しているかの確認を行います。動作確認は、稼働系サーバでデータの更新を行い、その更新が待機系サーバに反映されているかを確認します。
まず始めに、テスト用のデータベース hotdb を稼働系に作成します。既にホットスタンバイ機能は有効ですので、待機系にもデータベース hotdb が作成されることになります。
稼働系にデータベース hotdb を作成しました。
待機系にも稼働系で作成したデータベース hotdb が作成されているのがわかります。今回は、同一マシン上に稼働系・待機系を構築したので、表示が若干わかりにくいですが、ラベル名 standby のデータベース一覧に hotdb が表示されています。
続いて psql コマンドツールを起動し、稼働系のデータベース hotdb にテーブルを作成し、データの投入を行います。
稼働系のデータベース hotdb に接続します。
\c hotdb
テスト用のテーブルとして t1 テーブルを作成します。
CREATE TABLE t1(id int);
テスト用のデータを投入します。
INSERT INTO t1 VALUES (1);
SELECT 文を実行して稼働系に対して正常なデータが登録されていることを確認します。
SELECT * FROM t1;
待機系でも確認してみます。ラベル名 standby の表示であることに注意して下さい。
待機系のデータベース hotdb に接続します。
\c hotdb
稼働系に登録されたデータが待機系に反映されていることが確認できます。
SELECT * FROM t1;
最後に、待機系はデータ参照のみしか受け付けないので、データ登録を行うと失敗することを確認します。
INSERT INTO t1 VALUES (2);
ホットスタンバイ/ストリーミングレプリケーションには、以下の制限事項があります。
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,${literal}{restfile}{/literal}d"| xargs rm -f
今回は、データベースの信頼性をより高める手法としてホットスタンバイ/ストリーミングレプリケーションの構築方法の紹介、動作確認を行いました。冗長化構成の構築は、設定が複雑で大変煩わしいものです。PowerGres 管理ツールを使うことで、少しでも簡単に構築できると感じていただけたら幸いです。
次回は、V9.1 から登場した同期レプリケーション機能、PowerGres V9.1 独自機能のレプリケーションの同期・非同期切り替え機能、実際の障害を想定したシミュレート(フェイルオーバの方法)を紹介します。