AlmaLinux 9 に Apache Solr 9.2.1 をインストールして保護する方法

要点
Solr 9.2.1 を AlmaLinux 9 にインストールし、Java OpenJDK 11 を導入して Solr のヒープサイズ、ulimit、firewalld、そして Basic 認証を設定する手順を示します。手順はコマンド例、設定ファイル編集、トラブルシューティング、運用チェックリストとセキュリティ強化の推奨を含みます。
この記事の目的と対象読者
このガイドは、AlmaLinux 9 上で Apache Solr を初めて導入するエンジニアを想定しています。システム管理者、DevOps エンジニア、検索基盤を自分で構築したい開発者に向けた実用的な手順と運用上の注意点をまとめています。
重要: 本手順はローカルネットワークやテスト環境を想定しています。本番公開時は TLS、より強力な認証方式、ネットワーク分離を必ず検討してください。
目次
- 前提条件
- Java OpenJDK 11 のインストール
- Apache Solr のインストール
- Apache Solr の最適化
- ulimit と firewalld の設定
- Basic 認証による Solr の保護
- 最初のコアの作成
- 運用上の設計の考え方
- 代替の認証方法と比較
- 役割別運用チェックリスト
- トラブルシューティングとロールバック手順
- セキュリティ強化の推奨
- テストケースと受け入れ基準
- 事実ボックスと 1 行用語集
- 結論
- FAQ
前提条件
- AlmaLinux 9 サーバー(推奨メモリ 2–4 GB 以上。この記事の例は 8 GB を使用)
- sudo または root 権限を持つ非 root ユーザー
- ネットワーク経由で FTP/HTTP アクセスが可能なこと(パッケージのダウンロードのため)
重要: 本ガイドでは Apache Solr 9.2.1 を例に説明します。別バージョンを使用する場合は、ダウンロード URL とパッケージ名を読み替えてください。
Java OpenJDK 11 のインストール
Solr 9.x 系は少なくとも Java 11 を必要とします。AlmaLinux の appstream リポジトリから OpenJDK 11 を導入します。
次のコマンドでインストールします。プロンプトで y を入力して進めてください。
sudo dnf install java-11-openjdk java-11-openjdk-devel
インストール後、バージョンを確認します。
java --version
期待される出力は Java 11 系が表示されることです。インストールが成功していれば次のステップへ進みます。
Apache Solr のインストール
公式のバイナリパッケージを使って Solr をインストールします。事前に必要なユーティリティを導入します。
sudo dnf install curl lsof chkconfig -y
次に Solr バイナリをダウンロードします(この記事では 9.2.1 を使用)。
curl -qO https://downloads.apache.org/solr/solr/9.2.1/solr-9.2.1.tgz
インストーラースクリプトだけを抽出します。
tar xzf solr-9.2.1.tgz solr-9.2.1/bin/install_solr_service.sh --strip-components=2
カレントディレクトリに install_solr_service.sh があることを確認後、インストールを実行します。
sudo bash ./install_solr_service.sh solr-9.2.1.tgz
インストール成功時は Solr がデフォルトポート 8983 で動作し、SOLR_HOME が /var/solr/data である旨のメッセージが表示されます。
インストール直後のプロセスを一旦停止してサービスとして起動し直します(出力の PID を使用)。例:
kill -9 12084
sudo service solr start
サービス状態を確認します。
sudo service solr status
正常に動作していれば「running」などの表示が出ます。
Apache Solr の最適化
ここではヒープサイズやバインドするホストを設定します。例ではヒープ 4 GB、内部 IP を 192.168.10.15 に設定します。
まず共有メモリと hugepage の値を増やします。
sudo echo 4294967295 > /proc/sys/kernel/shmmax
sudo echo 1536 > /proc/sys/vm/nr_hugepages
次に /etc/default/solr.in.sh を編集します。
sudo nano /etc/default/solr.in.sh
ファイルの中で SOLR_HEAP のコメントを外して希望の値に設定します。サーバーの総メモリを超えないようにしてください。
SOLR_HEAP="4g"
SOLR_HOST と SOLR_JETTY_HOST も内部 IP に合わせて設定します。
SOLR_HOST="192.168.10.15"
SOLR_JETTY_HOST="192.168.10.15"
保存してサービスを再起動します。
sudo service solr restart
設定変更が反映されていることをサービスのステータスで確認します。ヒープの値が期待どおりになっているか確認してください。
ulimit と firewalld の設定
Solr の安定稼働にはプロセス数やファイルディスクリプタの上限設定が重要です。ここでは solr ユーザーで 65000 を設定する例を示します。
sudo nano /etc/security/limits.conf
ファイル末尾に次を追加します。
solr soft nofile 65000
solr hard nofile 65000
solr soft nproc 65000
solr hard nproc 65000
設定を反映して solr ユーザーで確認します。
sudo -H -u solr bash -c "ulimit -aH"
エラーが消えない場合はサービスを再起動します。
sudo service solr restart
次にファイアウォールでポート 8983 を開放します。
sudo firewall-cmd --add-port=8983/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
ブラウザで http://192.168.10.15:8983/ にアクセスすると Solr 管理 UI が表示されます。
Basic 認証による Solr の保護
デフォルトでは Solr に認証は設定されていません。ここでは基本認証 (BasicAuthPlugin) を使う手順を示します。より強力な方法は後述します。
/var/solr/data ディレクトリに security.json を作成します。
sudo nano /var/solr/data/security.json
以下は例の内容です(ユーザー: solr、パスワード例: SolrRocks)。すでに示されたハッシュ値をそのまま使うか、管理者側でパスワードハッシュを生成して差し替えてください。
{
"authentication":{
"blockUnknown": true,
"class":"solr.BasicAuthPlugin",
"credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="},
"realm":"My Solr users",
"forwardCredentials": false
},
"authorization":{
"class":"solr.RuleBasedAuthorizationPlugin",
"permissions":[{"name":"all", "role":"admin"}],
"user-role":{"solr":"admin"}
}
}
保存後、Solr を再起動します。
sudo service solr restart
ブラウザで再読み込みするとログイン画面が表示されます。solr / SolrRocks でログインできれば成功です。
セキュリティメニューで basic_auth プラグインが有効になっていることを確認してください。
最初のコアの作成
Solr の CLI から最初のコア(コレクション)を作成します。認証を使う場合は solr ユーザーの認証情報を solr.in.sh に設定します。
sudo nano /etc/default/solr.in.sh
以下の行のコメントを外して設定します。
SOLR_AUTH_TYPE="basic"
SOLR_AUTHENTICATION_OPTS="-Dbasicauth=solr:SolrRocks"
設定を反映して Solr を再起動します。
sudo service restart solr
コアを作成します。
su - solr -c "/opt/solr/bin/solr create -c test1_core -n Test1Core"
“Created new core test1_core” と表示されれば成功です。管理画面の Core Admin で test1_core が見えることを確認してください。
運用上の設計の考え方
Solr を導入する際の基本的な心構えを短くまとめます。
- 単一ノードでの検証と分散構成での運用は目的が異なります。検証は早く立ち上げること、運用は耐障害性と監視が重要です。
- データ容量とクエリ負荷に合わせてヒープサイズと JVM GC 設定を調整します。ヒープを大きくすれば良いわけではなく、ガベージコレクションの影響を考慮してください。
- レプリケーションとシャーディングは、可用性と拡張性の設計上の中心です。小規模ではレプリカを 2 ノード以上にすることを推奨します。
簡単なメンタルモデル: Solr は検索リクエストを受ける「フロント」、インデックスを保持する「ストレージ」、インデックス作成を担当する「インデクサー」の役割に分けて考えると運用が整理しやすいです。
代替の認証方法と比較
ここでは Basic 認証以外の選択肢を列挙し、用途別に短評します。
- Kerberos
- 強力な SSO 連携が可能。大規模企業環境や Active Directory 統合に向く。
- 導入と運用が複雑。
- JWT
- API やマイクロサービス連携に強い。トークンベースのためスケーラブル。
- トークン管理と失効戦略が必要。
- RulebasedAuthorizationPlugin(詳細な権限設定)
- リソース単位で細かく権限を制御したい場合に有効。
選択のヒント: 内部ネットワークで短期間動かすなら Basic で迅速導入。外部公開や ID プロバイダ連携が必要なら Kerberos/OIDC/JWT を検討してください。
役割別運用チェックリスト
以下は本番運用を想定した簡易チェックリストです。運用チームの役割別に分けています。
- システム管理者
- OS と Java のパッチを定期更新
- ulimit と sysctl の設定を監視
- ファイアウォールルールを管理
- プラットフォームエンジニア
- Solr のバックアップと復元手順を整備
- レプリケーション/クラスタ構成を監視
- ログローテーション設定
- 開発チーム
- スキーマ変更の手順を定義
- パフォーマンステストを定期的に実施
トラブルシューティングとロールバック手順
一般的な問題と対応、ロールバックの基本手順を示します。
問題: Solr が起動しない
- 対処:
sudo service solr status
で状態確認/var/solr/logs/
配下のログを確認(startup.log, solr.log)- ヒープ設定が大きすぎないか確認(SOLR_HEAP)
問題: コア作成に失敗する
- 対処:
- 作成コマンドの出力と /opt/solr/server/logs/ を確認
- 認証が有効な場合は solr.in.sh の認証オプションを確認
ロールバック手順(設定変更を戻す基本):
- 変更を行ったファイルをバックアップしてあるか確認(例: solr.in.sh.bak)
- サービスを停止:
sudo service solr stop
- バックアップファイルを復元
- サービスを起動:
sudo service solr start
- 動作確認とログ確認
インシデント用簡易プレイ
- 重要: 重大インシデント時はまず読み取り専用モードにできる場合は切り替え、ユーザーへの影響範囲を特定してからロールバックを行ってください。
セキュリティ強化の推奨
Basic 認証は手早いですが、強化策を実装してください。
- TLS を導入してすべての通信を暗号化する
- パスワードは平文で保存しない。必ず Solr の推奨するハッシュ化方式を利用する
- 管理 UI へのアクセスは IP ベースの制限を設ける
- 監査ログを有効にして操作履歴を保存する
- 定期的にユーザーと権限を見直す
設定例: firewalld で管理画面へのアクセスを制限する
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.10" port protocol="tcp" port="8983" accept' --permanent
sudo firewall-cmd --reload
注意: 上は例です。実際の IP は運用ポリシーに合わせてください。
チューニングと監視のベストプラクティス
- JVM メトリクス(ヒープ使用量、GC 時間)を監視する。Prometheus + Grafana 等が有効。
- レイテンシが重要な場合は Warmup(事前クエリ)を導入して JVM と OS キャッシュを温める。
- インデックス更新頻度が高い場合は commit と softCommit の戦略を定義する。
- ディスク I/O を監視し、必要に応じて高速ストレージを検討する。
テストケースと受け入れ基準
運用導入前に実施すべき基本テストの例を示します。
- インストール検証
- Solr サービスが起動し、管理 UI にアクセスできる
- 認証検証
- 未認証アクセスが拒否され、正しい資格情報でログイン可能
- コア作成検証
- CLI からコアを作成・削除できる
- パフォーマンス検証
- 期待されるクエリ/秒を満たす(負荷試験を実施)
受け入れ基準(例):
- 管理 UI に 2 人以上同時にログイン可能
- コア作成・検索に対する応答が許容レイテンシ以内
事実ボックス
- 使用バージョン: Apache Solr 9.2.1
- 必要な Java: OpenJDK 11 以上
- デフォルト管理ポート: 8983
- 本ガイドで設定したヒープ例: 4g
- 推奨 ulimit の例: nofile/nproc 65000
1 行用語集
- Solr: Apache Lucene を基盤とする検索サーバー
- コア: Solr の単一のインデックス/検索空間
- SOLR_HOME: Solr のデータと設定が置かれるディレクトリ
- BasicAuthPlugin: Solr の基本認証プラグイン
汎用設定スニペット集
JVM の追加オプション例(solr.in.sh に追加):
SOLR_OPTS="$SOLR_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
Solr のバックアップ(簡易、コア単位):
su - solr -c "/opt/solr/bin/solr backup -c test1_core -d /var/backups/solr/test1_core"
結論
本ガイドでは AlmaLinux 9 に Apache Solr 9.2.1 をインストールし、Java の導入、ヒープサイズ設定、ulimit と firewalld の設定、Basic 認証の有効化、最初のコア作成までの手順を具体的に示しました。さらに運用・監視・セキュリティ強化の観点からチェックリストとトラブルシューティング手順も提供しました。
要点の復唱: 本番運用では TLS とより強固な認証方式、監視を必ず導入してください。
FAQ
Solr を複数ノードで運用する場合の最小構成は?
レプリケーションと可用性確保のためには最低でも 2 ノードのレプリカを推奨します。実運用では 3 ノード以上でのレプリケーションを推奨します。
Basic 認証だけで十分ですか?
開発や内部ネットワークでの検証用途なら迅速導入が可能ですが、パブリックに公開する場合は TLS とより強力な認証を併用してください。
スキーマ変更時の注意点は?
スキーマ変更はインデックス互換性に影響します。事前にステージング環境で検証し、必要ならリインデックス手順を用意してください。