前回に続いてElasticSearchの記事です。
ESは一度インデックスを作成してしまうと、プライマリシャードの割当数は増やすことができません。
しかし運用後にパフォーマンスの向上等の理由でシャードを増やしたいケースが出てくることがあります。
本来はそれを見据えて、将来的なノード数を考慮したうえでプライマリシャードを設定しておくというのは良いプラクティスと言えるのですが、
ただしそれをやっていなかったとしても、まだ方法はあります。
今回はその方法についてメモを残しておきます。
再インデックスとは既存のインデックスのデータを別のインデックスにコピーする方法です。
「別のインデックス」の方に、新たなプライマリシャードを割り当てておいて、再インデックスをする。
こうすることで、プライマリシャードを増やすことが可能になります。
再インデックスはいつもの通りPOSTメソッドでコマンド一発ですぐできます。
個人的には再インデックスよりこちらの方法が良いと思っています。
既存のインデックスにあらかじめエイリアスを設定しておきます。
ここで、index_Aのaliasをalias_index_dataと仮定します。
アプリケーション側からはalias_index_dataに向けてリクエストを行っている状態です。
この状態で理想のプライマリシャードを設定したindex_Bを作成します。
その後index_A, index_Bのデータを同期させます。
最後にaliasを切り替えます。
今までalias_index_data ⇒ index_A だったので
alias_index_data ⇒ index_B と切り替えてあげれば終了です。
このaliasを設定する方法だと、切り替えの瞬間しか本番環境に影響を及ぼさないので、
個人的にはこちらの方が良いと思っています。