我有ElasticSearch 7.16.2集群运行三个节点(2个主节点,1个投票节点)。一个索引有两个主碎片和两个副本,在重新启动一个节点时,两个主碎片都移动到一个节点。如何限制一个节点中的索引,使每个节点都有一个主碎片和一个副本。
w8ntj3qf1#
您可以使用索引级碎片分配设置来实现这一点,它可能不是那么简单,而且设置有点复杂,当集群中的节点和索引不断变化时,可能会导致进一步的不平衡。为了避免在节点重新启动时发生的问题,您必须在启动Elasticsearch集群中的节点之前禁用碎片分配和碎片重新平衡。
禁用分配的命令
PUT /_cluster/settings { "cluster": { "routing.allocation.enable": false } }
禁用重新平衡的命令
PUT /_cluster/settings { "cluster": { "routing.rebalance.enable": false } }
除此之外,您可以使用reroute API手动将碎片移动到Elasticsearch中的节点,以修复当前的碎片分配。
wyyhbhjk2#
配置是index.routing.allocation.total_shards_per_node。但是你有一个问题。首先我假设你有三个data node。(如果你没有,增加数据节点。)问题是您总共有4个主碎片和副本碎片,并且一个节点必须为自身分配两个碎片。因此,您不能将index.routing.allocation.total_shards_per_node设置为1。至少它必须为2,并且您的问题未解决。配置是动态:https://www.elastic.co/guide/en/elasticsearch/reference/master/increase-shard-limit.html您还可以为群集设置cluster.routing.allocation.total_shards_per_node config。
index.routing.allocation.total_shards_per_node
data node
cluster.routing.allocation.total_shards_per_node
2条答案
按热度按时间w8ntj3qf1#
您可以使用索引级碎片分配设置来实现这一点,它可能不是那么简单,而且设置有点复杂,当集群中的节点和索引不断变化时,可能会导致进一步的不平衡。
为了避免在节点重新启动时发生的问题,您必须在启动Elasticsearch集群中的节点之前禁用碎片分配和碎片重新平衡。
禁用分配的命令
禁用重新平衡的命令
除此之外,您可以使用reroute API手动将碎片移动到Elasticsearch中的节点,以修复当前的碎片分配。
wyyhbhjk2#
配置是
index.routing.allocation.total_shards_per_node
。但是你有一个问题。首先我假设你有三个data node
。(如果你没有,增加数据节点。)问题是您总共有4个主碎片和副本碎片,并且一个节点必须为自身分配两个碎片。因此,您不能将index.routing.allocation.total_shards_per_node设置为1。至少它必须为2,并且您的问题未解决。
配置是动态:https://www.elastic.co/guide/en/elasticsearch/reference/master/increase-shard-limit.html
您还可以为群集设置
cluster.routing.allocation.total_shards_per_node
config。