失われた管理サービス・クォーラムへの対処

1つ以上の管理サービス・インスタンスの障害の結果としてクォーラムが失われた場合、ストアを管理することはできませんが、キー/値のペアの読取りおよび書込みには引き続き使用できます。管理サービスでは管理データの高可用性のためにクォーラム・ベースのレプリケーションを使用するため、デプロイされる管理の数は、クォーラムが失われないように十分に多くする必要があります。通常は、3などの奇数を使用します。

通常、ストレージ・ノード・エージェント(SNA)は障害が発生した管理サービスを自動的に再起動し、クォーラムとストアを管理する機能を維持します。ただし、SN (特にSNA)に障害が発生した場合、管理サービスは使用不可のままになります。

その場合、次の手順を実行すると、残りの管理サービスを管理タスクの実行に使用できるようにストアを再構成できます。

次の例では、次のすべてのものを前提とします。

失われた管理サービス・クォーラムに対処するには、次の手順を実行します。

  1. 管理サービス・クォーラムが失われたことを確認します。クォーラムを必要とするコマンドがCLIで実行される場合、クォーラムが失われるとタイムアウトが発生します。次に例を示します。

    kv-> pool create -name new-pool
    Transaction retry limit exceeded (12.1.2.2.0) 
  2. show adminsコマンドを使用して、デプロイされた管理サービスの名前を特定します。

    kv-> show admins
    admin1: Storage Node sn1, HTTP port 13231 (master)
    admin2: Storage Node sn2, HTTP port 13231 
  3. 残りの正常な管理サービスを識別すると、そのサービスに対してクォーラムを再構成できます。sn1にログインして次のコマンドを実行します。

    > jps -m | grep Admin
    12276 ManagedService -root /opt/ondb/var/kvroot -class Admin -service 
    BootstrapAdmin.13230 -config config1.xml 

    これは、ストアにデプロイされた最初の管理サービス(ブートストラップ管理)のみが引き続き正常であり、host-sn1で実行されていることを意味します。

    注意

    特定の管理サービスが停止している場合、ストレージ・ノード自体が停止してアクセスできないか、または前述のコマンドは関連する管理サービスの出力を生成しません。この場合、admin2が停止しているため、出力で省略されます。

  4. 正常な管理サービスが識別された後、管理コンポーネントのje.rep.electableGroupSizeOverride構成プロパティが残りの正常な管理サービスの数と等しくなるように、対応する各SNの構成ファイルを変更する必要があります。この例では、sn1に対応する構成ファイル(config.xml)を変更する必要があります。ファイルの構造は次のとおりです。

    <config version="1">
      <component name="storageNodeParams" 
                              type="storageNodeParams" validate="true">
        <property name="storageNodeId" value="1" type="INT"/>
        <property name="rootDirPath" 
                              value="/opt/ondb/var/kvroot" type="STRING"/>
        <property name="haHostname" value="host-sn1" type="STRING"/>
        <property name="registryPort" value="13230" type="INT"/>
        ..........
      </component>
      <component name="mountPoints" type="bootstrapParams"
                                                       validate="false">
        <property name="/disk1/ondb/data" value="" type="STRING">
      </component>
      <component name="globalParams" type="globalParams" validate="true">
        <property name="storeName" value="example-store" type="STRING">
        <property name="isLoopback" value="false" type="BOOLEAN">
      </component>
      <component name="admin1" type="adminParams" validate="true">
        <property name="adminHttpPort" value="13231" type="INT">
        <property name="storageNodeId" value="1" type="INT"/>
        ..........
      </component>
      <component name="rg1-rn1" type="repNodeParams" validate="true">
        <property name="repNodeId" value="rg1-rn1" type="STRING"/>
        <property name="repNodeType" value="ELECTABLE" type="STRING">
        <property name="storageNodeId" value="1" type="INT"/>
        ..........
      </component> 

    admin1という名前のコンポーネントで、configPropertiesという名前のプロパティを追加(または変更)し、値を1に設定します。次に例を示します。

    <component name="admin1" type="adminParams" validate="true">
    <property name="configProperties" 
    value="je.rep.electableGroupSizeOverride 1;" type="STRING">
    .......... 
    </component> 
  5. 構成ファイルが変更された正常な各管理サービス・プロセスを強制終了します。host-sn1の正常な管理サービス(admin1)を停止するには、次のコマンドを実行します。

    > kill 11762

    11762は、手順2で識別した正常な単一の管理サービスのプロセスIDです。

    注意

    SNAは、強制終了された管理サービスを自動的に再起動します。その後、この例ではクォーラム・サイズが2ではなく1で動作するように管理サービスが構成されます。

  6. 単一の正常な管理サービス(admin1)を使用して、ストアで必要な障害リカバリ管理タスクを実行します。

  7. 障害が発生した管理サービス(admin2)のリカバリが完了したら、手順4と5を繰り返して、クォーラムの元の概念に管理サービスを再構成します。この例では、je.rep.electableGroupSizeOverrideを2に設定する必要があります。