# DataNode内のシャード再配置時の動作対象について

**URL:** <https://discuss.elastic.co/t/datanode/304883>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [May 17, 2022, 1:26am UTC](https://discuss.elastic.co/t/datanode/304883 "2022-05-17T01:26:37Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![takumi.yoshikawa](https://avatars.discourse-cdn.com/v4/letter/t/a8b319/32.png) [@takumi.yoshikawa](https://discuss.elastic.co/u/takumi.yoshikawa)\
**Post date:** [May 17, 2022, 1:26am UTC](https://discuss.elastic.co/t/datanode/304883/1 "2022-05-17T01:26:38Z")

</div>

・ElasticsearchはDataNode内のディスク使用率が以下の閾値を超えると保管しているシャードを別のNodeに再配置しようと働きかけます。

` cluster.routing.allocation.disk.watermark.high`

その際に以下の基準があるかご存じでしょうか。

- DataNode内のどのシャードが再配置の対象となるのか
- どのNodeが再配置先の対象となるのか

[ディスクベースのシャード割り当て|弾力性検索ガイド [7.0] |エラスティック (elastic.co)](https://www.elastic.co/guide/en/elasticsearch/reference/7.0/disk-allocator.html)

---

<div class="post-metadata">

**Author:** ![Koji\_Kawamura](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/koji_kawamura/32/93938_2.png) [@Koji\_Kawamura](https://discuss.elastic.co/u/Koji_Kawamura)\
**Post date:** [May 25, 2022, 2:31am UTC](https://discuss.elastic.co/t/datanode/304883/2 "2022-05-25T02:31:22Z")

</div>

@takumi.yoshikawa さん、

ver 8.2.1 のコードを見てみました。

- どのシャードが再配置の対象となるのか

[BalancedShardsAllocator.moveShards](https://github.com/elastic/elasticsearch/blob/v8.2.1/server/src/main/java/org/elasticsearch/cluster/routing/allocation/allocator/BalancedShardsAllocator.java#L675) で実装されています。各データノードごとに均等にシャード存在可否の判断ができるような順序で判断するようです。例: node1 (s1, s2), node2 (s3, s4), node3 (s5) の場合、 s1, s3, s5, s2, s4 の順でチェックするイメージ。各ノードごとのシャード順はそのノードにシャードが配置された順です。

- どの Node が再配置先の対象となるのか

クラスタ内のデータノードで均等にシャードを担当するように振り分けます。 [BalancedShardsAllocator](https://github.com/elastic/elasticsearch/blob/v8.2.1/server/src/main/java/org/elasticsearch/cluster/routing/allocation/allocator/BalancedShardsAllocator.java) で実装しています。[WeightFunction](https://github.com/elastic/elasticsearch/blob/v8.2.1/server/src/main/java/org/elasticsearch/cluster/routing/allocation/allocator/BalancedShardsAllocator.java#L222) で weight の小さいデータノード順に、配置可能かをチェックして配置可能であればそのデータノードを利用します。空きディスク、データティアなどそれぞれの観点でチェックする複数の AllocationDecider で配置可能か確認します。全ての AllocationDecider で配置可能となった最も weight の少ないデータノードを利用します。WeightFunction はそのノードが保持しているシャードの個数をもとに計算しています。すなわち、担当シャード数の一番少ないノードです。

---

<div class="post-metadata">

**Author:** ![takumi.yoshikawa](https://avatars.discourse-cdn.com/v4/letter/t/a8b319/32.png) [@takumi.yoshikawa](https://discuss.elastic.co/u/takumi.yoshikawa)\
**Post date:** [May 26, 2022, 5:38am UTC](https://discuss.elastic.co/t/datanode/304883/3 "2022-05-26T05:38:11Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [June 23, 2022, 5:39am UTC](https://discuss.elastic.co/t/datanode/304883/4 "2022-06-23T05:39:05Z")

</div>

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