• お問い合わせ
  • ユーザー登録
ドキュメント
Turbolinux CLUSTERPRO Server 6 で構築するフェイルオーバクラスタ
− PostgreSQL編 −

1. はじめに

この文書は、Turbolinux CLUSTERPRO Server 6(以降、CLUSTERPRO と呼ぶ)を使用し、PostgreSQLをクラスタリングする方法について簡単に説明しています。CLUSTERPROを使用したフェイルオーバクラスタを構築する際に、参考情報としてご覧ください。

2. フェイルオーバクラスタシステムの概要

ここでは、次の図のフェイルオーバクラスタシステムを構築します。このフェイルオーバクラスタシステムは、2 つのノードで構成され、各 PC サーバのローカルディスク(IDE)に、「Turbolinux Server 6.5」、「Turbolinux CLUSTERPRO Server 6」をインストールし、その上に PostgreSQL を動作させます。PostgreSQL のデータベースを、共有ディスク上に構築し、主系(SERVER1)にて動作させます。待機系(SERVER2)は、主系がダウンした場合に、PostgreSQL を起動し業務を引き継ぎます。データベース部分は、共有ディスクを介して引き継ぎします。

図1

また、PostgreSQL クライアントから、フェイルオーバクラスタシステムで稼働させている PostgreSQL にアクセスする場合には、仮想 IP アドレス(vip11)を経由してアクセスします。そうすることにより、PostgreSQL クライアントからは、フェイルオーバクラスタシステムでの業務の切り替えを、意識することなくアクセスすることが可能となります。

フェイルオーバノード(SERVER1, SERVER2)に必要となるハードウェアは次の通りです。

【NIC(ネットワークインタフェースカード) 2 枚】

(インタコネクト専用 LAN)

フェイルオーバ型クラスタの専用通信パスで、ハートビートを行うと同時にサーバ間の情報交換に使用します。今回は、インタコネクト専用 LAN を、各サーバごとに以下 IP アドレスで設定します。

SERVER1 : 10.1.1.1/255.255.255.0
SERVER2 : 10.1.1.2/255.255.255.0

インタコネクト専用 LAN は、通常 2 ノードクラスタシステムであれば、クロスケーブルで接続します。

(パブリック LAN)

クライアントと接続する通信パスです。インタコネクト専用 LAN 異常時には、サーバ間の情報交換にも使用します。

【RS-232C】

クロスケーブルで接続し、ネットワークパーティション障害を回避するために、他サーバの生存確認に使用します。

【共有ディスク】

アプリケーションサーバで使用するデータを格納し、リソースの引き継ぎに使用します。また、他サーバに障害が発生した場合、ネットワークパーティション障害を回避するための最終確認を、共有ディスク経由で行い、データ破壊を防ぎます。

【HBA(Host Bus Adapter)】

SCSI インタフェースカードもそくはファイバチャネルカードを使用し、共有ディスクと PC サーバを接続します。

また、フェイルオーバクラスタを構成するノード以外に、以下のノードを用意します。

【CLUSTERPRO マネージャ】

GUI によるクラスタシステムの設定/管理クライアントで、Windows(95/98/NT4.0/2000/Me)に、この CLUSTERPRO マネージャをインストールします。

【PostgreSQL クライアント】

PostgreSQL サーバに接続する確認クライアントに使用します。今回は、LinuxOS 上に PostgreSQL クライアントが導入されているものとします。

3. インストール

3.1 前準備

まず、フェイルオーバクラスタを構築する両サーバに SCSI ホストバスアダプタの BIOS 設定を施します。今回のクラスタシステムの共有ディスクへの接続には、SCSI ホストバスアダプタ(Adaptec 29160)を経由し、PC サーバと接続します。両サーバの SCSI ホストバスアダプトの BIOS 設定を以下のように設定します。なお、今回使用する共有ディスクは、マルチホスト対応を前提とします。

