HADBの両ノード障害発生時の復旧方法
HADBの両ノード障害発生時の復旧方法
前回、HADBノードの再起動と状態確認方法で説明しましたが、
HADBを構成するノードの再起動が必要な場合は、片ノードづつ
リブートをして頂くか、"hadbm stop HADB_NAME"を実行した後、
再起移動してください。
仮に、HADBを構成するノードがお互いに通信できなくなった場合、
もしくは、両ノードが同時に停止してしまったような場合
データベースの整合性が取れなくなりHADBサービスを提供できなくなります。
そのような場合、データベースを再構築しなくてはなりません。
今回は、両ノードが同時に停止してしまった場合、もしくはステータスが
不正な状態になった場合のHADBの復旧方法について説明します。
復旧手順は下記の2ステップを実行してください。
手順1: HADBを初期化("hadbm clear")する。
手順2: "asadmin configure-ha-cluster"を実行する。
両ノード障害の発生(疑似)
DBの不整合が発生する状態を作成する為、HADBが稼働している状態で、
両ノードを同時にリブートして下さい。
|
appserver1 > sync appserver1 > reboot appserver2 > sync appserver2 > reboot |
不正な状態に陥っている事の確認
次に、両ノードをリブートした後、それぞれのシステム上でHADBの
管理エージェント(ma)を起動して下さい。
その後、"hadbm status HADB_NAME"を実行して見ましょう。
上記で、1台づつマシンをリブートした時と比べ、いつまで経っても
状態がHAFaultTolerant,FaultTolerantに変わりません。
さらには、状態は"NonOperational"として表示されています。
この状態は、HADBとしてサービスを提供できていない状態を表しています。
|
appserver1 > /sun/SUNWappserver91/hadb/4/bin/ma-initd start appserver2 > /sun/SUNWappserver91/hadb/4/bin/ma-initd start appserver1 > /sun/SUNWappserver91/hadb/4/bin/hadbm status app-cluster1 Please enter the password for the admin system user:*********** 2007-09-12 14:38:44.813 INFO hadbm status --nodes=false --quiet=false --version=false --yes=false --force=false --echo=false app-cluster1 Database Status app-cluster1 NonOperational |
HADBデバイスのクリーンアップ
上記のように、"NonOperational"の状態から"HAFaultTolerant,FaultTolerant"の
状態に戻すためには、下記の手順に従い修復を行います。
HADBの修復を行うために、"hadbm clear HADB_NAME"を実行して下さい。
"hadbm clear"を実行した後、"hadbm status HADB_NAME"を実行すると
HADBの状態が"NonOperational"から"FaultTolerant"に変わる事を確認できます。
|
appserver1 > /sun/SUNWappserver91/hadb/4/bin/hadbm clear app-cluster1 Please enter the password for the database system user:[***********] Please retype the password for database system user:[***********] WARNING: The --dbpassword option is deprecated since it is insecure. Using this option can compromise your password. Please use either the command prompt or the --dbpasswordfile option. Please enter the password for the admin system user:[***********] 2007-09-12 14:42:32.552 INFO hadbm clear --fast=false --quiet=false --version=false --yes=false --force=false --echo=false --dbpassword=****** app-cluster1 This command will clear database app-cluster1. Type "yes" or "y" to confirm this operation, anything else to cancel: y 2007-09-12 14:42:38.555 INFO Node app-cluster1:0 is currently starting at config version 3, stopping node in order to stop database 2007-09-12 14:43:19.240 INFO Initializing device /sun/SUNWappserver91/hadb/4.4.3-6/device/app-cluster1.nilog.0 for node app-cluster1:0 2007-09-12 14:43:19.244 INFO Initializing device /sun/SUNWappserver91/hadb/4.4.3-6/device/app-cluster1.relalg.0 for node app-cluster1:0 2007-09-12 14:43:19.247 INFO Initializing device /sun/SUNWappserver91/hadb/4.4.3-6/device/app-cluster1.noman.0 for node app-cluster1:0 2007-09-12 14:43:19.249 INFO Initializing device /sun/SUNWappserver91/hadb/4.4.3-6/device/app-cluster1.data-0.0 for node app-cluster1:0 2007-09-12 14:44:16.059 INFO Starting node app-cluster1:0 at level firststart, config version 5, in order to start database 2007-09-12 14:44:16.255 INFO n:0 NSUP INF 2007-09-12 14:44:16.248 p:685 Legal realtime priorities are 0 (lowest) to 59 (highest) set it to:29 Database app-cluster1 successfully cleared. appserver1 > /sun/SUNWappserver91/hadb/4/bin/hadbm status app-cluster1 Please enter the password for the admin system user: [***********] 2007-09-12 14:46:50.316 INFO hadbm status --nodes=false --quiet=false --version=false --yes=false --force=false --echo=false app-cluster1 Database Status app-cluster1 FaultTolerant appserver1 > |
上記でHADBでバイスのクリーンアップ行った後、HADBの状態が
"FaultTolerant"に変わりました。
そこで、HADBのサービスが上記で使用可能になったのではないかと
思われるかもしれません。
しかし、実際は上記を行っただけではApplication Serverから
HADBに対して接続できません。
理由は、"hadbm clear"を実行するとHADBのデバイスの初期化が
行われるため、Application Serverから接続する為に必要なテーブルや
スキーマ等、全て初期化されてしまうからです。
これを、clusqlコマンドを使用し確認しましょう。
hadbm clear実行直後のHADBのテーブル一覧
|
appserver1 > /sun/SUNWappserver91/hadb/4/bin/clusql localhost:15205 system+adminadmin SQL: select * from sysroot.alltables ;
SQL: quit ; appserver1 > |
HADBが正常に動作している時のテーブル一覧
|
appserver1 > /sun/SUNWappserver91/hadb/4/bin/clusql localhost:15205 system+adminadmin SQL: select * from sysroot.alltables ;
HADB-I-11930: Selected 27 row(s) |
上記2つのテーブル一覧を御確認ください。
確認すると、「hadbm clear実行直後のHADBのテーブル一覧」には
下記の5つのテーブルが存在していない事が確認できます。
● sessionattribute
● singlesignon
● statefulsessionbean
● blobsessions
● sessionheader
また、"hadbm clear HADB_NAME"を実行した直後、Application Serverから
HADBに接続する際に使用するユーザ(admin)でHADBに接続しようとした際、
ユーザが存在していないため、下記のエラーが出力されます。
|
appserver1 > /sun/SUNWappserver91/hadb/4/bin/clusql localhost:15205 admin+adminadmin HADB-E-11601: Invalid user name or password |
asadmin configure-ha-clusterの実行
そこで、HADBデバイスの初期化("hadbm clear")の後で、
HADBのテーブル、スキーマそしてユーザを再度構築する為に、
asadmin configure-ha-clusterコマンドを実行して下さい。
|
appserver1 > asadmin configure-ha-cluster --devicesize 1024 --hosts appserver01,appserver02 --user admin app-cluster1 HADBMGMT008:The database, app-cluster1, already exists Command configure-ha-cluster executed successfully. appserver1 > |
上記、asadmin configure-ha-clusterコマンドを実行すると、
Appplication ServerからHADBのサービスを利用する為に必要な、
DBスキーマ、テーブル、ユーザ等が作成されます。
そこで、Application Serverから接続するユーザ(admin)で接続が可能となります。
clusqlでHADBに接続した後、作成されたテーブルの内容をそれぞれ確認してみましょう。
|
appserver1 > /sun/SUNWappserver91/hadb/4/bin/clusql localhost:15205 admin+adminadmin SQL: SELECT schemaname, tablename, tableid FROM sysroot.alltables ;
HADB-I-11930: Selected 5 row(s) SQL: show table sessionattribute ;
|
備考:
clusqlで接続する際に、(system , admin)というユーザで接続しています。
systemはHADBのシステム管理用に使用するユーザで、adminユーザは
Application Serverから接続する際に使用するユーザ名です。
Application Serverから接続する際に使用するユーザ名、パスワード、
接続するHADBのノード名、ノードのポート番号はApplication Serverの
管理画面よりHADBのコネクションプールの設定情報(下記御参照)より確認
する事もできます。
以上で、HADBの両ノード障害が発生した場合の復旧方法について説明しましたが、如何でしょうか。
実は、私もHADBを触り始めた当初、両ノードの同時リブートを行ってはいけない事を
知らず、やってしまい驚いてしまった事があります。
仮に同様の事をしてしまった場合には、上記を試してください。
そして、それでも駄目な場合は、弊社サポートセンターに御問い合わせください。

