ストアのリカバリ

Loadプログラムの使用
スナップショットからの直接リストア

以前に作成したスナップショットからストアをリカバリする方法は2つあります。1つ目の方法は、バックアップを使用して必要なトポロジでストアを作成する方法です。2つ目の方法では、スナップショットの作成時に使用されていたのと完全に同じトポロジを使用してストアをリストアする必要があります。

注意

障害が発生したストレージ・ノードを置換する必要がある場合、トポロジの変更とみなされます。その場合、Loadプログラムを使用してストアをリストアする必要があります。

障害が発生したストレージ・ノードの置換方法の詳細は、「障害が発生したストレージ・ノードの置換」を参照してください。

Loadプログラムの使用

oracle.kv.util.Loadプログラムを使用して、以前に作成したスナップショットからストアをリストアできます。このプログラムは直接実行することも、この項の例で示すようにkvstore.jarを使用してアクセスすることもできます。

このツールを使用すると、スナップショットの作成時に使用されていたトポロジのみでなく、任意のトポロジにストアをリストアできます。

このメカニズムは、スナップショット内のすべてのレコードを反復し、スナップショットの処理の進行に伴って各レコードをターゲット・ストアに格納することで機能します。これは、新規の空のストアにリストアする場合にのみ使用します。存在しない場合にのみレコードが書き込まれるため、既存のストアにこれを使用しないでください。

ストアをリカバリするには、ストア内のシャードごとに取得されたスナップショット・データから、レコードをロードする必要があることに注意してください。最善の結果を得るには、スナップショットの作成時にマスターとして稼働していたレプリケーション・ノードから取得されたスナップショット・データを使用してレコードをロードします。(ストアに3つのシャードがある場合、任意の時点で3つのマスターが存在するため、3セットのスナップショット・データからデータをロードする必要があります。)マスターを特定するには、スナップショットの作成時にpingを使用します。

同一時点において作成されたスナップショット・データを使用します。たとえば、月曜日に作成されたシャード1のスナップショット・データと水曜日に作成されたシャード2のスナップショット・データを使用しないでください。このようにすると、ストアが一貫性のない状態でリストアされます。

このメカニズムの速度は、新規ストアの挿入と同程度です。ストアには複数のシャードがあることが多いため、各シャードから取得されたデータからストアをリストアします。これを行うには、Loadプログラムを並行して(各インスタンスが異なるレプリケーション・ノードから取得されたデータを操作)実行します。

プログラムの使用方法は次のとおりです。

java -Xmx256m -Xms256m \
-jar KVHOME/lib/kvstore.jar load [-verbose]
-source <backupDir> -host <hostname> -port <port>
-store <storeName> -username <user> -security <security-file-path>
[-load-admin] [-force] [-status <pathToFile>] 

説明:

  • -load-adminは、ストア・メタデータをスナップショットから新規ストアにロードします。この場合、-sourceディレクトリは、スナップショットから管理ノードの環境ディレクトリを指す必要があります。この操作のとき、ユーザーがストアを使用できないようにする必要があります。

    注意

    ストアを最初からリストアしている場合を除き、このオプションはストアで使用しないでください。-force-load-adminと組み合せて指定した場合、ストア内の既存のメタデータは、表およびセキュリティ・メタデータを含めて上書きされます。詳細は、プログラムおよびメタデータのロードを参照してください。

  • -host <hostname>は、ストア内のノードのホスト名を識別します。

  • -port <port>は、ストアのノードで使用されているレジストリ・ポートを識別します。

  • -status <pathToFile>は、ロード操作のステータスをローカル・マシンの名前付きの場所に保存するオプション・パラメータです。

  • -security <security-file-path>は、ログインのプロパティの指定に使用されるセキュリティ・ファイルを識別します。

  • -source <backupDir>は、スナップショット・データが格納されているディスク上の場所を識別します。

  • -store <storeName>は、ストアの名前を識別します。

  • -username <user>は、保護されているストアにログインするためのユーザー名を識別します。

たとえば、/var/backups/snapshots/110915-153828-laterにスナップショットがあり、ホスト"NewHost"にレジストリ・ポート12345を使用する"NewStore"という名前の新規ストアがあるとします。/var/backups/snapshotsディレクトリを持つホストでLoadプログラムを実行します。

java -Xmx256m -Xms256m \
-jar KVHOME/lib/kvstore.jar load \
-source /var/backups/snapshots/110915-153828-later -store NewStore \
-host NewHost -port 12345

注意

ロードがリストアの途中で失敗した場合、ステータス・ファイルを使用することで中止された場所から開始できます。ステータス・ファイルの精度は、このNoSQL DBリリースではパーティション単位です。ステータス・ファイルを使用していないときに障害が発生した場合、ロードを最初からやり直す必要があります。この場合、ターゲット・ストアを再作成する必要はありません。既存のレコードはスキップされます。

プログラムおよびメタデータのロード

ロード・プログラムを使用して、以前に作成したスナップショットからメタデータ(表、セキュリティ)付きのストアをリストアできます。

