Jira Data Center 検索インデックス
高速な検索を提供するため、Jira は課題フィールドに入力されたテキストのインデックスを作成します。このインデックスはファイル システムに保存され、テキストの一部が追加または変更されるたびに更新されます。これらはLucene というサードパーティのライブラリによって提供されるため、Lucene インデックスと呼ばれます。このページでは、Jira Data Center でインデックスをどのように管理および同期させるかについて説明します。
インデックスの保存場所
インデックスは、ローカル Jira ホーム ディレクトリ内の caches
下にある多数のディレクトリに保存されます。クラスタ内の各ノードは独自のインデックス セットを持ちます。
`-- indexes
|-- changes
|-- comments
|-- entities
| |-- portalpage
| `-- searchrequest
`-- issues
インデックスの同期
Jira は、インデックスのすべてのコピーを自動的に最新の状態に保ちます。同期処理は完全に同時に実行されるわけではありませんが、最終的な一貫性を目指しています。つまり、クラスター内の他のノードで、インデックスの変更が反映される前に遅延が発生します。
インデックスは連続的に同期され、各ノードは 5 秒に 1 回変更をポーリングします。では、これらの変更はどこに記録されるのでしょうか。
インデックスとデータベース
- データベース テーブル:
replicatedindexoperation
各インデックス オペレーションはこのデータベース テーブルに行を書き込みます。次に、すべてのノードは、クラスタ内の他のノードが書き込んだエントリを探します。このような変更を見つけたら、ノードはローカルの Lucene インデックスに変更を適用します。 - データベース テーブル:
nodeindexcounter
ノードが考えられるすべての操作を毎回確認せずに済むよう、処理済みの最新の操作をこのテーブルに常に記録します。これにより、次回の確認では新しい操作を読み取るだけで済みます。
ドキュメントベースのレプリケーション
Jira 8.12 では、Jira Data Center のインデックス同期メカニズムとしても機能するドキュメントベースのレプリケーションが導入されています。
保存期間
インデックス変更が何度も発生すると、データベース テーブルが非常に大きくなる可能性があります。これを回避するため、各ノードで実行され、一定期間を過ぎたメッセージを非表示にするサービスを導入しました。既定の保存期間は 2800 分 (2 日間) です。これは、インデックスを機能させるためには十分な期間ですが、Jira でカスタマイズすることもできます。
- Jira で、 > [システム] に移動します。
- [詳細] セクションで、[サービス] をクリックします。
com.atlassian.jira.service.services.index.ReplicatedIndexCleaningService
サービスを編集し、新しい保存期間を入力します。
インデックスの複製
ノードが初めてクラスターに参加した場合、または長い間オフラインになっていた場合、データベースから変更を適用する代わりに、別のアクティブなノードから最新のインデックスのコピーを取得します。この方法はよりシンプルかつ効果的です。インデックスは次の方法で複製されます。
- ノードはインデックスに "backup index request" (インデックスのバックアップ リクエスト) を送信します。
- アクティブ ノードのうちの 1 つがリクエストを受信し、メッセージ キューからリクエストを削除して、共有ホーム ディレクトリにインデックスのバックアップを作成します。
- バックアップを作成したノードは、バックアップを要求したノードに "index backed up (インデックスのバックアップ完了)" というメッセージを送信します。
- 要求元のノードは、現在のインデックスをバックアップで置き換えます。
- 要求元のノードには、バックアップの作成後に行われた変更も適用されます。
インデックスの健全性のチェック
ヘルス チェック
Jira Data Center は、インデックスが問題なく複製されていることを確認できるヘルス チェックを提供します。これについて説明するナレッジベース記事では、トラブルシューティング情報や、インデックスに関する固有の課題へのリンクも紹介しています。詳細は、「HealthCheck: クラスタ インデックスの複製」を参照してください。
API
API を使用して特定のノードのインデックスの状態を確認することもできます。詳細は、「インデックスの概要の取得」を参照してください。
Q&A
インデックスに関して良く寄せられる基本的な情報を集めました。
質問 | 回答 |
---|---|
共有ホーム ディレクトリを格納するサーバーのディスク容量が不足しています。indexes ディレクトリを削除してもよいですか? | 削除されたディレクトリはすぐに置き換えられます。そのため、追加容量を確保するためにこの操作を行っても効果はありません。このディレクトリは、いずれかのノードのインデックスが壊れており、新しいコピーが必要な場合にのみ削除できます。 |
クラスタ上のノードの 1 つでインデックスが破損しています。どのように修正すればよいですか? | この問題を解決する最も簡単な方法は、インデックスを 1 つのノードから別のノードにコピーすることです。方法は次のとおりです。
|
実行中の Jira インスタンスからインデックスをコピーできますか? | いいえ、インデックスは常に更新されているため、信頼性が損なわれます。このようなコピーは一貫性を持ちません。 クラスタに新しいインスタンスが追加されると、Jira はスナップショットからインデックスの一貫したコピーを作成して、その後に発生したすべての変更を適用します。 |
インデックス再作成オプションの選択基準 | 複数ノードの Jira Data Center インスタンスを使用している場合、バックグラウンドでインデックスを再作成を使用する必要はありません。Jira をロックしてインデックスを再構築するオプションをご利用ください。この理由については、「検索インデックス」を参照してください。 |