droonga-engine-catalog-generateは、Droonga Engineノード用の新しいcatalog.jsonファイルを生成します。
多くの場合において、このコマンドを使う必要はまずありません。代わりに、Engineノードの初期化にはdroonga-engine-configureコマンドを使い、クラスタ構成の変更にはdroonga-engine-joinやdroonga-engine-unjoinのような管理コマンドを使って下さい。
このコマンドは、新しいcatalog.jsonをゼロから生成する事に特化して設計されています。
replicaノードのリストだけを変更したい場合には、droonga-engine-catalog-modifyコマンドの方が便利です。
最も一般的な使い方は、droonga-engine-joinコマンドによって管理される新しいレプリカノードとして、孤立したEngineノード用のcatalog.jsonを生成する場面です。例えば、まだ準備されていないノードである192.168.100.50にログインしている場合のコマンド列は以下の通りです:
(on 192.168.100.50)
# droonga-engine-catalog-generate --hosts 192.168.100.50
省略されたオプションを含めた完全な指定はこのようになります:
(on 192.168.100.50)
# droonga-engine-catalog-generate \
    --output  /home/droonga-engine/droonga/catalog.json \
    --dataset Default             \
      --n-workers 4               \
      --hosts     192.168.100.50  \
      --port      10031           \
      --tag       droonga         \
      --n-slices  1               \
      --plugins   groonga,search,crud,dump,system,catalog
--n-workers、--hosts、--port、--tag、--n-slicesおよび--pluginsの各オプションは、最も近くに書かれた先行する--datasetオプションに紐付けられています。
ユーザが指定した--datasetオプションよりも前に書かれたこれらのオプションの指定は、自動的に既定のデータセット名Defaultに対して紐付けられます。
生成されたcatalog.jsonの例は以下の通りです:
{
  "version": 2,
  "effectiveDate": "2015-05-08T09:02:12+00:00",
  "datasets": {
    "Default": {
      "nWorkers": 4,
      "plugins": ["groonga", "search", "crud", "dump", "system", "catalog"],
      "schema": {},
      "replicas": [
        {
          "dimension": "_key",
          "slicer": "hash",
          "slices": [
            { "weight": 100,
              "volume": { "address": "192.168.100.50:10031/droonga.000" } }
          ]
        }
      ]
    }
  }
}
複数のreplicaノードを持つデータセットを定義するには、replicaノードとして使われる全てのノードのホスト名を,(カンマ)で区切って--hostオプションに指定します:
(on 192.168.100.50)
# droonga-engine-catalog-generate \
    --hosts 192.168.100.50,192.168.100.51
省略されたオプションを含めた完全な指定はこのようになります:
(on 192.168.100.50)
# droonga-engine-catalog-generate \
    --output  /home/droonga-engine/droonga/catalog.json \
    --dataset Default             \
      --n-workers 4               \
      --hosts     192.168.100.50,192.168.100.51 \
      --port      10031           \
      --tag       droonga         \
      --n-slices  1               \
      --plugins   groonga,search,crud,dump,system,catalog
生成されたcatalog.jsonの例は以下の通りです:
{
  "version": 2,
  "effectiveDate": "2015-05-08T09:02:12+00:00",
  "datasets": {
    "Default": {
      "nWorkers": 4,
      "plugins": ["groonga", "search", "crud", "dump", "system", "catalog"],
      "schema": {},
      "replicas": [
        {
          "dimension": "_key",
          "slicer": "hash",
          "slices": [
            { "weight": 100,
              "volume": { "address": "192.168.100.50:10031/droonga.000" } }
          ]
        },
        {
          "dimension": "_key",
          "slicer": "hash",
          "slices": [
            { "weight": 100,
              "volume": { "address": "192.168.100.51:10031/droonga.000" } }
          ]
        }
      ]
    }
  }
}
sliceに分割されたreplicaを持つデータセットを定義するためには、--n-slicesオプションをそのデータセットに対して指定する必要があります:
(on 192.168.100.50)
# droonga-engine-catalog-generate \
    --hosts    192.168.100.50,192.168.100.51 \
    --n-slices 2
省略されたオプションを含めた完全な指定はこのようになります:
(on 192.168.100.50)
# droonga-engine-catalog-generate \
    --output  /home/droonga-engine/droonga/catalog.json \
    --dataset Default             \
      --n-workers 4               \
      --hosts     192.168.100.50,192.168.100.51 \
      --port      10031           \
      --tag       droonga         \
      --n-slices  2               \
      --plugins   groonga,search,crud,dump,system,catalog
