DB2 ARKが提供する監視機能と起動処理、停止処理について説明します。
対象製品
DB2 Recovery Kit (LifeKeeper for Linux)
※本処理概要は LifeKeeper for Linux v9.4.0 に付属するリカバリキットをもとに作成しています。
処理概要
監視処理
LifeKeeperはLKCHECKINTERVAL秒(標準では120秒)間隔でDB2リソースの状態を確認し、異常を検出した場合は復旧処理を実行します。
監視処理は以下のように実行されます。
1)DB2リソースの情報を取得
リソース作成時に登録された以下の情報を、DB2リソースの”Info”フィールドから取得します。
取得する情報:
- DB2インスタンスの 実効ユーザー
- DB2インスタンスのホームディレクトリのパス
- DB2インスタンスのタイプ(Express Edition もしくは Extended Enterprise Edition)
- DB2インスタンスのノード番号
2)DB2インスタンスの状態を確認
インスタンスタイプにより異なる確認を行っています。
Express Editionでは以下のような確認を行います。
- db2gcf -sを実行します(DB2 ver8以降の場合)。
- db2syncプロセスが実行されていることを確認します。 db2gcfがエラーになるか、db2syncプロセスが実行されていない場合は異常が発生していると判断して、回復処理を要求します。
Extended Enterprise Editionでは以下のような確認を行います。
DB2のバージョンにより確認方法が違います。
ver8以降 - 保護しているすべてのノードに対してdb2gcf -sを実行します。
ver7.xまで - db2wdog及びdb2syncプロセスが実行されていることを確認します。
db2gcfがエラーになるか、プロセスが実行されていない場合には異常が発生していると判断して、回復処理を要求します。
起動処理
1)DB2リソースの情報を取得
リソース作成時に登録された以下の情報を、DB2リソースの”Info”フィールドから取得します。
取得する情報:
- DB2インスタンスの 実効ユーザー
- DB2インスタンスのホームディレクトリのパス
- DB2インスタンスのタイプ(Express Edition もしくは Extended Enterprise Edition)
- DB2インスタンスのノード番号
2)インスタンスを起動します。
以下の処理を実行します
1.DB2のバージョンが10未満の場合は、"db2admin start"でAdministration Instanceを起動します。
2.Express Editionの場合は、"db2gcf -u"で起動します。
3.Extend Enterprise Editionの場合は、保護しているノードを"db2gcf -u"で起動します。
4.起動が確認できたら成功を返します。起動を確認できなかった場合には失敗を返します。
停止処理
1)DB2リソースの情報を取得
リソース作成時に登録された以下の情報を、DB2リソースの”Info”フィールドから取得します。
取得する情報:
- DB2インスタンスの 実効ユーザー
- DB2インスタンスのホームディレクトリのパス
- DB2インスタンスのタイプ(Express Edition もしくは Extended Enterprise Edition)
- DB2インスタンスのノード番号
2)インスタンスを停止します。
以下の処理を実行します
1.Express Editionの場合は、"db2gcf -d"で停止します。
2.Extend Enterprise Editionの場合は、保護しているノードを"db2gcf -d"で停止します。
3."db2gcf -d"に失敗した場合は、以下の手順で強制停止を行います。
a.db2stop forceを実行します
b.db2gcf -k / db2gcf -cを実行します。
4.停止を確認できた場合は成功を返します。強制停止でも止まらなかった場合には失敗を返します。
回復処理
1)リカバリー中フラグの有無を確認します。フラグが存在する場合にはすでに回復処理が実行中なので、なにもしません。
2)リカバリー中フラグを作成し、リカバリ処理中とします。
3)DB2インスタンスを起動します。(起動処理と同じ処理を実行します)
4)リカバリー中フラグを削除します。
5)インスタンスの起動に成功した場合は回復成功を返します。起動できなかった場合は失敗を返してフェイルオーバーを要求します。
各処理で使用しているコマンド、関数
DB2 ARKで使用しているLinuxのコマンド、DB2のコマンド、関数について記載します。
これらは、スクリプトにコマンドラインとして記述されていたり、関数として定義されていたりするもので処理概要の参考として示します。
・DB2のバージョン取得:
db2levelコマンドを実行します。
例:su - $Instance -c \"sh -c 'LANG=C db2level \| grep \\"DB2 v\\"' \"
$Instance:DB2 実効ユーザー
・DB2データベースのノードの状態をチェック:
DB2インスタンスのバージョンが8以上のとき
DB2EnhancedCmds($Owner, "status",$node)関数を実行
DB2インスタンスのバージョンが8未満のとき:
DB2EEEInstancePS($Owner, $node)関数を実行
$Owner:DB2インスタンスのオーナー
$node :DB2インスタンスのノード
・DB2のInfoフィールドの情報を取得:
DB2Info(\$Owner, \$Home, \$Type, \@Nodes)関数を実行します。
$Owner:DB2インスタンスのオーナー
$Home :DB2インスタンスのホームディレクトリのパス
$Type :DB2インスタンスのタイプ(EE、EEE、それ以外)
@Nodes:DB2インスタンスのノード番号一覧
・DB2インスタンスの実行状況をチェック:
IsInstanceRunning( )関数を実行します。
・DB2リソース(DB2管理サーバーの起動、および再起動):
db2admin start コマンドを実行します。
例:su - $AdminOwner -c \"sh -c 'LANG=C db2admin start
・DB2リソース(DB2データベースサーバーのノード)の起動、および再起動処理:
StartNode($Owner, $Home, $Version, $node)関数を呼び出し実行します。
$Owner:DB2インスタンスのオーナー
$Home :DB2インスタンスのホームディレクトリのパス
$Virsion:DB2インスタンスのバージョン
$node :DB2インスタンスのノード
・指定したDB2インスタンスのノードを起動:
DB2EnhancedCmds($Owner, "start", $NodeNum)関数を呼び出し実行
$Owner:DB2インスタンスのオーナー
$NodeNum:起動するDB2インスタンスのノード番号
・指定したDB2インスタンスのノードを停止:
DB2EnhancedCmds($Owner, "stop", $NodeNum)関数を呼び出し実行
$Owner:DB2インスタンスのオーナー
$NodeNum:停止するDB2インスタンスのノード番号
改訂履歴
[公開日:2020年1月9日]