タグ: Solr

[Solr]bin/solr スクリプトの使い方(ZooKeeper編)

bin/solr の使い方で ZooKeeper に関連する部分です。
Solr リファレンスの該当部分の抄訳です。

ZooKeeper 操作

アップロード

bin/solr zk upconfig
configset のアップロード

-n <name>
ZooKeeper 上に置く設定名
-d <configset dir>
configset のあるディレクトリ
-z <zkHost>
ZooKeeper の接続先

ダウンロード

bin/solr zk downconfig
configset のダウンロード

-n <name>
ZooKeeper 上にある設定名
-d <configset dir>
ダウンロードした configset を置くディレクトリ
-z <zkHost>
ZooKeeper の接続先

コピー

bin/solr zk cp
ファイル単位のコピー

-r
再帰的なコピー
<src>
コピー元
<dest>
コピー先
-z <zkHost>
ZooKeeper の接続先

削除

bin/solr zk rm
znode の削除

-r
再帰的な削除
<path>
削除対象のパス
-z <zkHost>
ZooKeeper の接続先

移動

bin/solr zk mv
znode の移動

<src>
移動元
<dest>
移動先
-z <zkHost>
ZooKeeper の接続先

ノードの表示

bin/solr zk ls
子ノードの表示

-r
再帰的な表示
<path>
表示対象の親ノードのパス
-z <zkHost>
ZooKeeper の接続先

ノード作成

bin/solr zk mkroot
znode 作成

<path>
作成するパス
-z <zkHost>
ZooKeeper の接続先


[Solr]bin/solr スクリプトの使い方(システム操作編)

bin/solr スクリプトは意外と多機能です。

Solrリファレンスの該当箇所を抄訳してみました。

起動・再起動・停止

起動と再起動

bin/solr start [options]
bin/solr restart [options]

-a “<string>”
JVMパラメータを指定する
-cloud (-c)
SolrCloud モードで起動
-d <dir>
サーバディレクトリを指定する(デフォルト: $SOLR_HOME/server)
-f
フォアグラウンドで起動する
-h <hostname>
ホスト名を指定して起動する。指定しない場合は ‘localhost’
-m memory
ヒープサイズを指定する
-noprompt
例えば -e オプションを指定したときなど、起動時のプロンプトを抑制してデフォルト値を指定したことにする。
-p <port>
ポートを指定する。省略した場合は ‘8983’
-s <dir>
システムプロパティ solr.solr.home を設定する。
-v
Solrのログ出力を増やす。ログレベルがINFOからDEBUGに変更される。
-q
Solrのログ出力を抑制する。ログレベルがINFOからWARNに変更される。
-V
起動スクリプトのログ出力を増やす。
-z <zkHost>
ZooKeeper 用の接続文字列を定義する。
-force
rootユーザで強制的に起動する場合に指定する。

設定例を利用した起動

bin/solr start -e

cloud
同じマシン上で動く複数のノードを使ったSolrCloudクラスタを起動する
techproducts
$SOLR_HOME/example/exampledocs にあるサンプルドキュメントに合わせたスキーマを使ってスタンドアローンモードで起動する
dih
DataImportHandlerの仕様例をスタンドアローンモードで起動する
schemaless
スキーマレスモードの例をスタンドアローンモードで起動する

停止

bin/solr stop [options]
-p <port>
停止するSolrプロセスを、利用しているポート番号で指定する。
-all
稼働中のSolrプロセスをすべて停止する。
-k <key>
間違えて停止しないように、キーを指定する。
(起動時に -DSTOP.KEY で設定したキーを指定する)

システム情報

bin/solr version
Solr のバージョンを表示する
bin/solr status
稼働中の Solr インスタンスの状態を表示する

アサート

bin/solr assert
Solr のインストール状態について調べる。

-c, –cloud <url>
-C, –not-cloud <url>
Solr が cloud モードで動作しているかどうか

-e, –exitcode <exitcode>
エラーの場合に指定した exitcode で終了する
-m, –message <message>
エラーの場合に指定したメッセージを出力する

-R, –not-root
-r, –root
このユーザがrootかどうか

-S, –not-started <url>
-s, –started <url>
Solr が指定されたURLで稼働中かどうか

-t, –timeout <ms>
指定した時間内にタイムアウトするかどうか

-u, –same-user <directory>
このユーザと指定したディレクトリの所有者が同じかどうか

-x, –exists <directory>
-X, –not-exists <directory>
指定したディレクトリが存在するかどうか

