Jira Data Center 検索インデックス
To provide fast searching, Jira creates an index of the text entered into issue fields. This index is either stored on the file system when using Lucene, or in an OpenSearch cluster and updated whenever issue text is added or modified. They're called Lucene or OpenSearch indexes, because they are provided by a third-party framework with that name. This page explains how indexes are managed and kept in sync in Jira Data Center.
インデックスの保存場所
Lucene
The indexes are stored in a number of directories in the local Jira home directory under caches
. Each node in the cluster has its own set of indexes.
`-- indexes
|-- changes
|-- comments
|-- entities
| |-- portalpage
| `-- searchrequest
`-- issues
OpenSearch
In OpenSearch, all documents for Jira are stored on one Issue index. The index has an alias of issues
to enable re-indexing with minimal impact by using a staging index to rebuild the index. The production index follows the naming convention issue-atlas-<timestamp>
.
インデックスの同期
Jira は、インデックスのすべてのコピーを自動的に最新の状態に保ちます。同期処理は完全に同時に実行されるわけではありませんが、最終的な一貫性を目指しています。つまり、クラスター内の他のノードで、インデックスの変更が反映される前に遅延が発生します。
Lucene
インデックスは連続的に同期され、各ノードは 5 秒に 1 回変更をポーリングします。では、これらの変更はどこに記録されるのでしょうか。
インデックスとデータベース
- データベース テーブル:
replicatedindexoperation
各インデックス オペレーションはこのデータベース テーブルに行を書き込みます。次に、すべてのノードは、クラスタ内の他のノードが書き込んだエントリを探します。このような変更を見つけたら、ノードはローカルの Lucene インデックスに変更を適用します。 - データベース テーブル:
nodeindexcounter
ノードが考えられるすべての操作を毎回確認せずに済むよう、処理済みの最新の操作をこのテーブルに常に記録します。これにより、次回の確認では新しい操作を読み取るだけで済みます。
ドキュメントベースのレプリケーション
Jira 8.12 では、Jira Data Center のインデックス同期メカニズムとしても機能するドキュメントベースのレプリケーションが導入されています。
OpenSearch
Issues are indexed within documents in OpenSearch. All changes are sent directly to OpenSearch from the Jira node where the change occurred. A retry mechanism adds fault tolerance for any intermittent failures when communicating with OpenSearch.
Jira runs a scheduled job, by default, every one minute across the Jira cluster, to verify that all recent updates are indexed. Jira tracks document versions in the replicatedindexoperation table and enforces versioning in OpenSearch by using its built-in document versioning.
This allows Jira to verify that the expected documents and versions exist in OpenSearch. For deletes and archives, Jira checks that the documents have been removed from the index.
インデックスとデータベース
Database table:
replicatedindexoperation
Each index operation writes a row to this database table, including the document version. The scheduled job uses these operations to confirm that they've been applied to the OpenSearch cluster.Database table:
nodeindexcounter
To avoid checking all possible operations every time, the latest processed operation for each node is recorded in this table. During the next check, only new operations are read.
Retention period for both Lucene and OpenSearch
インデックス変更が何度も発生すると、データベース テーブルが非常に大きくなる可能性があります。これを回避するため、各ノードで実行され、一定期間を過ぎたメッセージを非表示にするサービスを導入しました。既定の保存期間は 2800 分 (2 日間) です。これは、インデックスを機能させるためには十分な期間ですが、Jira でカスタマイズすることもできます。
- Jira で、 > [システム] に移動します。
- [詳細] セクションで、[サービス] をクリックします。
com.atlassian.jira.service.services.index.ReplicatedIndexCleaningService
サービスを編集し、新しい保存期間を入力します。
Replicating the indexes for both Lucene and OpenSearch
ノードが初めてクラスターに参加した場合、または長い間オフラインになっていた場合、データベースから変更を適用する代わりに、別のアクティブなノードから最新のインデックスのコピーを取得します。この方法はよりシンプルかつ効果的です。インデックスは次の方法で複製されます。
- ノードはインデックスに "backup index request" (インデックスのバックアップ リクエスト) を送信します。
- アクティブ ノードのうちの 1 つがリクエストを受信し、メッセージ キューからリクエストを削除して、共有ホーム ディレクトリにインデックスのバックアップを作成します。
- バックアップを作成したノードは、バックアップを要求したノードに "index backed up (インデックスのバックアップ完了)" というメッセージを送信します。
- 要求元のノードは、現在のインデックスをバックアップで置き換えます。
- 要求元のノードには、バックアップの作成後に行われた変更も適用されます。
インデックスの健全性のチェック
ヘルス チェック
Jira Data Center は、インデックスが問題なく複製されていることを確認できるヘルス チェックを提供します。これについて説明するナレッジベース記事では、トラブルシューティング情報や、インデックスに関する固有の課題へのリンクも紹介しています。詳細は、「HealthCheck: クラスタ インデックスの複製」を参照してください。
APIs for both Lucene and OpenSearch
API を使用して特定のノードのインデックスの状態を確認することもできます。詳細は、「インデックスの概要の取得」を参照してください。
Q&A
インデックスに関して良く寄せられる基本的な情報を集めました。
質問 | 回答 |
---|---|
共有ホーム ディレクトリを格納するサーバーのディスク容量が不足しています。indexes ディレクトリを削除してもよいですか? | 削除されたディレクトリはすぐに置き換えられます。そのため、追加容量を確保するためにこの操作を行っても効果はありません。このディレクトリは、いずれかのノードのインデックスが壊れており、新しいコピーが必要な場合にのみ削除できます。 |
クラスタ上のノードの 1 つでインデックスが破損しています。どのように修正すればよいですか? | この問題を解決する最も簡単な方法は、インデックスを 1 つのノードから別のノードにコピーすることです。方法は次のとおりです。
|
実行中の Jira インスタンスからインデックスをコピーできますか? | いいえ、インデックスは常に更新されているため、信頼性が損なわれます。このようなコピーは一貫性を持ちません。 クラスタに新しいインスタンスが追加されると、Jira はスナップショットからインデックスの一貫したコピーを作成して、その後に発生したすべての変更を適用します。 |
インデックス再作成オプションの選択基準 | 複数ノードの Jira Data Center インスタンスを使用している場合、バックグラウンドでインデックスを再作成を使用する必要はありません。Jira をロックしてインデックスを再構築するオプションをご利用ください。この理由については、「検索インデックス」を参照してください。 |