概要

GrowiでElasticsearchによる全文検索を利用している中でのアップデートの注意点です。なお、Growiをオンプレ運用していてサーバリソースの関係上などでElasticsearchを用いていないという方はここから下は参考程度にとどめてください。

環境

  • Grwoi v7.3.3
  • Elasticsearch v9.2.0
  • Apacheによるリバースプロキシ

パッケージアップデート時の注意

sudo aptitude upgrade

(※筆者は好みでaptitudeを使っています)

とした中で、

以下のパッケージが更新されます:          
  elasticsearch 

と、elasticsearchを含むアップデートがあったときの注意点です。

注意1:設定ファイルの維持

(データベースを読み込んでいます ... 現在 170063 個のファイルとディレクトリがインストールされています。)
.../elasticsearch_9.2.0_amd64.deb を展開する準備をしています ...
elasticsearch (9.2.0) で (9.1.5 に) 上書き展開しています ...
elasticsearch (9.2.0) を設定しています ...

設定ファイル '/etc/elasticsearch/jvm.options'
 ==> これはインストールしてから (あなたかスクリプトによって) 変更されています。
 ==> パッケージ配布元が更新版を提供しています。
   どうしますか? 以下の選択肢があります:
    Y か I  : パッケージメンテナのバージョンをインストールする
    N か O  : 現在インストールされている自分のバージョンを残す
      D     : 両バージョンの差異を表示する
      Z     : 状況を調査するためにシェルを開始する
 デフォルトでは現在使っている自分のバージョンを残します。
*** jvm.options (Y/I/N/O/D/Z) [デフォルト=N] ? 

の質問が来た場合、N を確実に選んでください。手なりでのyは厳禁です。なぜなら、Growi設定時に

-Xms256m
-Xmx256m

の2行を追記しているからです。(※数値は環境によって異なりますが、Growi推奨値が256MBです)

この -Xms256m および -Xmx256m の2行は、Elasticsearch の JVMヒープメモリの初期サイズ(Xms)と最大サイズ(Xmx) を指定しています。これが削除される、つまりデフォルト設定に戻ると、Growi の安定性やパフォーマンスに以下のリスクがあります。

削除された場合のリスク

  1. メモリ不足によるクラッシュ
  • デフォルトではJVMが自動でヒープサイズを決定しますが、サーバのメモリ量や他プロセスの使用状況によっては、必要なメモリが確保されず、ElasticsearchがOutOfMemoryErrorで落ちる可能性があります。
  1. パフォーマンスの低下
  • 初期サイズが小さいと、ヒープの拡張が頻繁に発生し、GC(ガベージコレクション)による停止時間が増加します。これにより、Growiの検索やデータ取得が遅くなることがあります。

間違えてY/Iを選択してしまったら?

/etc/elasticsearch/jvm.options.dpkg-old

または

/etc/elasticsearch/jvm.options.dpkg-dist

にオリジナルが残されています。

sudo cp -pi /etc/elasticsearch/jvm.options.dpkg-old /etc/elasticsearch/jvm.options

または

sudo cp -pi /etc/elasticsearch/jvm.options.dpkg-dist /etc/elasticsearch/jvm.options

として復旧させましょう。

注意2:Growi依存プラグインによるサービス起動不可

そうして、アップデートが完了後、

Restarting services...
 systemctl restart elasticsearch.service
Warning: The unit file, source configuration file or drop-ins of elasticsearch.service changed on disk. Run 'systemctl daemon-reload' to reload units.


Job for elasticsearch.service failed because the control process exited with error code.
See "systemctl status elasticsearch.service" and "journalctl -xeu elasticsearch.service" for details.


systemctl status elasticsearch.service
failed (Result: exit-code)

と、failed (Result: exit-code)が出てサービスの再起動に失敗することがあります。この場合、Growiの全文検索は使うことができません。

原因:Growi固有のプラグイン

Growiインストール時、Elasticsearch用の

  • analysis-icu
  • analysis-kuromoji

のプラグインをインストールしています。これはパッケージと同時にアップグレードされません。Elasticsearchのコマンドで導入したパッケージのためです。

対処:再インストール

  • パッケージアンインストール
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin remove analysis-icu
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin remove analysis-kuromoji
  • パッケージ再インストール
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji

2つの注意点を対処後

まず、Run 'systemctl daemon-reload'と言われているので、

sudo systemctl daemon-reload

で更新されたデーモン設定ファイルを読み込みます。

次いで、

systemctl status elasticsearch.service

で、Elasticsearchが依然としてfailed (Result: exit-code)となっていることを確認。その後、

sudo systemctl restart elasticsearch.service

としてサービスを再起動。今度はエラーが起きないと思います。

systemctl status elasticsearch.service

でもactive/runningを確認しましょう。

Growi上での最終確認

  1. Growiに管理者権限でアクセスします。
  2. 設定>全文検索管理に進みます。

接続の状態 接続されていますと表示されていることを確認し、

トップページに戻って検索を開始。想定通りの検索結果が出れば対処完了です。