Elasticsearch官檔翻譯——3 突出的版本變化

突出的版本變化

譯者批注:這一章譯者選擇翻譯5.5版本的變化,因為全文主要講解2.x版本,所以有必要了解高版本的新特性
這一章主要討論版本之間的不同,特別是當你要從一個版本遷移數據到另一個版本的時候,你需要注意。

通常的規律:

  • 跨越大版本遷移 —— 例如1.x到2.x —— 需要停集群升級。
  • 小版本遷移 —— 例如1.x到1.y —— 需要滾動升級。
  • 跨越不連續版本遷移 —— 例如 1.x到5.x —— 不支持
    譯者批注:建議日志類集群可以進行跨版本升級,業務類集群如果已經投入大量使用,就先緩緩吧,數據同步又是一個很麻煩的過程,特別是不同業務要求又不同,牽扯到的人力成本比較高,升級的性價比不高。可以選擇搭建新集群接入新業務,老業務再有重構需求時一并升級

詳細請看集群升級


5.5版本變動

忽略隱藏文件夾

之前的版本會跳過plugin目錄下面的隱藏文件夾,這樣會導致損壞的插件安裝后不會被ES探查到,所以這個寬泛的特性被移除了。

跳過內核參數設置

Elasticsearch在安裝的時候嘗試設置vm.max_map_count參數(譯者批注:譯者看了下2.2版本的啟動腳本確實有執行sysctl -q -w vm.max_map_count=$MAX_MAP_COUNT),在某些系統下可能失敗。在早先的版本,ES接受一個ES_SKIP_SET_KERNEL_PARAMTERS參數來跳過內核參數設置。從Elasticsearch5.5.0開始,取消這個參數以及相應的功能,可以通過systemd-sysctl操作來實現相同的效果。

RPM/DEB安裝包在/etc/elasticsearch下配置了 setgid

現在RPM/DEB安裝包中在/etc/elasticsearch里設置了 setgid,這樣任何在/etc/elasticsearch目錄下的文件或子目錄都屬于同一個組(root:elasticsearch)。主要是保證這個目錄下創建的文件都對elasticsearch用戶可讀。

獲取別名和獲取映射 API 返回404

之前的版本,在請求獲取別名 和get mapping 兩個api的時候,無論什么情況都不會返回404。在Elasticsearch5.5版本后,當獲取別名或獲取映射不存在的時候,返回404.

Java API改變

has_childhas_parentparen_id等查詢都放到了 parent-join模塊。children聚合也放到了這個模塊下。parent-join模塊需要在TransportClient使用的時候加載。或者當要動態加載模塊時,使用PreBuiltTransportClient替代


5.4版本變動

Delete_By_Query API改變

Delete_By_Query的請求體必須有查詢條件,不包含請求體的Delete_By_Query在6.0.0是不合法的。


5.3版本變動

日志配置

此前的版本Elasticsearch暴露了一個系統參數 es.logs,它包含了系統配置的日志絕對路徑,并且它的前綴用來表示各種日志文件名(主日志文件,過期日志和慢日志)。這個參數已經被下面三個取代了:

  • es.logs.base_path:日志目錄絕對路徑
  • es.logs.cluster_name:默認的各種日志文件名前綴。
  • es.logs.node_name:如果文件名中需要包含節點名的話,在這里用。
    es.logs參數已經廢棄并將在6.0.0版本移除。

Netty 3 被廢棄

Netty 3中的transport(transport.type=netty3)和Http(http.type=netty3)在6.0.0被廢棄

弱檢查的布爾值被廢棄

布爾值 除了false , “false” 和 true “true” 其他都被廢棄(譯者批注:2.2中有些配置支持使用 yes no)。REST API和映射配置中也廢棄了這種使用方式


5.2版本變動

啟動檢查系統調用

Elasticsearch自2.1.0版本開始試圖加入系統調用過濾器。在某些系統中,系統調用過濾器可能導致失敗。在早先的版本會加入waring日志記錄,但是會繼續執行,可能用戶并不知道這個情況。從5.2.0版本開始加入啟動檢查系統調用,看是否成功。如果你啟動的時候因為這個檢查而出問題了,你需要檢查是需要修改配置中的系統調用過濾器,還是自擔后果去掉這個系統調用過濾器。

