没有为新添加的节点分配elasticsearch分片

时间:2016-11-12 11:23:55

标签: elasticsearch

在我的ES群集中​​,我有10个分片和2个5个节点的副本。我刚刚向集群添加了一个新节点,它已与集群同步。状态为绿色,根据集群API,我们现在在集群中有6个活动数据节点。但是当我检查“' http://localhost:9200/_cat/shards'”时,没有为此节点分配任何分片。因此,没有弹性查询指向这个新添加的节点。此节点的日志文件没有什么特别之处:

  public void fbLogin(View view)
{
    // Before Edit:
    // LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("user_photos", "email", "public_profile", "user_posts" , "AccessToken"));

    LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("user_photos", "email", "public_profile", "user_posts"));
    LoginManager.getInstance().logInWithPublishPermissions(this, Arrays.asList("publish_actions"));
    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>()
            {
                @Override
                public void onSuccess(LoginResult loginResult)
                {
                    // App code
                }

                @Override
                public void onCancel()
                {
                    // App code
                }

                @Override
                public void onError(FacebookException exception)
                {
                    // App code
                }
            });
}

有关如何解决此问题的任何特别意见?

2 个答案:

答案 0 :(得分:0)

可能有几个可能的原因。

  1. 当节点离开集群或加入主节点时,会暂时延迟分片重新分配,以避免在重新平衡分片上浪费资源。 检查你的延迟超时。

    curl -XPUT 'localhost:9200/<INDEX_NAME>/_settings' -d ' { "settings": { "index.unassigned.node_left.delayed_timeout": "30s" } }

  2. 您需要检查分片分配是否设置为false。再次启用分片重新分配。

    curl -XPUT 'localhost:9200/_cluster/settings' -d '{ "transient": { "cluster.routing.allocation.enable" : "all" } }'

  3. 如果以上所有都是好的,那么您需要检查主日志,了解为什么它没有向节点提供任何数据。在最坏的情况下,您可能需要重新启动群集,您可以一次滚动停止启动一个节点。

答案 1 :(得分:0)

在添加新节点时,Elasticsearch不会触发数据的重新平衡。实际上你真的不希望它,因为当它需要专注于索引文档和回答查询时,它可能会使你的网络饱和并给集群带来压力。

您可以通过_cluster / reroute API(https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-reroute.html)手动将分片移动到新节点

另一个选项(以及我倾向于用于此类事情的选项)是您可以将瞬态设置应用于基于磁盘的水印(例如https://www.elastic.co/guide/en/elasticsearch/reference/current/disk-allocator.html)。如果查看/_cat/allocation?v并注意到旧节点的磁盘利用率(例如)为60%,则可以将高水位设置降低到55%,以便旧节点开始将数据发送到较新的,没有消耗的磁盘空间。如果这样做,请确保在ES移动数据后重置瞬态设置。