这是添加到现有集群的新主机
test
,它触发了重新平衡过程。
两个节点
node-5, node-6
位于新主机中。
对于每个分片,只有一个主分片和一个复制分片。
重新平衡后,主 shard-4 和副本 shard-4 被重新定位到该新主机中。
为什么这两个分片位于同一主机?为什么ES不将其中一个分片分配给不同的主机? 这是不安全的,因为如果该主机出现故障,shard-4 将丢失。
顺便说一下,重新平衡时,进程暂停了, ES 表示应该将
cluster.routing.allocation.same_shard.host
设置为 false
,以允许相同分片的副本分配到同一主机上的不同节点。
Elasticsearch 无法知道哪个虚拟服务器安装在哪个物理服务器上。但你可以通过
elasticsearch.yml
在每台服务器上手动一一定义
您可以使用集群级分片分配意识来实现这一点。
示例:假设我们有 4 台虚拟服务器和 2 台物理服务器。这是数据节点的示例
elasticsearch.yml
。
第1步-更新elasticsearch yml
data-1 - elasticsearch.yml
node.attr.server: node1
data-2 - elasticsearch.yml
node.attr.server: node1
data-3 - elasticsearch.yml
node.attr.server: node2
data-4 - elasticsearch.yml
node.attr.server: node2
第2步-重新启动Elasticsearch
Step3-启用分片分配意识
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.awareness.attributes" : "server"
}
}