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 ;
HADB-I-11930: Selected 22 row(s) 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 ;
SQL: show table singlesignon;
SQL: show table blobsessions ;
SQL: show table sessionheader ;
SQL: show table statefulsessionbean ;
SQL: quit ; |
備考:
clusqlで接続する際に、(system , admin)というユーザで接続しています。
systemはHADBのシステム管理用に使用するユーザで、adminユーザは
Application Serverから接続する際に使用するユーザ名です。
Application Serverから接続する際に使用するユーザ名、パスワード、
接続するHADBのノード名、ノードのポート番号はApplication Serverの
管理画面よりHADBのコネクションプールの設定情報(下記御参照)より確認
する事もできます。

以上で、HADBの両ノード障害が発生した場合の復旧方法について説明しましたが、
如何でしょうか。
実は、私もHADBを触り始めた当初、両ノードの同時リブートを行ってはいけない事を
知らず、やってしまい驚いてしまった事があります。
仮に同様の事をしてしまった場合には、上記を試してください。
そして、それでも駄目な場合は、弊社サポートセンターに御問い合わせください。
Entry filed under: Application Server/GlassFish.