ラベル Apache solr の投稿を表示しています。 すべての投稿を表示
ラベル Apache solr の投稿を表示しています。 すべての投稿を表示

2020年6月20日土曜日

Solr Cloud一部のノードが「down」から復旧しない問題の解消方法

先日solr configファイルをいじって「upconfig」した後、solr再行動しようとしたらsolrが起動できなくなりました。

設定ファイルに何か問題があったようで、急いてconfigファイルを元に戻して再度solr再起動してみたら一応できましたが、ノードが「gone」の状態になっていまいました。

その後admin APIのDELETEREPLICAを使って消そうとしても消すことはできません。(使ったコマンドは以下の通りです。↓)

curl "http://localhost:8983/solr/admin/collections?action=DELETEREPLICA&collection=hoge&shard=shard1&replica=hoge_shard1_replica1"

サービス稼働中であるため、collectionを消して作り直すもできません。変なことをしたら他の活きているノードもし死なせたらサービスダウンになってしまうので、結構焦りました。


Solr管理画面の「Core Admin」で確認すると、そのコアが消えた状態となっています。「Add Core」ボタンより前と同じ名前のコアを作ってみることにしました。そしたら以下のようなエラーが管理画面のトップで表示するようになりました。

SolrCore Initialization Failures org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Error opening new searcher

調べてみたら、インデックスデータが作成中にシャットダウンしたり、接続が切断されたりすると、インデックスデータが破損して上記のエラーになってしまうようです。

解消方法は破損したデータを削除してsolrを再起動するだけです。具体的な手順は以下の通りです。

  • まずsolrをstopします。
  • tlogフォルダとdataフォルダの中身を全部削除します。
  • もしwrite.lockがあればそのファイルも削除します。
  • solrをstartします。

参考にした記事:https://community.cloudera.com/t5/Support-Questions/Solr-5-5-Solr-Exception-Error-opening-new-searcher-NiFi-Flow/td-p/127998

2020年6月2日火曜日

APIを使ってApache solrからデータを削除する方法

たまに特定な条件に一致するデータを削除したい時があります。

SolrのAPIを使えば実現できます。xml形式とjson形式をそれぞれ紹介します。

形式1、xml形式で削除

例:「title」というフィルドが存在します。「title」の中文字列「プレミアム」が存在しているドキュメントを全部削除

curl 'http://localhost:8983/solr/コア名を入れて/update?commit=true&stream.body=<delete><query>title:*プレミアム*</query></delete>'



形式2、json形式で削除

例:「category」(カテゴリ)と「update_at」(更新日)というフィルドが存在します。更新日は2018年12月13日前、かつカテゴリが「fasion」のドキュメントを削除

curl -H 'Content-Type: application/json' \
'http://localhost:8983/solr/コア名を入れて/update?commit=true' \
-d '{ "delete": { "query": "category:fasion AND update_at:[* TO 2018-12-13T00:00:00]" }}'

2020年5月16日土曜日

「Solr cloud: No registered leader was found after waiting for 4000ms」の対処方法

Solr Cloudを使っています。設定変更をしてサーバを立ち上がったらなかなかステータスが「active」になってくれない。

以下のコマンドで動作を確認しみました。

solr healthcheck -c core_name -z zkhost:2181

冒頭に以下のエラーが表示されていました↓

No registered leader was found after waiting for 4000ms

ログに何か他の情報があるかなと思って探ってみましたが特に有力な情報が見つけませんでした。

更にネットでググったらそれも対して対処法を見つけませんでした。

ダメ元でサーバを全部シャットダウンして、一台だけを立ち上がってみたら無事に「active」になってくれました。残りのサーバも立ち上がってみたら無事に復活できました。

恐らく同時に複数台を立ち上がるとリーダーの選出がうまくできてないじゃないかなと思われます。

まず一台だけを立ち上がったら間違いなくリーダーなってくれるはずです。


他のもっといい方法があれば教えていただきたいです。

2020年4月29日水曜日

apache solr 停止コマンド

以下のコマンドでapache solrを停止しようとしたら、エラーがおきました。
/opt/bin/solr stop
No Solr nodes found to stop.
ただ、「solr status」で確認したところ、たしかに動いてます。
ちょっと調べたら、コマンドが間違っていたことを気づきました。メモしておきます。
正しいsolr停止コマンドは以下の通りです。
# すべてのポートを停止
stop -all
もしくは
# 指定ポートを停止
stop -p <port #>
例↓
solr stop -all
solr stop -p 8983