集合(Collection)とコア(Core)の作成
集合の作成
SolrCloudでは、 REST API を通じて集合を作成します。以下のURLをブラウザまたはcurlコマンドで実行可能です:
curl 'http://localhost:8983/solr/admin/collections?action=CREATE&name=products&numShards=4&replicationFactor=2'
このコマンドは「products」という名前の集合を、4つのシャードと各シャードにつき2つのレプリカで構成するよう指示します。各レプリカの配置は SolrCloud が自動的に分散選択します。
コアの明示的作成
より細かな制御が必要な場合は、/admin/cores エンドポイントを通じて各レプリカ(コア)を個別に作成します:
curl 'http://localhost:8983/solr/admin/cores?action=CREATE&name=products_s0_r1&instanceDir=products_s0_r1&dataDir=/var/solr/data/products_s0_r1&collection=products&shard=shard1'
curl 'http://localhost:8983/solr/admin/cores?action=CREATE&name=products_s0_r2&instanceDir=products_s0_r2&dataDir=/var/solr/data/products_s0_r2&collection=products&shard=shard1'
これにより、論理的なシャード名とレプリカ識別子を制御し、物理的な配置パスを明示的に指定できます。
主な作成オプション
| パラメータ | 説明 |
|---|---|
name |
作成する集合の名前 |
numShards |
集合内に構成するシャード数 |
replicationFactor |
各シャードに作成するレプリカ数(リーダー含む) |
collection.configName |
集合に紐づける設定ファイル名(指定なしの場合、nameと同一とみなされる) |
createNodeSet |
レプリカを配置する対象ノードの明示的指定(カンマ区切りの <host>:<port>_<core> 形式) |
maxShardsPerNode |
1ノードあたりに作成可能なシャード数上限(デフォルト:1) |
注意:
maxShardsPerNode × 活性ノード数 < numShards × replicationFactorの場合、集合作成は失敗します。また、同一シャードの複数レプリカが同一ノード上に配置されるのを防ぐため、 SolrCloud は自動的に分散配置を行います。
削除とアンロード
集合の削除 集合全体を論理および物理的に削除します:
curl 'http://localhost:8983/solr/admin/collections?action=DELETE&name=products'
これは集合のメタデータ、すべてのシャード/レプリカのディレクトリを含めて完全削除します。
コアのアンロード コアのロード状態のみを解除(インデックス データは保持)します:
curl 'http://localhost:8983/solr/admin/cores?action=UNLOAD&core=products_s0_r1&deleteIndex=false'
deleteIndex=true を指定した場合のみ、インデックス ディレクトリが削除されます。
シャードの削除
シャード単体の削除は、DELETESHARD を利用します。通常、シャード分割(SPLITSHARD)後に古いシャードを削除する場合に用いられます:
curl 'http://localhost:8983/solr/admin/collections?action=DELETESHARD&collection=products&shard=shard1'
この操作では、関連する core.properties ファイルが core.properties.unloaded にリネームされ、インデックス ディレクトリのみ削除されます。
集合・コアの再読み込みとロード
集合の再読み込み(RELOAD) 既存の集合に対し、ZooKeeper から最新の設定を適用します:
curl 'http://localhost:8983/solr/admin/collections?action=RELOAD&name=products'
コアのロード(LOAD)
UNLOAD で消えたコアを再びメモリに読み込みます(前提として instanceDir 内に必要なファイルが残っていること):
curl 'http://localhost:8983/solr/admin/cores?action=LOAD&core=products_s0_r1'
クラスタステータス確認
ZooKeeper 上のクラスタ状態確認
/zookeeper?wt=json エンドポイントを使用し、実際の clusterstate.json を取得できます:
curl 'http://localhost:8983/solr/zookeeper?wt=json&path=/clusterstate.json'
集合リスト & クラスタ全体の状態
# 全集合名一覧
curl 'http://localhost:8983/solr/admin/collections?action=LIST'
# 集合、シャード、レプリカの詳細ステータス
curl 'http://localhost:8983/solr/admin/collections?action=CLUSTERSTATUS'
レプリカの動的追加とシャード分割
レプリカ追加 特定シャードに追加のレプリカを割り当てます:
curl 'http://localhost:8983/solr/admin/collections?action=ADDREPLICA&collection=products&shard=shard2&node=solr-node3:8983_solr&type=nrt'
nodeを省略した場合、 SolrCloud は自動的に负载分散に基づきノードを選択します。typeパラメータでレプリカの同期方式を指定できます:nrt: 近REALタイム(トランザクションログベース、書き込み可能)tlog: トランザクションログを保持するが、更新はコピーで反映pull: リーダー候補に上がらず、コピーされたインデックスを参照のみ
シャードの分割(SPLITSHARD)
Routing の範囲に基づき、シャードを2分割します。分割には plain または compositeId ルーティング方式が前提です:
curl 'http://localhost:8983/solr/admin/collections?action=SPLITSHARD&collection=products&shard=shard3'
- 分割後、シャード名は
shard3_0,shard3_1に変更され、元のshard3は非活性になります。 - レンジョー領域に応じたドキュメントの再配置が行われ、停止時間なく即座にスループットの移行が可能です。
- 分割完了後は、
DELETESHARDで旧シャードを論理削除する必要があります。
補足:再配置(スケールアウト)の対象は「分割後に新しいハッシュ範囲に属する新規ドキュメント」のみで、分割時点で既存のインデックスはコピーとして維持されます。
集合エイリアス操作
エイリアスの作成/更新 複数の物理集合を1つの仮想的な集合として参照させるために利用します:
curl 'http://localhost:8983/solr/admin/collections?action=CREATEALIAS&name=products_all&collections=products_archived,products_current'
エイリアスの削除
curl 'http://localhost:8983/solr/admin/collections?action=DELETEALIAS&name=products_all'
ZooKeeper 上の設定更新手順
設定の ZooKeeper へのアップロード
Solr に同梱の ZkCLI 工具(Java Lithium純正 jar)を使用します:
cd /opt/solr/server/solr-webapp/webapp/WEB-INF/lib
java -classpath .:* \
-Dlog4j.configuration=file:../../log4j.properties \
org.apache.solr.cloud.ZkCLI \
-zkhost 10.0.1.10:2181,10.0.1.11:2181,10.0.1.12:2181 \
-cmd upconfig \
-confdir /data/solr/configsets/ecommerceconf \
-confname ecommerce
デフォルトの設定ファイル(
conf/配下)を事前に変更し、そのパスを-confdirに指定してください。
集合と設定の明示的関連付け
java -classpath .:* \
-Dlog4j.configuration=file:../../log4j.properties \
org.apache.solr.cloud.ZkCLI \
-zkhost 10.0.1.10:2181,10.0.1.11:2181,10.0.1.12:2181 \
-cmd linkconfig \
-collection ecommerce_prod \
-confname ecommerce
⚠️ この操作後、設定ファイルがZooKeeper内に正しく登録されている場合、再作成される集合はその設定を参照します。