Caché ECP クラスタは、特定の ECP データ・サーバから別の ECP データ・サーバへのフェイルオーバーを実現する高可用性機能で、障害が発生したサーバの検出にはオペレーティング・システム・レベルでのクラスタ化が使用されます。Caché ECP クラスタ・テクノロジーはテスト済みで、Red Hat Linux Advanced Server バージョン 2.1 でサポートされます。このドキュメントでは、クラスタの構成方法の詳細を説明します。また、このドキュメントは以下のセクションで構成されます。
このセクションでは、クラスタ・システムの構成に必要な要件について、その概要を説明します。以降のセクションでは、クラスタの各種構成要素のインストール、定義、および構成方法について説明します。クラスタ・システムのセットアップ・プロセスを計画するには、最初に構成を
ホット・スタンドバイ構成または
アクティブ・アクティブ構成のどちらにするかを決定する必要があります。ホット・スタンバイ構成では、一度に 1 つのノードのみが Caché を実行します。
アクティブ・アクティブ構成では、各ノードが専用の Caché インスタンスを実行します。ノードが同じデータベースに直接アクセスすることはなく、各データベースは最初の Caché 構成またはもう一方の Caché 構成に割り当てられます。ユーザは ECP によって Caché インスタンスをネットワーク化し、ネームスペース定義によって両方のノードから同じデータを投影できます。
-
各 Caché インスタンスに一意の IP アドレスを割り当てる。
-
各 Caché インスタンスに一意の既定ポート番号を割り当てる。
-
各 Caché インスタンスに、インスタンスがインストールされデータベースが配置されている 1 つまたは複数のディスク・パーティションを割り当てる。Caché インスタンスはパーティションを共有できません。
-
各種カーネル・パラメータの設定値を計算および更新し、Caché インストールのサポートに必要な変更を加える。また、両ノードが要件をサポートすることを確認する。アクティブ・アクティブ・クラスタを構成する場合は、1 つのノードが両方の Caché インスタンスを実行する場合に備えて、そのパラメータ値を両方に追加する必要があります。
-
アクティブな各 Caché インスタンスに仮想 IP アドレスを割り当てる。
-
アクティブな各 Caché インスタンスにそれぞれ固有のパーティションが十分にあることを確認する。
-
-
Caché 構成名に Red Hat サービス名を選択する。これは必須ではありませんが、同じ名前を使用したほうがクラスタ構成が簡単になります。
クラスタ・システムを準備し、第 1 のクラスタ・ノードを構成するには、以下の手順を実行します。
-
-
各クラスタ・ノードにパーティションのマウント・ポイントを作成します。
-
-
-
-
Caché 用の仮想 IP アドレスとストレージを指定します (スターアップ・スクリプトではなく)。
各構成に優先ノードを割り当てる際は、
relocate サブコマンドに
no を指定します。
yes を指定すると、サービスの起動時に、サービスが自動的に優先ノードに再配置されます。
yes を指定しても Caché に問題は生じませんが、再配置プロセスを手動で制御できる
no のほうが推奨されます。
cluadmin>service show config cacheha1
name: cacheha1 -->Name picked for this service
preferred node: lx4
relocate: no
user script: None -->Did not specify this yet
monitor interval: 0 -->Specify 0 here
IP address 0: 192.9.202.197 -->Virtual IP address assigned
netmask 0: 255.255.0.0
broadcast 0: 192.9.255.255
device 0: /dev/sdc4 -->Partition name
mount point, device 0: /storage2 -->Mount point for the partition
mount fstype, device 0: ext3
mount options, device 0: rw
force unmount, device 0: yes
samba share, device 0: None
-
必要なすべてのサービスを定義し、ストレージを割り当てます。
-
第 1 ノードに Caché をインストールします。インストール・プロセスで構成名を尋ねられたときは、クラスタ・サービスに適用したサービス名を使用します。
インストールが完了したら、Caché 構成マネージャを使用して、以下の構成変更を行います。複数の Caché インスタンスをインストールする場合は、すべてのインストールの完了時ではなく、それぞれのインストールの完了後にこの手順を実行してください。
-
-
第 2 のライセンス・マネージャを追加し (
[ライセンス・マネージャ] をハイライト表示して
[追加] をクリック)、もう一方のクラスタ・メンバの IP アドレスまたは DNS 名を入力します。ここでも、クラスタの仮想 IP アドレスではなく、実名または実 IP アドレスを使用してください。
-
-
現在実行中の Caché インスタンスを停止し、現行ノードで Caché のすべての追加インスタンスをインストールおよび構成する手順を繰り返し実行します。
次のどちらかの方法で、このノードの Caché インスタンスを定義します。
-
インストール手順を再度実行して、もう一方のノードで使用した構成名と同じ名前を指定します。同じディレクトリにインストールします。
Caché で使用する Web サーバを構成する場合は、これが最善の方法です。Web サーバの構成は各ノードに対して
ローカル であるためです。Caché を再インストールしても、構成ファイル (
cache.cpf) に対して行った変更は影響されません。
-
もう一方のノードの Web サーバの構成が Caché で不要な場合は、
ccontrol install コマンドを使用してローカル・ノードに Caché インスタンスを登録します。
ccontrol create $cfgname directory=$tgtdir versionid=$ver
Configuration Version ID Port Directory
--------------- ---------------- ----- ----------
dn CACHEHA1 5.0.1.543 1973 /store1/c50ha
db CACHEHA2 5.0.1.543 1972 /store2/c50ha2
ccontrol create cacheha1 directory=”/store1/c50ha” versionid=”5.0.1.543”
ccontrol create cacheha2 directory=”/store1/c50ha” versionid=”5.0.1.543”
サービス・フェイルオーバーのプロセスとして Caché を開始および停止するスクリプトは、Caché に付属していません。メイン・スクリプトの例は、
Linux 用の Caché 初期化ファイル のセクションで紹介されています。メインの初期化スクリプトを作成したら、以下の手順を実行して、クラスタ・サービスに Caché を追加します。
-
インストール済みの各 Caché インスタンスの
/etc/rc.d/init.d にスクリプトを作成します。つまり、定義済みの各 Caché クラスタ・サービスに対応するインスタンスごとにスクリプトを作成します。以下の 2 例のどちらかをモデルにして、スクリプトを作成します。
#!/bin/ksh
/etc/rc.d/init.d/cache $1 cacheha1 failover
exit ?$
#!/bin/ksh
/usr/local/etc/cachesys/cache-init $1 cacheha1 failover
exit ?$
-
このスクリプトは
status コマンドをサポートしますが、監視間隔が 0 以外に設定されているときに Caché が応答不能になると、もう一方のクラスタ・メンバに自動的にフェイルオーバーされ、問題の診断に必要な情報を収集できなくなります。
-
この時点で、Caché はフェイルオーバー・クラスタ・サービスの構成要素となっています。以下の手順を実行して、クラスタをテストします。
-
-
停止ノードで実行されていた Caché バージョンが第 2 ノードで開始されていることを確認します。
-
障害が発生したマシンをオンに戻します。Caché はそのまま第 2 ノードで実行されているはずです (自動的にフェイルバックされることはありません)。
-
第 2 ノードの電源を切ります。両方の Caché インスタンスが第 1 ノードに移行するはずです。
-
-
-
Caché 構成マネージャを、クラスタの仮想 IP アドレスを使用する 2 つの Caché インスタンスに接続します。タイトル・バーのノード名を調べてどちらのノードに接続したかを特定し、
cache.cpf ファイルへのパス名を調べてそれがどちらの構成かを特定します。
#!/bin/ksh
# cache
#
# Cache "System V init" script for Linux systems
#
# Copyright (c) 2003 by InterSystems.
# Cambridge, Massachusetts, U.S.A. All rights reserved.
# Confidential, unpublished property of InterSystems.
# ------------------------------------------------------------------
# Maintenance
# 04/01/2003 This script is born.
# ------------------------------------------------------------------
# This script is put in the init.d directory and is used by
# the HA failover package to start a Cache configuration when
# the node that was "serving" it failed.
#
# Three arguments should be specified:
# hacache start <config name> failover
# where <config name> is the name of the configuration that
# is displayed by "/usr/bin/ccontrol all" in the 2nd column.
#
# This script can be used to start Cache if Cache is currently
# down (meaning it is down on both nodes). However Cache must have
# been shut down cleanly, it cannot have crashed (eg. there must
# not be a cache.ids file in the cachesys/mgr directory).
# In the future when we are capable of detecting which node created
# the cache.ids file this script will be extended so that it can
# also restart Cache at boot time following a crash. At the moment
# if this script is called without the failover flag and the
# cache.ids file exists, it will display a message and refuse to start
# Cache. Do not use the failover flag to override this behaviour unless
# you know Cache is not running on the other node.
#
# It is very dangerous to call this script and specify the failover
# flag outside of the failover scripts. In an HA environment where
# multiple nodes can see the attached storage simultaneously (eg. NFS
# mounted file systems) it is possible to start Cache from the same
# directory on both nodes; Cache does not currently prevent this.
# If this occurs the results will be disasterous and both nodes will
# have to be shut down, database degradation may need to be repaired,
# and so on.
#
if [ "$2" = "" ]
then
type="xxxx" #invalid option, forces usage message
else
config=$2 #cache configuration to play with
state=$3 #failover or "nothing"
#
basdir=`/usr/bin/ccontrol list $config | grep -i directory | awk {'print $2'}`
localnode=`uname -a | awk '{print $2}'`
if [ "${basdir}" = "" ]
then
echo "Configuration $config not found"
exit 1
fi
type=$1
fi
#
#See how we were called.
case "$type" in
(start)
# Start daemons.
if [[((-e ${basdir}/mgr/cache.ids) &&("${state}" != "failover" ))]]
then
echo "$basdir/mgr/cache.ids exists and startup is not failover"
echo "Cache configuration $config not started on $localnode"
exit 1
fi
echo "Starting Cache-HA config $config on $localnode"
ccontrol start $config quietly
status=$?
case $status in
(1)
echo "...Failed to start"
exit 1
;;
(0)
echo "...Started"
exit 0
esac
;;
(stop)
# Stop daemons.
echo "Stopping Cache-HA config $config on $localnode"
ccontrol stop $config quietly
status=$?
case $status in
(1)
echo "Cache configuration $config failed to stop"
exit 1
;;
(0)
echo "Cache configuration $config stopped"
exit 0
esac
;;
(status)
FIELDWIDTH=2
state=`/usr/bin/ccontrol all | grep -i $config | awk {'print $1'}`
if [ "$state" = "up" ]
then
exit 0 #cache is up
fi
exit 1 #cache is down or we can't tell
;;
(restart)
$0 stop $2 $3 || :
$0 start $2 $3
;;
(*)
echo "Usage: $0 {start|stop|status|restart} <config> [failover|null]"
exit 1
esac
exit 0
どちらかのクラスタ・メンバ上で実行されている Caché によって、フェイルオーバー・クラスタの Caché をアップグレードできます。ただし、アップグレードを実行していないノードでは、Caché が保守するレジストリ (
ccontrol all および
ccontrol list で表示される) が正しいバージョン ID を表示しません。バージョン ID は
ccontrol update コマンドを使用して手動で更新します。構文は、以下の通りです。
ccontrol update $cfgname versionid=$ver
ccontrol update cacheha1 versionid="5.0.1.579"