SCSI Bus Interface Definitions
  Host Adapter SCSI ID .................................... 7
  SCSI Parity Checking .................................... Enabled
  Host Adapter SCSI Termination
    LVD/SE Connector ...................................... Automatic
    SE Connector .......................................... Automatic

Additional Options
  Boot Device Options
    Boot SCSI ID .......................................... 0
    Boot LUN Number ....................................... 0
  SCSI Device Configuration
    Sync Transfer Rate (MB/Sec) ........................... 160
    Initiate Wide Negotiation ............................. Yes
    Enable Disconnection .................................. Yes
    Send Start Unit Command ............................... No
    Enable Write Back Cache ............................... N/C
    BIOS Multiple LUN Support ............................. No
    Include in BIOS Scan .................................. Yes
  Advanced Configuration Options
    Reset SCSI Bus at IC Initialization ................... Disabled
    Display <Ctrl><A> Message During BIOS Initialization .. Enabled
    Extended BIOS Translation for DOS Drives > 1 GByte .... Enabled
    Verbose/Silent Mode ................................... Verbose
    Host Adapter BIOS ..................................... Disabled:scan bus
    Domain Validation ..................................... Enable
    Support Removable Disks Under BIOS as Fixed Disks ..... Boot Only
    BIOS Support for Bootable CD-ROM ...................... Disabled
    BIOS Support for Int13 Extensions ..................... Enable		

3.2 Turbolinux Server 6.5 のインストール

Turbolinux Server 6.5を、両フェイルオーバノード(SERVER1, SERVER2)にインストールします。詳細は、Turbolinux Server 6.5の「インストールガイド」を参照してください。

3.3 Turbolinux CLUSTERPRO Server 6 のインストール

Turbolinux CLUSTERPRO Server 6を、以下の手順で両フェイルオーバノードノード(SERVER1, SERVER2)にインストールします。

※.インストールは、root 権限を待つユーザで行ってください。なお、今後も root 実行の場合には #、ユーザ実行の場合には $ で記述します。

# mount /mnt/cdrom
# miniuni
# cd /mnt/cdrom
# sh install.sh
TurboLinux CLUSTERPRO Server のインストールを行いますか? [y/N]
y
kernel update 2.2.18-2 ==> 2.2.18-2NEC
kernel                      ##################################################
kernel-headers              ##################################################
kernel-ibcs                 ##################################################
kernel-utils                ##################################################
kernel-source               ##################################################
kernel-doc                  ##################################################
clusterpro                  ##################################################
iplbdaemon                  ##################################################
iplbapi                     ##################################################
設定を反映させるには、システムを再起動させる必要があります。
今すぐに再起動しますか? [y/N]
y

インストールする PC サーバの kernel バージョンを自動判別し、CLUSTERPRO 用の適切な kernel にアップグレードすると同時に、CLUSTERPRO 用の 3 つのパッケージ(clusterpro, iplbdaemon, iplbapi)をインストールします。

3.4 CLUSTERPRO マネージャのインストール

次に、以下の手順で CLUSTERPRO マネージャ(管理端末)にインストールします。

 
1. CLUSTERPRO CD-ROM を挿入すると、「CLUSTERPROマネージャ」のインストールダイアログボックスが表示されます。[続行]を押してください。CD-ROMが自動起動に設定されていない場合は、CD-ROM 内の "\CLUSTERPRO\Win\armmgr\Setup32.exe" を実行してください。
2. 「CLUSTERPROマネージャ」をインストールするディレクトリを指定して、[続行]を押してください。指定したディレクトリが存在しなければ新規に作成する旨のメッセージが表示されます。既に指定したディレクトリが存在する場合には、そのディレクトリ内のファイルを上書きする旨のメッセージが表示されます。問題ない場合には、[続行]を押してください。
3. 入力情報の確認ダイアログボックスが表示されます。正しいことを確認し、[続行]を押してください。
4. 「CLUSTERPRO サーバ」との通信及び「CLUSTERPRO マネージャ」のモジュール間通信を行うために、必要なポート番号を示すダイアログボックスが表示されます。ポート番号を変更せずにそのまま[続行]を押してください。
5. 「CLUSTERPROマネージャ」セットアップ完了画面が表示されます。