系統參數過濾器配置

簡單說就是bootstrap.seccomp這個參數被更名為:bootstrap.system_call_filter。前者仍舊支持但是6.0版本會被移除。

Java API刪除了source方法的一些重寫

刪除了以下方法:

  • PutRepositoryRequest#source(XContentBuilder)
  • PutRepositoryRequest#source(String)
  • PutRepositoryRequest#source(byte[])
  • PutRepositoryRequest#source(byte[], int, int)
  • PutRepositoryRequest#source(BytesReference)
  • CreateSnapshotRequest#source(XContentBuilder)
  • CreateSnapshotRequest#source(String)
  • CreateSnapshotRequest#source(byte[])
  • CreateSnapshotRequest#source(byte[], int, int)
  • CreateSnapshotRequest#source(BytesReference)
  • RestoreSnapshotRequest#source(XContentBuilder)
  • RestoreSnapshotRequest#source(String)
  • RestoreSnapshotRequest#source(byte[])
  • RestoreSnapshotRequest#source(byte[], int, int)
  • RestoreSnapshotRequest#source(BytesReference)
  • RolloverRequest#source(BytesReference)
  • ShrinkRequest#source(BytesReference)
  • UpdateRequest#fromXContent(BytesReference)

_timestamp 元數據字段改變

timestamp元字段的類型由java.lang.String改成了java.util.Date

5.1版本變動

別名添加了和索引名幾乎相似的校驗規則

現在別名添加了和索引名幾乎相似的校驗規則。唯一不同的是別名允許使用大寫字母。意味著別名不允許使用如下規則:

  • _, -, 或 +開頭
  • 包含這些字符:#, , /, *, ?, ", <, >, |, ,
  • 超過100個UTF編碼字節
  • 使用 ...

5.1.0版本以前上述規則的別名還支持,但是現在不支持了。由于使用_aliases API 修改別名實際上是刪除別名再自動重新創建一個,修改別名如果非法也不再支持。

Log4j的依賴版本升級

Log4j的版本從2.6.2升級到2.7。如果你使用transport client,需要更新相應的Log4j版本

節點本地發現已經移除

節點本地發現已經移除。這種發現機制的實現,用于內部的tribe服務以及在同一個JVM環境下運行多個節點的測試。這意味著設置discovery.typelocal啟動elasticsearch將會失敗。

UnicastHostsProvider 現在基于拉的模式

插件基于zen發現的UnicastHostsProvider現在采用拉的模式。實現DiscoveryPlugin類并覆蓋getZenHostsProviders方法。現在也可以通過discovery.zen.hosts_provider配置 hosts_provider類型。

ZenPing和主節點選舉服務的可插拔特性取消

ZenPing還有選舉服務類都不支持可插拔了。有必要的話,要么自己實現發現,要么擴展ZenDiscovery

onModule支持移除

之前通過Guice注入模塊的插件可以實現一個onModule方法。插件中所有自定義onModule方法的實現都被轉換成基于拉的插件。onModule這個hook被移除。
譯者批注:源碼大概看了下,2.2版本中,節點啟動時先加載插件,然后讀取插件中的onModule方法并把plugin對應的module作為參數傳遞進去。這個方法并不是plugin類要求繼承的,而是一個約定

索引的stats和節點的statsAPI中無法識別的參數

索引和節點的stats API允許查詢Elasticsearch中無法識別的一些指標。在之前的版本會默認接受這些不識別的參數(例如 transport)。在5.1.0中這個情況不再發生;不能識別的參數將導致請求失敗。5.0.0移除的這個特性在5.1.0以及之后的5.x系列會給出警告,但是6.0之后會和其他不識別的參數一樣,導致請求失敗。


5.0版本變動

這一張講解5.0的變動,當你遷移集群到這個版本時你要注意。

遷移插件

當你升級到Elasticsearch 5.0后,elasticsearch-migration插件(2.3以上的版本)會幫你發現需要解決的問題

5.0之前版本創建的索引

Elasticsearch5.0可以解析2.0之后創建的索引,但是2.0之前的索引無法識別,節點啟動會失敗。

初次啟動Elasticsearch 5.0,他將會自動重命名索引目錄,目錄命名由原來的索引名改成索引的UUID,

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容