一部のノードが他のノードよりも著しく多くのホットデータを処理すると、これらのノードは高負荷で動作し、クラスターの残りの部分はアイドル状態になります。本トピックでは、この不均衡を診断し、シャードを手動で移行して修正する方法について説明します。
症状
以下のいずれかの現象が見られる場合、この問題が発生している可能性があります:
-
高負荷のノードが、同じ属性を持つシャード (例:プライマリシャードのみ) を偏って保持している
-
高負荷のノードが、他のノードよりも多くのビジネスインデックス用シャードを保持している
事前準備
シャードの手動移行は一時的な解決策です。ノードが短時間クラスターから離脱し、シャードの再割り当てが実行されると、不均衡が再発する可能性があります。シャードを移行する前に、「クラスターの負荷の不均衡」のガイダンスに従って根本原因に対処してください。
シャードがすでに均等に分散されているにもかかわらず、クラスターが高負荷の場合は、代わりに クラスター設定のアップグレード を行ってください。
シャードの手動移行
ステップ 1:シャードの割り当ての無効化
次のコマンドを実行して、一時的にシャードの割り当てを無効にします。これにより、 Elasticsearch がシャードを自動的に移動するのを防ぎます。
PUT /_cluster/settings
{
"transient" : {
"cluster.routing.allocation.enable" : "none"
}
}
移行が完了したら (ステップ 4) 、シャードの割り当てを再度有効にしてください。シャードの割り当てを無効にしたままにすると、クラスターの復旧と回復性に影響を与える可能性があります。
ステップ 2:シャードの移行
クラスターの再ルーティング API を使用して、特定のシャードをあるノードから別のノードに移動します。次の例では、index_parkingorder_v1 インデックスのシャード 3 を 192.168.130.77 から 192.168.130.78 に移動します。
POST /_cluster/reroute
{
"commands" : [
{
"move" : {
"index" : "index_parkingorder_v1",
"shard" : 3,
"from_node" : "192.168.130.77",
"to_node" : "192.168.130.78"
}
}
]
}
制約:ターゲットノードには、同じシーケンス番号を持つ同じインデックスのシャードがすでに存在していてはなりません。たとえば、あるインデックスのレプリカシャード 3 がノード A にある場合、そのインデックスのプライマリシャード 3 をノード A に移行することはできません。
再ルーティング API の詳細については、「cluster-reroute」をご参照ください。
ステップ 3:移行の検証
次のコマンドを実行して、現在のシャードの割り当てを確認します:
GET _cat/shards?v
出力には、各シャードの状態と割り当てられているノードが一覧表示されます。出力から移行したシャードを探し、以下を確認してください:
-
ターゲットノードに表示されていること
-
状態が
STARTEDであること
以下は出力例です:
index shard prirep state docs store ip node
qosgeoname 4 r STARTED 2279054 623.8mb 10.6.xxx y3m8a_2
qosgeoname 4 p STARTED 2279054 628.8mb 10.6.xxx Xwhpjaf
qosgeoname 3 r RELOCATING 2279002 627.3mb 10.6.xxx 4Mh39az -> 10.6.xxx y3m8a_2tTdi_16TAy7B91w y3m8a_2
qosgeoname 3 p STARTED 2279002 626.4mb 10.6.xxx Xwhpjaf
qosgeoname 1 r STARTED 2278983 623.3mb 10.6.xxx I8SRFdj
qosgeoname 1 p STARTED 2278983 621.6mb 10.6.xxx Qn3qSgY
qosgeoname 2 p STARTED 2280694 623mb 10.6.xxx Qn3qSgY
qosgeoname 2 r STARTED 2280694 622.7mb 10.6.xxx 4Mh39az
qosgeoname 0 p STARTED 2278770 10.6.xxx I8SRFdj
qosgeoname 0 r STARTED 2278770 624.3mb 10.6.xxx y3m8a_2
ステップ 4:シャードの割り当ての再有効化
移行を確認した後、シャードの割り当てを再度有効にしてください:
PUT /_cluster/settings
{
"transient" : {
"cluster.routing.allocation.enable" : "all"
}
}
次のステップ
-
クラスターの負荷の不均衡 — 不均衡の再発を防ぐためのシャードの割り当ての最適化
-
クラスター設定のアップグレード — 再調整後も負荷が高い場合のスケールアップ