以上で「CLUSTERPROマネージャ」のインストールは完了です。CLUSTERPRO マネージャを有効にするために、管理端末を再起動してください。 

4. フェイルオーバクラスタの構築

各ノードへ LinuxOS および CLUSTERPRO をインストールし、CLUSTERPRO マネージャの準備が完了したなら、早速 PostgreSQL のフェイルオーバクラスタの構築を行ってみましょう。今回は、フェイルオーバするアプリケーションとして、PostgreSQL で構築します。基本的には LinuxOS 上で動作するアプリケーションであれば何でも構いません。

4.1 共有ディスクの設定

4.1.1 パーティションの確保

片方のサーバから fdisk コマンドを使い、共有ディスクに対して以下のようなパーティション設定を行います

# fdisk -l /dev/sda

ディスク /dev/sda: ヘッド 255, セクタ 63, シリンダ 4290
ユニット = シリンダ数 of 16065 * 512 バイト

 デバイス ブート   始点      終点  ブロック   ID  システム
/dev/sda1             1         2     16033+  83  Linux
/dev/sda2             3       512   4096575   83  Linux

/dev/sda1 は、CLUSTER パーティションとして、10 MB 程度以上を確保します。各ノードは、この CLUSTER パーティションに対して Raw I/O でアクセスし、サーバ間の情報交換を行います。

/dev/sda2 をアプリケーション(今回の場合は、PostgreSQL)の切り替えパーティションとして使用します。

4.1.2 ファイルシステムの作成

片方のサーバから /dev/sda2 のパーティションに対して、EXT3 フィアルシステムを作成します。

# mkfs.ext3 /dev/sda2

次のコマンドを実行します。

# tune2fs -l /dev/sda2

mkfs.ext3 コマンドを実行して、EXT3 ファイルシステムを構築しただけでは、そのパーティションに対して、マウントカウント到達時点(Maximum mount count:)もしくは起動後の経過時間到達(Check interval:)により fsck の自動実行制御が設定されています。以下コマンドを実行し、fsck の自動実行制御を抑制してください。

# tune2fs -c -1 -i 0 /dev/sda2

上記設定を行うことで、OS からの自動的な fsck 実行制御を抑制することができますが、定期的なメンテナンスのタイミングで fsck を実行することをお勧めします。

4.1.3 マウントポイントの作成 

両方のサーバで、切り替えパーティションのマウントポイント(ここでは、"/mnt/raid1")を作成します。

# mkdir /mnt/raid1

ここまでの作業完了後に、両方の PC サーバを一旦リブートします。

4.2 共有ディスク上への PostgreSQL データベース構築

次に共有ディスク上に PostgreSQL データベースを構築し、各ノードの PostgreSQL から共有ディスク上データベースにアクセスするための設定を行います。

ここでは、LinuxOS 上には PostgreSQL がインストールされているものとして、解説を進めていきます。

4.2.1 postgres ユーザの作成

両方のサーバで postgres ユーザおよびパスワード設定を行います。通常、PostgreSQL がインストールされていれば、postgres ユーザは存在するはずです。次に root にて postgres ユーザのパスワードを設定しておきます。

# passwd postgres

4.2.2 /var/lib/pgsql を共有ディスクへ移行

postgres のホームディレクトリは、/var/lib/pgsql となっています。このパスを共有ディレクトリを参照するように設定します。

# mount /dev/sda2 /mnt/raid1
# mv /var/lib/pgsql /mnt/raid1
# ln -s /mnt/raid1/pgsql /var/lib/pgsql

もう一方のサーバ側で、以下を実行します。

# rm -fr /var/lib/pgsql
# ln -s /mnt/raid1/pgsql /var/lib/pgsql

4.2.3 クライアントアクセス許可の設定

