连接到NEST中的elasticsearch集群

时间:2013-07-11 14:31:53

标签: elasticsearch nest

假设我在群集中有几个弹性搜索机器:192.168.1.1,192.168.1.2和192.168.1.3

任何机器都可能宕机。看起来NEST不支持提供一系列IP来尝试连接。

那么我如何确保连接到Nest的任何可用机器?只是尝试打开一个连接,如果TryConnect不起作用,请尝试另一个?

3 个答案:

答案 0 :(得分:7)

您可以在应用程序服务器(例如Web服务器)上运行本地ES实例,并将其配置为负载均衡器:

  • 为此本地ES配置设置node.client: true(或node.master: falsenode.data: false),使其成为负载均衡器。这意味着ES不会成为主数据库,也不会包含数据
  • 配置它以加入群集(您的3个节点不需要知道此ES)
  • 配置NEST以使用本地ES作为您的搜索服务器

然后,此ES将成为您的群集的一部分,并将您的请求分发到合适的节点

如果您不想要“负载均衡器”,则必须在客户端手动检查以确定哪个节点处于活动状态。

答案 1 :(得分:0)

我会将其中一个节点设置为负载均衡器。这意味着您正在调用的URL应始终正常运行。

虽然如果增加副本数量,您可以通过URL调用任何节点,但仍然可以访问相同的数据。 ElasticSearch不关心您在群集中访问哪一个。因此,您可以在应用程序中构建自己的ips范围。

答案 2 :(得分:0)

由于节点数量很少,因此可以使用StaticConnectionPool

var uri1 = new Uri("192.168.1.1");
var uri2 = new Uri("192.168.1.2");
var uri3 = new Uri("192.168.1.3");
var uris = new List<Uri> { uri1, uri2, uri3 };
var connectionPool = new StaticConnectionPool(uris);
var connectionSettings = new ConnectionSettings(connectionPool); // <-- need to be reused
var client = new ElasticClient(connectionSettings);

要记住的重要一点是,在创建新的弹性客户端时,请重复使用相同的ConnectionSetting,因为elasticsearch缓存是基于ConnectionSetting的。 See this GitHub post

  

...在任何情况下,共享相同的ConnectionSettings都很重要   您实例化的任何弹性客户端上的实例。 ElasticClient可以   是单身人士,还是没有,只要每个实例共享相同   ConnectionSettings实例。

     

我们所有的缓存均基于ConnectionSettings,包括   序列化缓存。

     

还有一个ConnectionSettings拥有一个IConnectionPool和   您肯定要在请求之间重用IConnection。