ヘルスチェック

bin/solr healthcheck [options]
Solr の稼働状態をレポートする

-c
コレクション名
-z
ZooKeeperの接続先

コレクションとコア

生成

bin/solr create [options]
コレクションやコアの生成
-c <name>
コレクション・コア名
-d <confdir>
設定のあるディレクトリ
-n <configName>
設定名
-p <port>
Solr のポート番号
-s , -shards <shards>
シャード数
-rf , -replicationFactor <replicas>
コレクション内のレプリカ数
-force
rootユーザによる実行(通常は何もせず警告を出して終了する)を強行する

削除

bin/solr delete [options]
コレクションやコアの削除
-c <name>
コレクション・コア名
-deleteConfig
同時に ZooKeeper から設定も削除する
-p
Solr のポート番号

認証

bin/solr auth enable
BASIC認証を有効にする

-credentials
username:password の形式でユーザとパスワードを指定
-prompt
プロンプトを表示してユーザとパスワードを入力する場合に true を指定
-blockUnknown
true を指定すると、未認証のユーザからのすべてのアクセスをブロックする
-z
ZooKeeper の接続先
-d
Solr のサーバディレクトリ
-s
solr.solr.home の場所(デフォルトは server/solr)

bin/solr auth disable
BASIC認証を無効にする

ドキュメントのエクスポート

bin/solr export [options]
コレクション内のドキュメントをエクスポートする

-url <url>
対象とするコレクションのURL
format
出力フォーマット(jsonl(デフォルト),javabin)
out
出力ファイル名
query
出力対象を指定するクエリ(デフォルト:)
fields
出力対象のフィールド名(カンマ区切り)
limit
出力する件数


[Solr]ロギングについてのTips

動的にログレベルを変更する

管理画面から

Solrの管理画面 Logging → Level で Solr 稼働中にログレベルを変更できます。
特定のクラスのログ出力だけを変更することもできますし、rootを変更することで全体を変更することもできます。

APIで

以下のようにAPIを呼び出すことでログレベルを変更できます。

curl -s http://localhost:8983/solr/admin/info/logging --data-binary "set=root:WARN"

設定ファイルの場所を指定する

環境変数 LOG4J_PROPS で log4j2.xml の場所を指定します。

LOG4J_PROPS=/var/solr/log4j2.xml

ログの出力先を指定する

環境変数 SOLR_LOGS_DIR でログの出力先を指定します。

SOLR_LOGS_DIR=/var/solr/logs

日付ベースのログローテーションにする

log4j2.xml の MailLogFile の設定を以下のように変更します。

<RollingRandomAccessFile
    name="MainLogFile"
    fileName="${sys:solr.log.dir}/solr.log"
    filePattern="${sys:solr.log.dir}/solr.log.%d{yyyyMMdd}" >
  <PatternLayout>
    <Pattern>
      %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%X{collection} %X{shard} %X{replica} %X{core}] %c{1.} %m%notEmpty{\
 =>%ex{short}}}{10240}%n
    </Pattern>
  </PatternLayout>
  <Policies>
    <TimeBasedTriggeringPolicy interval="1"/>
  </Policies>
  <DefaultRolloverStrategy max="10"/>
</RollingRandomAccessFile>

TimeBasedTriggeringPolicy の interval=1 が1日単位という意味になるのは、filePattern に含まれる最小の単位が日だからです。filePattern に HH が含まれていれば interval=1 は1時間単位の意味になり、 mm が含まれていれば1分単位になります。

log4j2をアップデートする

Solr の配布物に含まれる log4j2 関連の jar ファイルは以下の通りです。

  • server/lib/ext/log4j-slf4j-impl-2.14.1.jar
  • server/lib/ext/log4j-layout-template-json-2.14.1.jar
  • server/lib/ext/log4j-core-2.14.1.jar
  • server/lib/ext/log4j-1.2-api-2.14.1.jar
  • server/lib/ext/log4j-api-2.14.1.jar
  • server/lib/ext/log4j-web-2.14.1.jar

log4j2 をアップデートするときはこれらのファイルを置き換えます。

prometheus-exporter を利用している場合は以下のファイルの置き換えも必要です。

  • contrib/prometheus-exporter/lib/log4j-slf4j-impl-2.14.1.jar
  • contrib/prometheus-exporter/lib/log4j-core-2.14.1.jar
  • contrib/prometheus-exporter/lib/log4j-api-2.14.1.jar

