全部產品
Search
文件中心

Elasticsearch:使用apack外掛程式的物理複製功能

更新時間:Jun 30, 2024

apack外掛程式是Elasticsearch團隊自研的外掛程式,支援物理複製和向量檢索功能,本文僅介紹物理複製功能。物理複製功能適用於索引有副本、寫入資料量大、對資料寫入後可見度延遲要求不高的情境,例如日誌情境、時序分析情境等,可以大幅度降低CPU開銷,提升寫入效能。

前提條件

  • 建立Elasticsearch執行個體,版本為6.7.0且核心版本為1.2.0及以上,或7.10.0。本文以Elasticsearch 6.7.0為例介紹。建立執行個體的方法,請參見建立Elasticsearch執行個體
  • 安裝apack外掛程式。
    目前僅6.7.0和7.10.0版本的Elasticsearch執行個體支援apack外掛程式。當6.7.0執行個體的核心版本為1.2.0以下時,需升級核心版本後使用該外掛程式;當執行個體的核心版本為1.2.0及以上時,系統預設已安裝apack外掛程式,不可卸載。您可在外掛程式配置頁面查看。
    說明 apack外掛程式安裝後,您既可以使用物理複製功能,也可以使用向量檢索功能。本文僅介紹物理複製功能的使用方法,向量檢索功能的使用方法請參見使用向量檢索外掛程式(aliyun-knn)

背景資訊

物理複製功能的基本原理為: Elasticsearch中索引的主分區和副本分區(以下簡稱主副分區)之間的同步原理預設與原生Elasticsearch一樣,即請求先寫入主分區,再由主分區同步給副本分區,此時主副本分區都會寫索引檔案及translog。開啟物理複製功能後,Elasticsearch主分區寫入機制與原生Elasticsearch一樣,既寫索引檔案也寫translog,而副本分區唯寫translog以保證資料的可靠性和一致性。主分區在每次refresh時,通過網路將增量的索引檔案拷貝到副本分區,在主副分區分配可見度延遲為毫秒層級的情況下,大幅度提高了叢集的寫入效能。

物理複製功能的效能測試資訊如下:
  • 測試環境
    • 機器配置:資料節點8核32 GB*5 + 2 TB SSD雲端硬碟。
    • 資料集:官方Rally內建的nyc_taxis(74 GB)。
    • 索引配置:使用預設配置(5個主分區,1個副本分區)。
  • 測試結果
    產品寫入速度(doc/s)
    原生Elasticsearch 6.7.0127305
    Elasticsearch 6.7.0,並開啟物理複製功能184592
  • 結論

    與原生Elasticsearch相比,Elasticsearch在開啟了物理複製功能後,寫入效能提升大於45%。

說明 本文中的命令均可在Kibana控制台中執行,詳情請參見登入Kibana控制台

注意事項

  • apack外掛程式的物理複製功能作用於索引。對於外掛程式安裝前建立的索引,預設未開啟,使用時需要先開啟。對於外掛程式安裝後建立的索引,預設開啟。
  • Elasticsearch支援將已開啟物理複製功能的索引切回到原生模式(主副分區都會寫索引和translog),但需要先關閉該索引。
  • 在為原生模式的索引開啟物理複製功能前,需要先關閉該索引,並將副本數設定為0。

開啟物理複製功能

在建立索引時,通過settings開啟物理複製功能。
PUT index-1
{
"settings": {
 "index.replication.type" : "segment"
 }
}

關閉物理複製功能

  1. 關閉索引。
    POST index-1/_close
  2. 更新索引settings,關閉物理複製功能。
    PUT index-1/_settings
    {
    "index.replication.type" : null
    }
  3. 開啟索引。
    POST index-1/_open

為已有索引開啟物理複製功能

  1. 將索引的副本數設定為0。
    PUT index-1/_settings
    {
      "index.number_of_replicas": 0
    }
  2. 關閉索引。
    POST index-1/_close
  3. 更新索引settings,開啟物理複製功能。
    PUT index-1/_settings
    {
    "index.replication.type" : "segment"
    }
  4. 開啟索引。
    POST  index-1/_open
  5. 將索引的副本數設定為1。
    PUT index-1/_settings
    {
      "index.number_of_replicas": 1
    }