elasticsearch - 如何使用低级.net Elasticsearch客户端处理群集节点的突然丢失?

标签 elasticsearch nest

我已经建立了一个由三个 flex 搜索节点组成的集群,所有这些节点都符合资格,最低要求为2个。我已经配置了一个客户端,然后使用下面的代码使用具有静态连接池的低级客户端批量上传。

我要测试的是实时故障转移方案,即以三个可用节点启动客户端,然后随机删除一个(关闭虚拟机),但保持两个正常。但是我没有看到我期望的行为,它一直在尝试死节点。实际上,它似乎需要大约60秒才能移至下一个节点。

我希望它能做的是一次失败的尝试,并将该节点标记为可能已死,但至少要移至下一个节点。奇怪的是,如果我仅使用列表中三个可用节点中的两个来启动应用程序,或者只是在测试过程中停止了 flex 搜索服务而不是断电时,就会得到这种行为。

是否有正确的方法来处理这种情况并使它尽快移至下一个可用节点?还是在重新发布之前我需要在代码中退后长达60秒?

var nodes = new[]
        {
            new Node(new Uri("http://172.16.2.10:9200")),
            new Node(new Uri("http://172.16.2.11:9200")),
            new Node(new Uri("http://172.16.2.12:9200"))
        };

        var connectionPool = new StaticConnectionPool(nodes);

        var settings = new ConnectionConfiguration(connectionPool)
            .PingTimeout(TimeSpan.FromSeconds(10))
            .RequestTimeout(TimeSpan.FromSeconds(20))
            .ThrowExceptions()
            .MaximumRetries(3);

        _lowLevelClient = new ElasticLowLevelClient(settings);

接下来,我将以下内容包装在try catch中,在我认为尝试失败并恢复为错误策略之前,我最多重试3次。
ElasticsearchResponse<Stream> indexResponse = _lowLevelClient.Bulk<Stream>(data);

任何输入表示赞赏,

谢谢。

最佳答案

客户端的测试包括the API conventions documentation is generated从故障转移方案的测试。具体来说,请看retryfailover文档

使用StaticConnectionPool,可以向其发出请求的节点是静态的,并且从不刷新以反射(reflect)可能会加入并离开集群的节点,但是,如果返回错误响应,它们将被标记为死亡,并将被取出用于在可配置的死区上执行请求的旋转 Angular ,由连接设置上的DeadTimeoutMaxDeadTimeout控制。

响应上的审核跟踪应提供给定请求发生的时间线,这最容易通过response.DebugInformation看到。作为Tests项目的一部分的Virtual Clustering测试工具(an example)可能有助于确定所遵循行为的正确设置。

关于elasticsearch - 如何使用低级.net Elasticsearch客户端处理群集节点的突然丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46732833/

相关文章:

c# - 如何在 Elasticsearch NEST中对字段的重要性进行评分?

elasticsearch - bool 查询中的多个应该和必须

scala - 从Scala中的 Elasticsearch 检索数据/值

html - 从HTML搜索和查看Elasticsearch结果

elasticsearch - 我无法读取 Logstash 中的拆分字段

elasticsearch - 在logstash中创建季度索引

c# - AggregationContainer与AggregationDescriptor

Elasticsearch - 配置没有分词器的小写分析器

elasticsearch - 在NEST 2.3.3中(由NEST 1.6.2升级)替换了TermsExecution。

c# - NEST Elasticsearch :FilterInputs术语和术语之间的区别?