我们如何决定在elasticsearch中存储文档的节点?

时间:2014-10-10 13:17:58

标签: elasticsearch nest

由于我是ES的新手,我需要帮助。

我读到可以使用' routing'指定要存储文档的分片。但是可以限制文档应该保存在特定节点中吗?..

假设我有两个节点。 Node1和node2。我的要求是,如果我将一个文档从node1添加到index' attenadance',它应该将主分片存储在node1,副本可以在node2。同样的事情,如果我将一个文件从node2添加到index' attenadance',它应该在node2存储主分片,副本可能在node1 ...请建议我是否可以在ES?如果是,请告诉我如何在ES中实现这一目标。

2 个答案:

答案 0 :(得分:0)

您无法控制分片/副本的位置 - elasticsearch处理...通常,它不会在同一节点上放置分片的副本。这里有一个很好的解释:Shards and replicas in Elasticsearch

如果您需要将数据分组在一起,还有关于在弹性搜索博客上使用shard routing的良好文档(但要小心,因为它可能会产生热点。

答案 1 :(得分:0)

每个节点都有一个与cofig.yml中的rack关联的特定值。节点1有一个设置node.rack:rack1,节点2设置为node.rack:rack2,依此类推。

我们可以创建一个索引,该索引仅部署在机架设置为rack1的节点上,将index.routing.allocation.include.tag设置为rack1。例如:

curl -XPUT localhost:9200/test/_settings -d '{
    "index.routing.allocation.include.tag" : "rack1"
}'

进一步参考: Elasticsearch official doc