DataNodeの稼働中にレプリカ数の設定を変更した際の挙動について

Elasticsearch のDataNodeが稼働中にレプリカ数の設定を変更した際の挙動についてご教授いただけないでしょうか

<実現したいこと>

AWS上に以下の構成でDataNodeを作成した際に、レプリカ数を2個に設定しています。
Elasticsearch のバージョンは7.10です。

AZ:3つ
Node:6台

3つの各AZにはNodeの数が均等になるように2台ずつ配置されています。
また、3つの各AZには「プライマリ」「レプリカ1」「レプリカ2」のそれぞれシャードが被らないように割り当てられています。

この状態でNode台数を5台に減らした際にレプリカ数の設定を1に減らして「プライマリ」「レプリカ1」のみのシャードとしたいです。
レプリカ数の設定変更を実施するタイミングは6台から5台に減らした際にすべてのシャードが復旧したことを確認してから実施します。

<解決したいこと>

「レプリカ2」がまだ生きている状態でレプリカ数の設定を1に変更した際、残っている「レプリカ2」についてはどうなるのでしょうか。

想定:
・レプリカ数の設定を反映したタイミングで削除される
・レプリカ2は削除されないが、今後プライマリが更新された際はレプリカ1のみ更新される
・設定反映時点で存在するレプリカ2については設定反映前と変わりなく動作する(設定反映後は新しいプライマリが作成されてもレプリカ2は作成されない)

レプリカ数はインデックスごとに設定できるかと思いますが、「レプリカ数の設定を1に変更」とは全てのインデックスについてUpdate index settings APIを用いて、index.number_of_replicasを1に変更する、ということでしょうか。最後の「新しいプライマリが作成されても」という部分がよく分かりませんでした。既存のインデックスのプライマリシャード数は増やせなかったと思います。

ご回答をありがとうございます。

「レプリカ数の設定を1に変更」とは全てのインデックスについてUpdate index settings APIを用いて、index.number_of_replicasを1に変更する、ということでしょうか。

こちらについてはその操作でレプリカ数を設定する認識で間違いありません。

最後の「新しいプライマリが作成されても」という部分がよく分かりませんでした。既存のインデックスのプライマリシャード数は増やせなかったと思います。

説明不足で申し訳ございません、こちらは新しく追加されたインデックスに対してシャード分割した際のプライマリシャードのことを指しております。

ディスクが空くまでは多少のタイムラグがあるかもしれませんが、基本的にはnumber_of_replica=1に変更した時点で(その情報がレプリカ2を持つノードに届く前に、そのノードがクラスターから切断されるなどの特殊な状況を除いて)、利用不能になるのではないかと思います。例えばnumber_of_replica=1に変更した後でプライマリ+レプリカ1に障害が生じた場合に、削除済みのレプリカ2からの復元は厳しいのではないでしょうか。明記されている箇所は見つけられなかったので、厳密に知りたいのであればサポートなどに問い合わせた方が良さそうです。

新たにnumber_of_replica=1で作成したインデックスについては、レプリカ2は作成されないと思います。プライマリシャード数を増やす場合は、新しいインデックスへreindex操作を行うことになると思いますので、新たなインデックスを作る場合と同じです。

1 Like

ご回答をありがとうございました。

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.