【发布时间】:2016-10-26 14:55:23
【问题描述】:
假设我有一个服务,并且 elasticsearch 在多个主机上运行。如果我确保每个主机都包含完整的弹性搜索索引(通过具有副本> = numberOfHosts-1),是否可以确保特定主机上的服务调用仅在同一主机的索引中搜索(即没有弹性搜索调用跨主机)?
【问题讨论】:
标签: search elasticsearch lucene information-retrieval
假设我有一个服务,并且 elasticsearch 在多个主机上运行。如果我确保每个主机都包含完整的弹性搜索索引(通过具有副本> = numberOfHosts-1),是否可以确保特定主机上的服务调用仅在同一主机的索引中搜索(即没有弹性搜索调用跨主机)?
【问题讨论】:
标签: search elasticsearch lucene information-retrieval
使用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"
}
因此,如果您直接在192.168.1.1 上查询test 索引,则可以确定192.168.1.1 和满足您请求的节点之间不会有任何对话。
如果您将查询发送到客户端节点或其他类型的负载平衡器节点,则保证您的请求会直接路由到 192.168.1.1,因为集群会知道 test 索引仅在该主机上可用.
在单个主机上本地化索引不是一个好习惯,就好像该主机发生故障或损坏一样,您肯定会丢失数据。
【讨论】: