HADBの両ノード障害発生時の復旧方法

2007年9月12日 at 6:49 午前




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を触り始めた当初、両ノードの同時リブートを行ってはいけない事を

知らず、やってしまい驚いてしまった事があります。


仮に同様の事をしてしまった場合には、上記を試してください。

そして、それでも駄目な場合は、弊社サポートセンターに御問い合わせください。

Entry filed under: Application Server/GlassFish.

HADBノードの再起動と状態確認方法 SJS Application Server 9.1 Release in US


Java Champion & Evangelist

Translate

ご注意

このエントリは個人の見解であり、所属する会社の公式見解ではありません

カレンダー

2007年9月
 12
3456789
10111213141516
17181920212223
24252627282930

カテゴリー

Twitter

clustermap

ブログ統計情報

  • 1,263,765 hits

RSSフィード

アーカイブ


%d人のブロガーが「いいね」をつけました。