突出的版本變化
(譯者批注:這一章譯者選擇翻譯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_child
,has_parent
,paren_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.type
為local
啟動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,