デフォルトの設定のままでは、クライアントからは PostgreSQL にはアクセスができません。今回のように PostgreSQL クライアントから接続するためには、以下の設定が必要となります。この作業は、共有ディスクにマウントしている片方のサーバより行ってください。

# su - postgres
$ cd /var/lib/pgsql/data
$ chmod 600 pg_hba.conf

pg_hba.conf に次の行を追加します。

host     all    192.168.4.0     255.255.255.0      trust

4.2.4 PostgreSQL の初期化

共有ディスクに対して、PostgreSQL の初期化を行います。この作業は、共有ディスクにマウントしている片方のサーバより実行します。

# /etc/rc.d/init.d/postgresql start

PostgreSQL のデータベースを初期化する initdb コマンドが、一番最初に postgresql を起動することで行われます。/var/lib/pgsql/data/base/template1 が作成されたことを確認してください。

4.2.5 データベースおよびテーブルの作成

共有ディスクに対してデータベースおよびテーブルを作成します。この作業も、共有ディスクにマウントしている片方のサーバより実行します。

# su - postgres
$ createdb test

test データベースが作成されているかどうか確認します。

$ psql -l
        List of databases
 Database  |  Owner   | Encoding  
-----------+----------+-----------
 template1 | postgres | SQL_ASCII
 test      | postgres | SQL_ASCII
(2 rows)

次にテスト用のテーブルを作成しておきましょう。

$ psql test
test=# create table test1 (c1 int);
test=# insert into test1 values(1);
test=# select * from test1;
c1
--
 1
(1 row)

psql を終了します。

test =# \q

4.2.6 PostgreSQL の停止と共有ディスクアンマウント

共有ディスクにマウントしている片方のサーバから、root にて PostgreSQL を停止し、共有ディスクをアンマウントします。

# /etc/rc.d/init.d/postgresql stop
# umount /mnt/raid1

4.3 CLUSTERPRO ディスクパーティションの設定

ここでは、CLUSTERPRO のディスクパーティション設定を行います。LinuxOS のパーティション設定(/etc/fstab)とは別に、CLUSTERPRO 用のディスクパーティション情報として /etc/clusterpro/fstab を用意します。CLUSTERPRO で使用するディスクパーティションを /etc/fstab に登録しないように注意してください。

CLUSTERPRO のディスクパーティションを作成する方法には、以下の 2 つの方法があります。

 
1. armdadmin コマンドで設定
2. /etc/clusterpro/fstab を直接編集

今回は、2の方法で、以下を /etc/clusterpro/fstab ファイルとして作成します。

NP ###NEC_NP1 /dev/sda1
SW raid1      /dev/sda2 /mnt/raid1 ext3 rw,sync
:mnttimeout 60
:fsckopt -y

上記ファイルを両方のサーバの /etc/clusterpro/fstab に用意してください。

4.4 スタートアップ状態の変更

両方のサーバより、以下コマンドを実行して次回起動時には CLUSTERPRO 本体が起動されるようにします。

# /etc/clusterpro/armstartup -auto

両方のサーバを再起動します。以降、LinuxOS の再起動で、CLUSTERPRO 自体が自動的に起動されるようになります。

4.5 CLUSTERPRO マネージャからのフェイルオーバクラスタ設定

ここからは、CLUSTERPRO マネージャからの設定となります。

4.5.1 スーパクラスタおよびサブクラスタの生成

【スーパークラスタの生成】

CLUSTERPRO マネージャからスーパークラスタの生成を、次の手順で行います。

 
"CLUSTERPRO" アイコンを右クリックし、[スーパークラスタの生成]を選択します。
[スーパークラスタ名]に「SuperCluster」を入力します。
[メンバ種別]は「サブクラスタ」を選択して、[次へ]を押してください。

【サーバ情報設定】

サブクラスタの設定を行います。

 
[サブクラスタ名]に「SubCluster」を入力し、[自動発見]ボタンを押してください。自動発見を行わず、手動で 1 台目のサーバ情報を入力しても構いません。
サーバ名    : SERVER1
IP アドレス : 192.168.4.21
 
