web-dev-qa-db-ja.com

Elasticsearchの読み取りおよび書き込みの一貫性

Elasticsearchには、「Cassandraのような」「読み取り一貫性」パラメーターがありません。ただし、「 書き込み一貫性 」と「 読み取り設定 」があります。

ドキュメントでは Write Consistency について次のように説明しています

一貫性の書き込み
ネットワークパーティションの「間違った」側で書き込みが行われないように、デフォルトでは、アクティブなシャードのクォーラム(> replicas/2 + 1)が利用可能な場合にのみインデックス操作が成功します。このデフォルトは、action.write_consistency設定を使用してノードごとにオーバーライドできます。この動作ごとの動作を変更するには、一貫性要求パラメーターを使用できます。

有効な書き込み一貫性の値は、1、quorum、およびallです。

レプリカの数が1(データの合計2つのコピー)の場合、1つのコピー(プライマリ)が書き込みを実行できる場合、デフォルトの動作は成功することに注意してください。

インデックス操作は、レプリケーショングループ内のすべてのactiveシャードがドキュメントのインデックスを作成した後にのみ返されます(同期レプリケーション)。

私の質問は最後の段落についてです:

インデックス操作は、レプリケーショングループ内のすべてのactiveシャードがドキュメントのインデックスを作成した後にのみ返されます(同期レプリケーション)。

write_consistency=quorum(デフォルト)およびすべてのシャードがライブ(ノード障害、ネットワークパーティションなし)の場合:
1)インデックス操作は、クォーラムのシャードのインデックス作成が終了するとすぐに戻りますか? (すべてのシャードがライブ/アクティブであっても)
2)または、すべてのライブ/アクティブシャードのインデックス作成が完了したときにインデックス操作が返されますか? (つまり、クォーラムは、障害/タイムアウトの場合にのみ考慮されます)

最初の場合-読み取りは最終的に一貫している可能性があり(古いデータを取得する可能性があります)、書き込みはより高速です。
2番目の場合-読み取りは一貫性があり(ネットワークパーティションがない限り)、書き込みは低速です(低速のシャード/ノードを待機するため)。

誰がそれがどのように機能するか知っていますか?

もう1つ疑問に思うのは、(get/searchリクエストでの) ' preference ' paramのデフォルト値がrandomizedであるのに_localではない理由ですより効率的だと思う)

21

私は自分の質問に今答えることができると思います:)

最初の質問に関して、ドキュメンテーションを再読することで( this および this )数回:)私はこの声明が正しいはずだと気づきました:

整合性パラメーターに関係なく、すべてのライブ/アクティブシャードのインデックス作成が完了すると、インデックス操作が戻ります。整合性パラメーターは、使用可能なシャード(ノード)が十分でない場合にのみ、操作の開始を妨げる場合があります。

たとえば、3つのシャード(1つのプライマリと2つのレプリカ)があり、すべてのシャードが利用可能な場合-操作はall 3( 3つすべてがライブ/利用可能であることを考慮すると、一貫性に関係なく、paramconsistency=one
これにより、システムの一貫性が確保されます(少なくともdocument-api部分)。ネットワークパーティションがない限り。しかし、私はまだこれをテストする機会がありませんでした。

更新:ここでの一貫性とは、ACIDの一貫性を意味するものではなく、リクエストが返された時点ですべてのレプリカが更新されることを保証するだけです。

2番目の質問に関して:明白な答えは-負荷を分散することはrandomizedです。一方、クライアントは通信するランダムノードを選択できますが、1つのリクエストに複数のシャードが必要になる可能性があるため、おそらく100%効率的ではありません。

20

書く:ES 6.1に上記が当てはまるかどうかはわかりません https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html#index-wait-for-active -shards は、プライマリシャードがアクティブで、他の値に変更できる場合にインデックス操作が戻ることを示します。

検索はランダムなので、アクティブなシャードフィールドの待機をすべてに設定すると、すべてのシャードで実行された場合に書き込みが成功することが保証されます。

読む:設定は引き続き使用できますが、非推奨としてマークされています。

1
Gopal Shukla