Growi をv7.2.10→v7.3.0へとアップグレード後、全文検索ができなくなったので、その対処方法をメモに残します。
環境
- Growi v7.3.0
- systemdによってサービス化
- ElasticSearch v8.19.3
- Ubuntu 24.04
- MongoDB v6.0.26
- node v20.19.2
- Apache 2.4によるリバースプロキシ
エラー内容
Growiの管理>全文検索管理で以下のエラーが出ました。
Accept version must be either version 8 or 7, but found 9
エラーの原因
Growi v7.3.0のリリースノートで確認したところ、このバージョンからElasticsearch v9がサポート(必須化)されたことが判明しました。
support: Elasticsearch v9 (#10127)
- Growi(クライアント側): v9形式でリクエストを送信
- 既存環境(サーバー側): v8.19.3であったため、v9形式のリクエストを拒否
このバージョンの不一致が原因で、検索機能が停止していたと判明。対処を行います。
エラーを解決した手段
Elasticsearchをv9.1.3にバージョンアップしたことで解決しました。
手段によるサーバへの影響
「Elasticsearchバージョンアップ」です。他にこれを使うアプリが同一サーバ上にある場合、その影響を十分に確認ください。
対処方法のさっくりとした手順
- Elasticsearch/Growiを停止します。
- Elasticsearchのデータディレクトリのバックアップを行います。
- Elasticsearchのリポジトリをv9に併せます。
- Elasticsearchのバージョンアップを行います。
- Elasticsearchのプラグインのアンインストール/インストールを行います。
- Elasticsearch/Growiを起動します。
- エラーの解消を確認します。
ElasticsearchとGrowiの停止
- Elasticsearchサービス停止
sudo systemctl stop elasticsearch.service
- サービス停止確認
systemctl status elasticsearch.service
inactive(dead)
を確認します。
- Growiサービス停止
sudo systemctl stop growi.service
- サービス停止確認
systemctl status growi.service
inactive(dead)
を確認します。
作業前バックアップ
- データディレクトリを丸ごとコピー (-aオプションでパーミッションを維持)
sudo cp -a /var/lib/elasticsearch/ /path/to/backup/dir/elastic_bk.$(date +%Y%m%d)
自分の環境に合わせます。
- バックアップ確認
sudo ls -l /path/to/backup/dir/elastic_bk.$(date +%Y%m%d)
バックアップした内容があることを確認します。(※管理者権限でないとこのディレクトリを見ることはできません)
リポジトリ設定ファイル名をv9用に変更
Elasticsearchのバージョンを指定するリポジトリをv9に変更します。
- 現行のリポジトリリストをバックアップ
sudo cp -pi /etc/apt/sources.list.d/elastic-8.x.list /path/to/backup/dir/elastic-8.x.list.$(date +%Y%m%d)
- リポジトリリストのバックアップ確認
diff -u /path/to/backup/dir/elastic-8.x.list.$(date +%Y%m%d) /etc/apt/sources.list.d/elastic-8.x.list
- リポジトリリストの名前変更
sudo mv /etc/apt/sources.list.d/elastic-8.x.list /etc/apt/sources.list.d/elastic-9.x.list
- リポジトリリストの名前変更確認
ls -l /etc/apt/sources.list.d/elastic-9.x.list
ファイルがあることを確認します。
sedコマンドでファイル内の参照先を8.xから9.xに書き換え
sudo sed -i 's/8.x/9.x/g' /etc/apt/sources.list.d/elastic-9.x.list
Elasticsearchのアップグレード
- パッケージ全体のバックアップ
sudo aptitude update
好みでaptitude
を用いています。必要に応じてapt
を用いてください。
- Elasticsearchのアップグレード
sudo aptitude upgrade elasticsearch
※ Growiインストール時、/etc/elasticsearch/jvm.options
ファイルなどの設定変更を行っているため、アップグレード時の設定ファイルを残すかどうかの確認では、必ずN(残す)を選択します。
- プラグインのアンインストール
Growiに必要な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
ElasticsearchとGrowiの再開
- Elasticsearchサービス開始
sudo systemctl restart elasticsearch.service
- サービス開始確認
systemctl status elasticsearch.service
active(running)
を確認します。
- バージョンアップ確認
curl -X GET "localhost:9200"
"number" : "9.1.3",
など、9系にアップグレードされていることを確認します。
- Growiサービス開始
sudo systemctl restart growi.service
- サービス停止確認
systemctl status growi.service
active(running)
を確認します。
動作確認
- Growiに管理者権限でログインします。
- 管理画面>全文検索管理に進みます。
- インデックスの再構築を実行し、エラーが発生せず、正常に完了することを確認します。
その後、Growi上でキーワード検索を行い、検索結果が正しく表示されることを確認しました。
コメントを残す