假设我有一个服务,并且在多个主机上运行elasticsearch。如果我确保每个主机包含完整的弹性搜索索引(通过具有副本> = numberOfHosts-1),是否可以确保特定主机上的服务调用仅搜索同一主机的索引(即没有弹性搜索呼叫是跨主机进行的)?
答案 0 :(得分:1)
使用shard allocation filtering,您可以确保索引的分片仅驻留在单个主机上。但请注意,通过这样做,如果主机出现故障,您将丢失数据。
PUT test/_settings
{
"index.routing.allocation.include._ip": "192.168.1.1",
"index.routing.allocation.exclude._ip": "192.168.1.2,192.168.1.3"
}
因此,如果您直接在test
查询192.168.1.1
索引,则可以确定192.168.1.1
与节点之间不会有任何聊天来完成您的请求。
如果您将查询发送到客户端节点或其他类型的负载均衡器节点,则保证您的请求直接路由到192.168.1.1
,因为群集将知道test
索引仅是在该主机上可用。
在单个主机上本地化索引并不是一个好习惯,就好像主机出现故障或损坏一样,您可以保证丢失数据。