[Solr]バックアップの置き場をS3にする

Solr には予め設定しておいたレポジトリにバックアップする機能があります。
レポジトリには以下の種類があります。

  • ローカルファイルシステム
  • HDFS
  • GCS(Google Cloud Storage)
  • Amazon S3

ここではローカルファイルシステムとS3の設定例を見てみます。

LocalFileSystemRepository

バックアップレポジトリの設定は solr.xml に書きます。

<backup>
  <repository name="local_repo" class="org.apache.solr.core.backup.repository.LocalFileSytemRepository">
    <str name="location">solr/backup_data</str>
  </repository>
</backup>

LocalFileSystemRepository の場合、設定項目は location だけです。

以下のようにAPIを利用してバックアップを実行した場合、Solr のインストールディレクトリを $SOLR_DIR とすると $SOLR_DIR/server/solr/backup_data/backup1 にコレクション backup_test のバックアップが作られます。

$ curl 'http://localhost:8983/solr/admin/collections?action=BACKUP&name=backup1&collection=backup_test&repository=local\
_repo'

S3BackupRepository

S3BackupRepository を使うためにはプラグインの設定が必要です。
$SOLR_DIR/server/solr/lib を作成し、dist/solr-s3-repository-8.10.0.jar と contrib/s3-repository/lib/*.jar をコピーして
solrconfig.xml に以下を追加します。

<lib dir="./lib" />                                                                                                     

レポジトリの設定はsolr.xmlに追加します。

<backup>
  <repository name="s3_repo" class="org.apache.solr.s3.S3BackupRepository" default="false">
    <str name="s3.bucket.name">XXXX.splout.co.jp</str>
    <str name="s3.region">us-west-2</str>
  </repository>
</backup>

s3.bucket.name でバケット名を、s3.region でリージョン名を指定します。
その他に S3 のエンドポイントを指定する s3.endpoint、プロキシを設定するための s3.proxy.url, s3.proxy.useSystemSettings \
があります。

上記の設定例の場合、以下のようにAPIを利用してバックアップを実行した場合、s3://XXX.splout.co.jp/backup2 にコレクション backup_test のバックアップが作られます。

$ curl 'http://localhost:8983/solr/admin/collections?action=BACKUP&name=backup2&collection=backup_test&repository=s3_re\
po'

[Solr]分散検索でどのレプリカに検索リクエストを送るのかを制御する

SolrCloud でシャードに複数のレプリカを作った場合、検索リクエストを処理する際にどのレプリカを優先するのかを shards.preference パラメータで指定できます。

以下の形式で優先順を指定します。
shards.preference=属性1:値1,属性2:値2,…
左側にあるものほど優先度が高くなります。

指定できる属性は以下の通りです。

replica.type

レプリカの種類(PULL, TLOG, NRT)を指定します

replica.location

http://hostname:port から始まる文字列でレプリカの場所を指定します。前方一致でレプリカを選びます。

特殊なケースとして “local” を指定した場合、リクエストを処理するサーバと同じサーバにある Solr インスタンスのレプリカが選ばれます。フィールド数が多い、巨大なフィールドがある、などの理由で検索結果のデータサイズが大きい場合に有効です。特定のレプリカに障害が発生した場合の影響範囲を小さくする効果もあります。

replica.base

優先順位が同じレプリカが存在するときに、それらの間でどれを優先するかを決めるためのルールを指定します。

  • random ランダムに1つ選びます
  • stable:dividend:パラメータ名 指定したパラメータに対応する整数値をレプリカ数で割った余りで決定します
  • stable[:hash[:パラメータ名]] 指定したパラメータに対応する文字列のハッシュ値をレプリカ数で割った余りで決定します。パラメータ名が指定されない場合はメインのクエリである q の値が使われます。

node.sysprop

指定したシステムプロパティの値が同じレプリカが選ばれます。
たとえば同じラックに属する Solr インスタンスが同じ rack プロパティの値を持つように -Drack=rack1 のように設定しておき、検索時に shards.preference=node.sysprop:sysprop.rack を指定すると、リクエストを処理している Solr インスタンスと同じ rack プロパティの値を持つ(=同じラックに属する)レプリカが選ばれます。

replica.leader

リーダーレプリカを優先するかどうかを true または false で指定します。たとえばレプリカが6台ある状態で replica.leader:false が指定されるとリーダー以外の5台が分散検索の対象となります。