2016-11-04 39 views
0

我对我的elasticsearch集群如何处理流量稍有困惑。我在集群中连接了几个EC2实例。现在,在我的应用程序中,我将它设置为通过其中一个实例的ip连接到集群。我知道这个节点可以与群集中的所有其他节点进行连接并正确转发,但是这个特定的实例是否会因为所有流量最初都在该节点上被引导而不会负担过重?我是否必须使用负载均衡器,然后将应用程序指向该应用程序,或者我对此没有正确理解?是否有必要在Amazon EC2上运行Elasticsearch群集使用负载平衡器?

谢谢! :)

回答

0

我认为你的问题和思考是合法的。根据我的经验,客户可以了解多个实例并分配负载而不需要负载均衡器。

红宝石看到这个客户端配置例如:Multiple nodes and retry on falure

+0

这很有道理 - 如果在客户端中,我创建了一个elasticsearch节点数组,然后使用随机数生成器随机选择节点,那么您怎么看? 例如: [node1,node2,node3] 随机数发生器选择2,然后客户端点击node2这个特定的搜索? –

+0

听起来不错,但我希望有一个客户端库为你做。此外,一个好的客户端库也会重试在另一个节点上失败的查询,甚至更多的情况下,如果节点一直失败,则将该节点从数组中删除一段时间。 – Andreyy

0

不,不是必要的。 Elasticsearch已经通过在集群中的不同节点之间分割和复制搜索索引数据来为您处理负载平衡。

参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html#_shards_amp_replicas

可能重复:Is using a load balancer with ElasticSearch unnecessary?

+0

感谢您的回答,但我已经知道这种行为。我关心的是,我正在使用集群中单个节点的IP地址来处理所有请求 - 因此,当该节点将适当地引导请求时,它仍然是一个节点正在被我的所有请求直接命中,因此一个节点必须处理所有的流量吞吐量。 –

+0

如果您使用的是“TransportClient”,则可以使用多个IP地址为集群中的节点配置它,并且它将循环轮询请求。也可以使用'client.transport.sniff = true',在这种情况下,数据节点将被自动发现,并且请求将在它们之间进行负载平衡。 – ck1