Recent Posts

RSS Feeds

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 ;
schemaidtableidschemanametablename
0302sysrootsystbldsc
0303sysrootsystbldef
0304sysrootsystbt
0308sysrootsyslnk
0309sysrootsyshgh
0310sysrootsysacc
0104sysrootkrnprocedures
0105sysrootkrnnodes
0109sysrootkrnnodegroupnodes
0301sysrootsystbl
0305sysrootsystbtatt
0306sysrootsystbtdef
0307sysrootsysusr
0311sysrootsysnix
0312sysrootsysviw
0313sysrootsysviwcol
0101sysrootkrntables
0102sysrootkrnfragments
0103sysrootkrnreplicas
0106sysrootkrnredundancyunits
0107sysrootkrnsites
0108sysrootkrnnodegroups
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 ;
schemaidtableidschemanametablename
0301sysrootsystbl
0305sysrootsystbtatt
0306sysrootsystbtdef
0307sysrootsysusr
0311sysrootsysnix
0312sysrootsysviw
0 313sysrootsysviwcol
0101sysrootkrntables
0102sysrootkrnfragments
0103sysrootkrnreplicasv
0106sysrootkrnredundancyunits
0107sysrootkrnsites
0 108sysrootkrnnodegroups
1007810082haschemasessionattribute
1007810084haschemasinglesignon
1007810085haschemastatefulsessionbean
0302sysrootsystbldsc
0303sysrootsystbldef
0304sysrootsystbt
0308sysrootsyslnk
0309sysrootsyshgh
0310sysrootsysacc
0104sysrootkrnprocedures
0105sysrootkrnnodes
0109sysrootkrnnodegroupnodes
1007810079haschemablobsessions
1007810081haschemasessionheader

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 ;
schemanametablenametableid
haschemasessionattribute10082
haschemasinglesignon10084
haschemastatefulsessionbean10085
haschemablobsessions10079
haschemasessionheader10081

HADB-I-11930: Selected 5 row(s)

SQL: show table sessionattribute ;
table haschema.sessionattribute(
lsn#special not null,
rowidvarchar(200) not null,
sessattrdatablob not clustered,
idvarchar(100) not null,
attributenamevarchar(100),
appidvarchar(100) not null,
checksum#special not null,
primary key(rowid,appid));
SQL: show table singlesignon;
table haschema.singlesignon(
lsn#special not null,
ssoidvarchar(100) not null primary key,
lastaccessdouble integer,
authtypevarchar(100),
usernamevarchar(100),
checksum#special not null);
SQL: show table blobsessions ;
table haschema.blobsessions(
lsn#special not null,
idvarchar(100) not null,
validcharacter(1) not null,
maxinactiveinteger not null,
lastaccessdouble integer,
appidvarchar(100) not null,
sessdatablob not clustered,
usernamevarchar(100),
ssoidvarchar(100),
checksum#special not null,
primarykey(id,appid));
SQL: show table sessionheader ;
table haschema.sessionheader(
lsn#special not null,
idvarchar(100) not null,
validcharacter(1) not null,
maxinactiveinteger not null,
lastaccessdouble integer,
appidvarchar(100) not null,
usernamevarchar(100),
ssoidvarchar(100),
checksum#special not null,
primarykey(id,appid));
SQL: show table statefulsessionbean ;
table haschema.statefulsessionbean(
lsn#special not null,
idvarchar(100) not null primary key,
clusteridvarchar(100),
lastaccessdouble integer,
beandatablob not clustered,
containeridvarchar(100),
checksum#special not null);
SQL: quit ;

備考:

clusqlで接続する際に、(system , admin)というユーザで接続しています。
systemはHADBのシステム管理用に使用するユーザで、adminユーザは
Application Serverから接続する際に使用するユーザ名です。

Application Serverから接続する際に使用するユーザ名、パスワード、
接続するHADBのノード名、ノードのポート番号はApplication Serverの
管理画面よりHADBのコネクションプールの設定情報(下記御参照)より確認
する事もできます。

以上で、HADBの両ノード障害が発生した場合の復旧方法について説明しましたが、
如何でしょうか。

実は、私もHADBを触り始めた当初、両ノードの同時リブートを行ってはいけない事を
知らず、やってしまい驚いてしまった事があります。

仮に同様の事をしてしまった場合には、上記を試してください。
そして、それでも駄目な場合は、弊社サポートセンターに御問い合わせください。

Permalink     No Comments
Track Back :




Post a Comment:
Comments are closed for this entry.