ES-PHP向ES批量添加、查詢文檔報 No alive nodes found in your cluster

轉自: https://blog.csdn.net/itfootball/article/details/53637238php

 

問題描述
爲了提升保存數據到es消耗的時間,採起積攢到3000條文檔的時候才保存到ES中,以前一直沒有問題,昨天新上了幾個log服務器後,常常會發現保存失敗報以下錯誤:node

 

No alive nodes found in your cluster

  

首先我要說這個錯誤真坑啊,以這個關鍵字搜索問題,花了兩天也沒解決,後來無心中FQ搜google,網後翻了好幾頁看到上面的參考文章,才知道,原來真正的錯誤信息隱藏在ES-PHP的Connection類中,代碼以下:服務器

 

添加var_dump($response['error']->getMessage());一行代碼來輸出一下錯誤信息,錯誤信息以下:curl

cURL error 55: Send failure: Broken pipe

 

首先以爲是curl的bug,因此我升級到了最新版本,發現問題還在,而後我調整3000條文檔一保存改成500條,發現保存是沒問題的,後來我懷疑是curl的body體是否是對大小有限制,可是通過詢問獲得的回覆是沒有這方面的限制,可是組長給我了一個提示,curl沒有限制,多是接收方有限制,這個提示給我了新方向,查了一下es果真有配置,配置項爲http.max_content_length,默認爲100M,而後我嘗試了發送不一樣大小的數據看反應。elasticsearch

第一次:141M,報錯
第二次: 40M,保存成功
而後我跟es維護人員確認一下http.max_content_length確實是100M,由此問題定位成功,緣由也知道了ui

解決方法
1.一次性保存500條數據,確保一次性存儲數據量不超過100M
2.由原來的VIP(一個host)改成幾點IP(多host),這樣作的好處是能夠重試屢次。

this

 

查詢問題:google

 

  最近使用  php cli模式 須要不斷查詢es內容, 也發現一直 : url

No alive nodes found in your cluster

  根據上文的辦法 設置斷點後,出現錯誤以下:spa

CURL ERROR: Recv failure: Connection reset by peer

  當時想就是鏈接的問題, 可能存在鏈接複用上面存在問題, 查閱了下文檔,在使用 es的client部分添加以下代碼

<?php

 while(true)
{

    //....
    $params = [];

    //關鍵部分
    if (!$this->client->ping()) {
        $hosts = array($this->elasticsearch_host);
        $this->client = ClientBuilder::create()->setHosts($hosts)->setSSLVerification(false)->build();
    }

     $result = $this->client->search($params);
    //.....
}

  搞定。

相關文章
相關標籤/搜索