Solr 13: 管理SolrCloud集群的配置与生命周期操作

集合(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内に正しく登録されている場合、再作成される集合はその設定を参照します。

タグ: solrcloud zkcli solr-13 shard-splitting replica-management

5月27日 19:28 投稿