生成されたcatalog.jsonの例は以下の通りです:
{
  "version": 2,
  "effectiveDate": "2015-05-08T09:02:12+00:00",
  "datasets": {
    "Default": {
      "nWorkers": 4,
      "plugins": ["groonga", "search", "crud", "dump", "system", "catalog"],
      "schema": {},
      "replicas": [
        {
          "dimension": "_key",
          "slicer": "hash",
          "slices": [
            { "weight": 50,
              "volume": { "address": "192.168.100.50:10031/droonga.000" } },
            { "weight": 50,
              "volume": { "address": "192.168.100.50:10031/droonga.001" } }
          ]
        },
        {
          "dimension": "_key",
          "slicer": "hash",
          "slices": [
            { "weight": 50,
              "volume": { "address": "192.168.100.51:10031/droonga.000" } },
            { "weight": 50,
              "volume": { "address": "192.168.100.51:10031/droonga.001" } }
          ]
        }
      ]
    }
  }
}
2またはそれより大きな数を--n-slicesオプションで指定すると、複数のsliceが各replicaノード自身の上に生成されます。
有効なslice分けのためには1つのsliceごとに1ノードを割り当てるべきですが、現在のところこのコマンドはそのようなパターンに対応していません。
また、slice配下のreplicaの定義にもまだ対応できていません。
これらの制限事項は将来のバージョンで解消される予定です。
クラスタ内に複数のデータセットを定義するには、--datasetオプションを使う必要があります:
(on 192.168.100.50)
# droonga-engine-catalog-generate \
    --hosts   192.168.100.50,192.168.100.51 \
    --port    20031 \
    --dataset Testing \
    --hosts   192.168.100.60,192.168.100.61 \
    --port    20032
省略されたオプションを含めた完全な指定はこのようになります:
(on 192.168.100.50)
# droonga-engine-catalog-generate \
    --output  /home/droonga-engine/droonga/catalog.json \
    --dataset Default             \
      --n-workers 4               \
      --hosts     192.168.100.50,192.168.100.51 \
      --port      20031           \
      --tag       droonga         \
      --n-slices  1               \
      --plugins   groonga,search,crud,dump,system,catalog \
    --dataset Testing             \
      --n-workers 4               \
      --hosts     192.168.100.60,192.168.100.61 \
      --port      20032           \
      --tag       droonga         \
      --n-slices  1               \
      --plugins   groonga,search,crud,dump,system,catalog
上記の例の通り、データセットに紐付けられたオプションはそれに先行する最も近くに書かれた--datasetオプションで定義されるデータセットに対して影響を及ぼします。
生成されたcatalog.jsonの例は以下の通りです:
{
  "version": 2,
  "effectiveDate": "2015-05-08T09:02:12+00:00",
  "datasets": {
    "Default": {
      "nWorkers": 4,
      "plugins": ["groonga", "search", "crud", "dump", "system", "catalog"],
      "schema": {},
      "replicas": [
        {
          "dimension": "_key",
          "slicer": "hash",
          "slices": [
            { "weight": 100,
              "volume": { "address": "192.168.100.50:20031/droonga.000" } }
          ]
        },
        {
          "dimension": "_key",
          "slicer": "hash",
          "slices": [
            { "weight": 100,
              "volume": { "address": "192.168.100.51:20031/droonga.000" } }
          ]
        }
      ]
    },
    "Testing": {
      "nWorkers": 4,
      "plugins": ["groonga", "search", "crud", "dump", "system", "catalog"],
      "schema": {},
      "replicas": [
        {
          "dimension": "_key",
          "slicer": "hash",
          "slices": [
            { "weight": 100,
              "volume": { "address": "192.168.100.60:20032/droonga.000" } }
          ]
        },
        {
          "dimension": "_key",
          "slicer": "hash",
          "slices": [
            { "weight": 100,
              "volume": { "address": "192.168.100.61:20032/droonga.000" } }
          ]
        }
      ]
    }
  }
}
--output=PATHcatalog.jsonの保存先パス。
-を指定した場合は標準出力に対して出力します。
指定されたパスの位置にある既存のファイルは、確認無しに上書きされます。
既定値は、そのコンピュータ上に設定されるdroonga-engineサービスのcatalog.jsonの位置(/home/droonga-engine/droonga/catalog.json)です。--dataset=NAMEDefaultです。--n-workers=N--datasetオプションで定義されたデータセットにおいて、個々のvolumeに対して用意するworkerの数。
既定値は4です。--hosts=NAME1,NAME2,...--datasetオプションで定義されたデータセットにおいて、replicaとして使う1つ以上のEngineノードのホスト名。
既定値は、コマンドを実行しているコンピュータ自身の推測されたホスト名です。--port=PORT--datasetオプションで定義されたデータセットにおいて、Engineノードとの通信に使うポート番号。
既定値は10031です。--tag=TAG--datasetオプションで定義されたデータセットにおいて、Engineノードとの通信に使うタグ名。
既定値はdroongaです。--n-slices=N--datasetオプションで定義されたデータセットにおいて、各レプリカに用意するsliceの数。
既定値は1です。--plugins=PLUGIN1,PLUGIN2,...--datasetオプションで定義されたデータセットにおいて、有効化するプラグインの名前。
既定値はgroonga,search,crud,dump,system,catalog(組み込みのプラグイン全ての一覧)です。--schema=PATH--datasetオプションで定義されたデータセット向けのスキーマ定義を含んだJSONファイルのパス。--fact=TABLE--datasetオプションで定義されたデータセットにおいて、fact表として扱うtableの名前。--replicas=PATH--datasetオプションで定義されたデータセット向けのreplica群の定義を含んだJSONファイルのパス。
このオプションが指定された場合、データセット内にreplica群を定義するための他のオプション(--hosts、--port、--tag、および--n-slices)は全て無視されます。このコマンドは、Rubygemsのパッケージdroonga-engineの一部としてインストールされます。
# gem install droonga-engine