我已經建立了一個由三個彈性搜索節點組成的集羣,所有符合條件的master都是最低要求的2。我已經配置了一個客戶端,然後使用下面的代碼使用帶有靜態連接池的低級客戶端進行批量上傳。如何處理使用低級別.net Elasticsearch客戶端的羣集節點的突然丟失?
我試圖測試的是場景的實時故障,即有三個節點可用的啓動客戶端,然後隨機丟棄一個(關閉虛擬機),但保持兩個。但是,我沒有看到我期望的行爲,它不斷嘗試死亡節點。實際上,它在移動到下一個節點之前似乎需要大約六十秒。
我所期望的是做一個失敗的嘗試,並將該節點標記爲可能已經死亡,但至少移動到下一個節點。奇怪的是,如果我在我的列表中只有三個節點中的兩個節點啓動我的應用程序,或者如果我在測試期間停止彈性搜索服務,而不是斷電,則會出現這種情況。
是否有正確的方法來處理這種情況,並儘快將其移動到下一個可用節點?或者在嘗試重新發布之前,我需要在我的代碼中延期多達六十秒?
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);
然後我已經包裹在一個嘗試捕捉,我再試最多的前三次我認爲這是一個失敗的嘗試,並恢復到一個錯誤的策略下。
ElasticsearchResponse<Stream> indexResponse = _lowLevelClient.Bulk<Stream>(data);
任何投入表示讚賞,
謝謝。
您是否試圖用SniffingConnectionPool替換StaticConnectionPool(一個嗅探連接池允許自己在運行時重新調用)?請參考:https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/connection-pooling.html –