ストアのリカバリ

以前に作成したスナップショットからストアをリカバリするには、次の2つの方法があります。
  1. スナップショットを使用して、Loadユーティリティで任意のトポロジを指定してストアを作成します。

  2. スナップショットの作成時に使用していた正確なトポロジを使用して、スナップショットをリストアします。
この項では、ストアをリカバリする両方の方法について説明します。

注意:

障害が発生したストレージ・ノードなど、トポロジの変更とみなされるハードウェアの問題が原因でリカバリが必要になった場合は、Loadユーティリティを使用してリカバリする必要があります。障害が発生したストレージ・ノードの置換の詳細は、障害が発生したストレージ・ノードの置換を参照してください。

Loadプログラムの使用

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

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

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

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

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

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

管理メタデータをロードするためのプログラムの使用方法は、次のとおりです。

java -Xmx64m -Xms64m \
-jar KVHOME/lib/kvstore.jar load \
-store <storeName> -host <hostname> port <port>  \
-load-admin \
-source <admin-backup-dir> \
[-force] [-username <user>] \
[-security <security-file-path>] 

ストア・データをロードするためのプログラムの使用方法は、次のとおりです。

java -Xmx64m -Xms64m \
-jar KVHOME/lib/kvstore.jar load [-verbose] \
-store <storeName> -host <hostname> \
-port <port> -source <shard-backup-dir> \
[, <shard-backup-dir>]* \
[-checkpoint <checkpoint-files-directory>] \
[-username <user>] [-security <security-file-path>] 

説明:

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

    注意:

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

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

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

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

  • -source <admin-backup-dir> | <shard-backup-dir> [,<shard-backup-dir>]* admin-backup-dirでは、ストアにロードされる管理メタデータの内容を含む管理スナップショット・ディレクトリを指定します。

    Shard-backup-dirでは、スナップショットの作成で説明したスナップショット・コマンドを使用して作成されたスナップショットの内容を表すバックアップ・ディレクトリを指定します。

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

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

たとえば、スナップショットが/var/backups/snapshots/110915-153828-laterに存在し、レジストリ・ポート5000を使用するmystoreという名前の新しいストアがホストhost1に存在する場合、/var/backups/snapshotsディレクトリがあるホストでLoadプログラムを実行します。

java -Xmx64m -Xms64m \ 
-jar KVHOME/lib/kvstore.jar load \ 
-source /var/backups/snapshots/110915-153514-Thursday -store mystore \
-host host1 -port 5000 -security KVROOT/security/client.security

注意:

レコードを新しいストアにロードする前に、ストアがデプロイされていることを確認してください。詳細は、KVStoreの構成を参照してください。

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

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

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

  1. 新規ストア(ターゲット)を作成、開始および構成します。まだストアをアプリケーションからアクセスできるようにしないでください。

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

      java -Xmx64m -Xms64m \
      -jar KVHOME/lib/kvstore.jar makebootconfig \
      -root KVROOT \
      -host NewHost -port 8000 \
      -harange 8010,8020 \
      -capacity 1 
    • セキュリティ・ディレクトリを作成します。

      java -Xmx64m -Xms64m \
      -jar kv/lib/kvstore.jar securityconfig \
      config create 
      -root KVROOT -kspwd password
      Created files
      KVROOT/security/security.xml
      KVROOT/security/store.keys
      KVROOT/security/store.trust
      KVROOT/security/client.trust
      KVROOT/security/client.security
      KVROOT/security/store.passwd (Generated in CE version)
      KVROOT/security/store.wallet/cwallet.sso (Generated in EE version)
      
      Created
    • 新規ストアを開始します。

      注意:

      SNAを開始する前に、各ノードで環境変数MALLOC_ARENA_MAX1に設定します。こうすることで、メモリー使用量が指定されたヒープ・サイズに制限されます。

      java -Xmx64m -Xms64m \
      -jar KVHOME/lib/kvstore.jar start \
      -root KVROOT &
      
    • 新規ストアを構成します。

      
      java -Xmx64m -Xms64m \
      -jar KVHOME/lib/kvstore.jar runadmin \
      -port 8000 -host NewHost \
      -security KVROOT/security/client.security
      kv-> configure -name NewStore
      Store configured: NewStore

    注意:

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

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

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

    java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar load \
    -source \
    /var/kvroot/mystore/sn1/admin1/snapshots/110915-153514-Thursday \
    -store NewStore -host NewHost -port 8000 \
    -load-admin \
    -security KVROOT/security/client.security

    注意:

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

  4. ストアをデプロイします。詳細は、KVStoreの構成を参照してください。

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

    java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar load \
    -source var/backups/snapshots/140827-144141-back -store NewStore \
    -host NewHost -port 8000 \
    -security KVROOT/security/client.security

    注意:

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

    以前のストアがユーザー名とパスワードを使用して構成されている場合、ここでユーザー名とパスワードの入力を求められます。

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

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

スナップショットからストアを直接リストアできます。このメカニズムは、Loadプログラムを使用するよりも高速です。ただし、スナップショットから、スナップショットの作成時に使用されていたものとまったく同じトポロジにのみリストアできます。つまり、ポートおよびホスト名またはIPアドレス(構成による)をすべて、スナップショットの作成時とまったく同じにする必要があります。

スナップショットからリストアするには、次のステップを完了します。

  1. 各ストレージ・ノード(SN)で次のコマンドを実行して、ストアを停止します。

    java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar stop -root $KVROOT  
  2. 各SNが停止したら、ストア内の各SNで次のコマンドを実行してバックアップにリストアします(–update-config trueを使用)。
    > java -jar KVHOME/lib/kvstore.jar start -root /var/kvroot \
    -restore-from-snapshot 170417-104506-mySnapshot -update-config true 
    
  3. バックアップにリストアするが、既存の構成をオーバーライドしない場合は、各SNで次のコマンドを実行します(–update-config falseを使用)。
    > java -jar KVHOME/lib/kvstore.jar start -root /var/kvroot \
    -restore-from-snapshot 170417-104506-mySnapshot -update-config false 
    
    
    
170417–104506–mySnapshot値は、リストアするスナップショットのディレクトリ名を表します。

注意:

この手順では、ストアがスナップショットの作成時点にリカバリされます。スナップショットの作成後にストアがアクティブだった場合、最後のスナップショット以降に行われた変更はすべて失われます。