[次へ]を押してください。

【インタコネクト/パブリック LAN 設定】

サブクラスタに加えたサーバのインタコネクトアドレスと、パブリック LAN アドレスを設定します。

 
[追加]ボタンを押すと、登録可能なアドレス一覧が表示されるので、順位 1 にはインタコネクトアドレス、順位 2 にはパブリック LAN アドレス(セカンダリインタコネクト)を追加してください。
1 : 10.1.1.1
2 : 192.168.4.21
 
次にパブリック LAN で使用する IP アドレスを登録します。
192.168.5.201
 
[次へ]を押してください。

【ポート番号の設定】

サーバ間通信で使用するポート番号を決定します。

 
既定値のままとし、[次へ]を押してください。

【ネットワークパーティション解決方式の設定】

サブクラスタのネットワークパーティション解決方法を決定します。

 
[COM ポート/ディスク方式]を選択します。[COM ポート方式]チェックボックスをチェックし、[ポート名]リストボックスから、RS-232C クロスケーブルが接続されている COMポートのデバイス名を選択します。
[ディスク方式]チェックボックスをチェックし、[追加]ボタンで、使用するCLUSTER パーティション(###NEC_NP1)を追加してください。
[次へ]を押してください。
次のダイアログが表示されますので、[OK]を押してください。
ネットワークパーティション解決方式として、COM ポート方式を採用します。
この方式は、2 台のサーバで構成されたクラスタに適用してください。

【クラスタ生成/サーバ追加 確認】

[完了]を押してください。「クラスタの生成は、全て正常に終了しました。」というメッセージが表示されれば、クラスタ生成は成功です。

4.5.2 サブクラスタ配下へのサーバ追加

生成したサブクラスタ(SubCluster)にサーバを追加します。

 
"SubCluster" アイコンを右クリックし、[サーバの追加]を選択します。
[自動発見]を利用し、追加可能なサーバを検索するか、[サーバ名]、[IP アドレス]に追加するサーバの情報を入力します。
サーバ名    : SERVER2
IP アドレス : 192.168.4.22
 
[OK]を押します。

4.5.3 PostgreSQL フェイルオーバグループの作成

フェイルオーバを行う単位となる、PostgreSQL フェイルオーバグループを作成します。

 
"SubCluster" アイコンを右クリックし、[グループの追加]を選択します。
[フェイルオーバグループ名]に「PostgreSQL」を入力して、[OK]を押してください。
[リソースの設定]ボタンを押します。

【リソースのプロパティ設定】

PostgreSQL データベースを配置する切替ディスクの設定を行います。

 
[切替ディスク]タブで[追加]ボタンを押してください。
一覧より「raid1」パーティションを選択し、[OK]を押します。

次に PostgreSQL に接続するための IP アドレスを設定します。

 
[IPアドレス]タブで[フローティング IP 追加]を押してください。
フローティング IP 候補一覧より、パブリック LAN アドレスと同一のサブネットを選択し、フローティングIPアドレスを設定してください。
フローティング IP アドレス : 192.168.4.11
ネットマスク               : 255.255.255.0
 
[OK]を押します。
[リソースのプロパティ]で、もう一度[OK]を押します。

【グループのプロパティ】

ここでは、[スクリプト]タブのみを編集し、その他の設定を既定値とします。

 
[スクリプト]タブを選択します。
[スクリプト一覧]より、START.BATを選択し、[編集]を押します。この Start.bat に PostgreSQL の起動(以下、追加部分)を付け加えてください。
#! /bin/sh
#***************************************
#*              START.BAT              *
#***************************************

if [ "$ARMS_EVENT" = "START" ]
then
        if [ "$ARMS_DISK" = "SUCCESS" ]
        then
                armlog "NORMAL1"

追加部分 ->     /etc/rc.d/init.d/postgresql start
                           :
                           :
elif [ "$ARMS_EVENT" = "FAILOVER" ]
then
        if [ "$ARMS_DISK" = "SUCCESS" ]
        then
                armlog "FAILOVER1"

追加部分 ->     /etc/rc.d/init.d/postgresql start
                           :
                           :
 
[スクリプト一覧]より、STOP.BATを選択し、[編集]を押します。この Stop.bat にPostgreSQL の停止(以下、追加部分)を付け加えてください。
#! /bin/sh
#***************************************
#*               STOP.BAT              *
#***************************************

if [ "$ARMS_EVENT" = "START" ]
then
        if [ "$ARMS_DISK" = "SUCCESS" ]
        then
                armlog "NORMAL1"

追加部分 ->     /etc/rc.d/init.d/postgresql stop
                           :
                           :
elif [ "$ARMS_EVENT" = "FAILOVER" ]
then
        if [ "$ARMS_DISK" = "SUCCESS" ]
        then
                armlog "FAILOVER1"

追加部分 ->     /etc/rc.d/init.d/postgresql stop
                           :
                           :
 
[OK]を押します。

このスクリプトに、今回は PostgreSQL の起動/停止のみを定義しましたが、このスクリプトをカスタマイズすることにより、システムの起動/停止、復旧障害、資源引き継ぎ時など、さまざまな場合に適した処理を記述することができます。

【フェイルオーバポリシ】

PostgreSQL のフェイルオーバポリシを設定します。

 
[サーバ一覧]から[追加]ボタンで、"SERVER1" > "SERVER2" の順で追加してください。
[OK]ボタンを押すとフェイルオーバグループの設定が開始されます。

4.5.4 PostgreSQL グループの起動

SuperCluster 配下のアイコンは、PostgreSQL 以外すべてグリーンで表示されているはずです。PostgreSQL グループだけは、まだグループ起動を行っていないので、グレー表示されています。

PostgreSQL グループアイコンを右クリックし、[グループの起動]を選択します。[OK]を押せば、SERVER1 で PostgreSQL が起動されます。

CLUSTERPROマネージャ画面

ここまでの作業が正常に行われていれば、CLUSTERPRO マネージャの状態は上のようになっているはずです。確認してみてください。

5. PostgreSQL フェイルオーバクラスタの確認

それでは、実際に作成した PostgreSQL フェイルオーバクラスタを確認してみましょう。

まず、PostgreSQL クライアントへ postgres ユーザでログインし、以下のコマンドを実行します。

$ psql -h vip11 -d test -c "select * from test1"
c1
--
 1
(1 row)

先程作成したデータベースおよびテーブルが、仮想 IP アドレス(vip11 : 192.168.4.11)を経由して参照できます。

次に、test1 テーブルに 1 ローデータを追加します。

$ psql -h vip11 -d test -c "insert into test1 values(2)"

ここで、SERVER1 のノードがダウンしたと想定し、SERVER1 のノードをシャットダウンさせます。

# shutdown -h now

しばらくすると、SERVER2 は、SERVER1 のダウンを検出し、PostgreSQL グループの引き継ぎを行います。CLUSTERPRO マネージャを監視し、PostgreSQL の引き継ぎが正しく完了したのを確認し、もう一度 PostgreSQL クライアントから以下のコマンド実行してみてください。

$ psql -h vip11 -d test -c "select * from test1"
c1
--
 1
 2
(2 rows)

先程フェイルオーバさせる前に追加したローが正しく反映されており、今度は SERVER2 を経由して結果が返されています。

今回は、PostgreSQL クライアントから psql コマンドを使って確認しましたが、通常はアプリケーションサーバなどからアクセスすることになるはずです。これで、CLUSTERPRO を使った PostgreSQL フェイルオーバの解説は終わりです。

関連文書

none

対象製品
  • Turbolinux CLUSTERPRO Server 6
  • Turbolinux Server 6.5

Last modified : Feb Oct 18 JST 2002 # 1