次の手順では、メタデータ付きのスナップショットから新規に作成したストアにロードする方法を説明します。

  1. 新規ストア(ターゲット)を作成、開始および構成します。ターゲット・ストアに最終的にセキュリティ情報が入るとしても、まだセキュリティは構成しないでください。また、まだストアをアプリケーションからアクセスできるようにしないでください。

    新規ストアを作成します。

    java -Xmx256m -Xms256m \
    -jar KVHOME/lib/kvstore.jar makebootconfig \
    -root KVROOT \
    -host NewHost -port 8000 -admin 8001 \
    -harange 8010,8020 \
    -capacity 1 \
    -store-security none 

    新規ストアを開始します。

    java -Xmx256m -Xms256m \
    -jar KVHOME/lib/kvstore.jar start \
    -root KVROOT&
    

    新規ストアを構成します。

    java -Xmx256m -Xms256m \
    -jar KVHOME/lib/kvstore.jar runadmin \
    -port 8000 -host NewHost
    kv-> configure -name NewStore 
    Store configured: NewStore 

    注意

    セキュリティ・メタデータのロードでは、ソース・ストアとターゲット・ストアの名前が同じであることが要求され、異なる場合は、後でメタデータが使用できなくなります。

  2. ソース・ストアのスナップショット・ディレクトリを検索します。管理ノードに1つと各シャードに1つずつあります。たとえば、3x3ストアでは4つのスナップショット・ディレクトリがロードに使用されます。ロード・プログラムでは、ロードされた各スナップショット・ディレクトリに対して直接のファイル・ベース・アクセスが必要です。

    この場合、スナップショット・ソース・ディレクトリはdatacenter1/kvroot/newstore/sn1/admin1/envにあります。

  3. -load-adminオプションを使用してストア・メタデータをロードします。ホスト、ポートおよびストアはターゲット・ストアを指します。この場合、-sourceディレクトリは、スナップショットから管理ノードの環境ディレクトリを指す必要があります。

    java -Xmx256m -Xms256m \
    -jar KVHOME/lib/kvstore.jar load \
    -source datacenter1/kvroot/newstore/sn1/admin1/env/ \
    -store NewStore -host NewHost -port 8000 -load-admin

    注意

    このコマンドは、何か問題が起きた場合には、ストアがアプリケーションにアクセスできるようになるまで複数回実行できます。

  4. トポロジがデプロイされたら、各シャードにシャード・データをロードしてください。これを行うには、Loadプログラムを並行して(各インスタンスが異なるレプリケーション・ノードから取得されたデータを操作)実行します。たとえば、var/backups/snapshots/140827-144141-backにOldStoreのスナップショットがあるとします。

    java -Xmx256m -Xms256m \
    -jar KVHOME/lib/kvstore.jar load \
    -source var/backups/snapshots/140827-144141-back -store NewStore \
    -host NewHost -port 8000

    注意

    この手順は時間がかかる可能性があり、再起動が必要な可能性もあります。再試行の時間を大幅に短縮するために、ステータス・ファイルを使用することをお薦めします。

  5. ストアを保護するには、セキュリティを構成します。Oracle NoSQL Databaseを安全に構成するための詳細は、『Oracle NoSQL Databaseセキュリティ・ガイド』を参照してください。

  6. これで、ストアがアプリケーションで使用できるようになりました。

スナップショットからの直接リストア

スナップショットからストアを直接リストアできます。この方法は、前述の項で説明したLoadプログラムを使用する方法より高速ですが、スナップショットの作成時に使用されていたのと完全に同じトポロジにリストアする場合にのみ使用できます。つまり、すべてのポートおよびホスト名またはIPアドレス(構成による)は、スナップショットの作成時と完全に同じにする必要があります。

ストア内のストレージ・ノードごと、かつ各ストレージ・ノードで実行されているサービスごとにこの手順を実行する必要があります。

  1. スナップショット・データに対応するサービスのリカバリ・ディレクトリに、リカバリ予定のスナップショット・データを配置します。たとえば、ストアmystoreのストレージ・ノードsn1、サービスrg1-rn1をリカバリする場合、そのサービスが実行されているノードにログインし、次のようにします。

    > mkdir KVROOT/mystore/sn1/rg1-sn1/recovery
    > mv /var/kvroot/mystore/sn1/rg1-rn1/snapshots/110915-153828-later \
    KVROOT/mystore/sn1/rg1-sn1/recovery/110915-153828-later 

    ストレージ・ノードで実行されている各サービスに対してこれを実行します。本番システムでは、特定のストレージ・ノードで実行されるリソースは1つのみですが、たとえば、1つのストレージ・ノードに複数のレプリケーション・ノードをデプロイできます。ストレージ・ノードでは、管理プロセスが実行されていることもあり、これもリストアする必要があります。

  2. これを行ったら。ストレージ・ノードを再起動します。

    java -Xmx256m -Xms256m \
    -jar KVHOME/lib/kvstore.jar stop -root /var/kvroot \
    > nohup java -Xmx256m -Xms256m \
    -jar KVHOME/lib/kvstore.jar start -root /var/kvroot& 

起動時、ストレージ・ノードでリカバリ・ディレクトリが認識され、そのディレクトリがリソースの環境のディレクトリに移動されて使用されます。

注意

この手順で、ストアがスナップショットの時点にリカバリされることに注意してください。ストアがスナップショットの時点以降アクティブだった場合、直前のスナップショットの時点以降に行われたデータの変更はすべて失われます。