負荷のバランスをとるためのシャードのシャッフリング

いくつかのシャード・シャッフリング・ストラテジでは、負荷のバランスをとり、非ローカル・ノードから転送されるデータを最小限に抑えることができます。

DSE Searchは、シャッフリング手法を使用して負荷のバランスをとり、クエリー対象のシャードの数と非ローカル・ノードから転送されるデータの量を最小限に抑えようとします。

分散環境で負荷のバランスをとるには、シャードをシャッフリングするいくつかのストラテジから選択します。シャード・シャッフリング・ストラテジは、検索データの読み取りにどのノードを優先するかを決定する方法を指定します。shard.shuffling.strategyパラメーターの値は、以下のいずれかでなければなりません。

shard.shuffling.strategyに指定できる値:

  • host

    シャードが、クエリーを受け取ったホストに基づいて選ばれます。

  • query

    シャードが、クエリー文字列に基づいて選ばれます。

  • host_query

    シャードが、ホストxクエリーに基づいて選ばれます。

  • random

    ランダムなシャードの組み合わせが、各要求に従って選ばれます(デフォルト)。

  • SEED

    クエリー間で同じシャードが選ばれます。

シャード・シャッフリング・ストラテジの選択方法

  • shard.shuffling.strategy = strategyをHTTP APIクエリーに追加書き込みします。例を次に示します。
    http://localhost:8983/solr/wiki.solr/select?q=title:natio*&shard.shuffling.strategy=host
    このクエリーを発行すると、このクエリーだけのシャード・シャッフリング・ストラテジが決められます。
  • dse-search.propertiesファイルを作成し、Solrに送信します。例を次に示します。
    1. 以下の内容のdse-search.propertiesファイルを作成します。
      shard.shuffling.strategy=query
    2. コマンドをDSE Searchに送信します。例を次に示します。
      curl -v --data-binary @dse-search.properties
          http://localhost:8983/solr/resource/wiki.solr/dse-search.properties
      コマンドを送信すると、指定されたSolrコアに対するすべてのクエリーのシャード・シャッフリング・ストラテジが決定されます。このストラテジは、すべてのノードに伝搬され、検索インデック・メタデータに保存されます。
  • SEEDストラテジを使用するために、以下のパラメーターを設定します。

    1. 要求パラメーターとしてshard.shuffling.strategy=SEEDを渡します。
    2. shard.shuffling.seedパラメーターを使用して、要求パラメーター(IPアドレスや文字列など)を指定します。1つの安定クラスターで複数のクエリー間で同じシード値を再使用する場合、同じシャード・ストラテジが有効になります。

      同じ文字列を渡すたびに、実際のクエリー対象ノードとは無関係に、同じシャード・リストに対してクエリーが実行されます。文字列を変更すると、別のシャード・リストに対してクエリーが実行されます。

    3. shards.info=true requestパラメーターを渡して、ストラテジが維持されたことを確認します。例を次に示します。
      curl "http://localhost:8983/solr/demo.solr/select/?q=text:search&shards.info=true&shard.shuffling.strategy=SEED&shard.shuffling.seed=192.168.0.1&rows=0"

シャッフリングを行っても、ノードが予想どおりに選択されるとは限りません。たとえば、6個のノードでレプリケーション係数3を使用する場合、データの半分が元のノードから読み取られ、残りの半分が別のノードから読み取られる2シャード・ソリューションが最適なソリューションであり、他にソリューションはありません。3シャード・ソリューションは非効率的になる場合があります。