突出的版本變化
(譯者批注:這一章譯者選擇翻譯5.5版本的變化,因為全文主要講解2.x版本,所以有必要了解高版本的新特性)
這一章主要討論版本之間的不同,特別是當你要從一個版本遷移數(shù)據(jù)到另一個版本的時候,你需要注意。
通常的規(guī)律:
- 跨越大版本遷移 —— 例如1.x到2.x —— 需要停集群升級。
- 小版本遷移 —— 例如1.x到1.y —— 需要滾動升級。
- 跨越不連續(xù)版本遷移 —— 例如 1.x到5.x —— 不支持
(譯者批注:建議日志類集群可以進行跨版本升級,業(yè)務類集群如果已經(jīng)投入大量使用,就先緩緩吧,數(shù)據(jù)同步又是一個很麻煩的過程,特別是不同業(yè)務要求又不同,牽扯到的人力成本比較高,升級的性價比不高??梢赃x擇搭建新集群接入新業(yè)務,老業(yè)務再有重構需求時一并升級)
詳細請看集群升級。
5.5版本變動
忽略隱藏文件夾
之前的版本會跳過plugin目錄下面的隱藏文件夾,這樣會導致?lián)p壞的插件安裝后不會被ES探查到,所以這個寬泛的特性被移除了。
跳過內(nèi)核參數(shù)設置
Elasticsearch在安裝的時候嘗試設置vm.max_map_count參數(shù)(譯者批注:譯者看了下2.2版本的啟動腳本確實有執(zhí)行sysctl -q -w vm.max_map_count=$MAX_MAP_COUNT),在某些系統(tǒng)下可能失敗。在早先的版本,ES接受一個ES_SKIP_SET_KERNEL_PARAMTERS參數(shù)來跳過內(nèi)核參數(shù)設置。從Elasticsearch5.5.0開始,取消這個參數(shù)以及相應的功能,可以通過systemd-sysctl操作來實現(xiàn)相同的效果。
RPM/DEB安裝包在/etc/elasticsearch下配置了 setgid
現(xiàn)在RPM/DEB安裝包中在/etc/elasticsearch里設置了 setgid,這樣任何在/etc/elasticsearch目錄下的文件或子目錄都屬于同一個組(root:elasticsearch)。主要是保證這個目錄下創(chuàng)建的文件都對elasticsearch用戶可讀。
獲取別名和獲取映射 API 返回404
之前的版本,在請求獲取別名 和get mapping 兩個api的時候,無論什么情況都不會返回404。在Elasticsearch5.5版本后,當獲取別名或獲取映射不存在的時候,返回404.
Java API改變
has_child,has_parent,paren_id等查詢都放到了 parent-join模塊。children聚合也放到了這個模塊下。parent-join模塊需要在TransportClient使用的時候加載?;蛘弋斠獎討B(tài)加載模塊時,使用PreBuiltTransportClient替代
5.4版本變動
Delete_By_Query API改變
Delete_By_Query的請求體必須有查詢條件,不包含請求體的Delete_By_Query在6.0.0是不合法的。
5.3版本變動
日志配置
此前的版本Elasticsearch暴露了一個系統(tǒng)參數(shù) es.logs,它包含了系統(tǒng)配置的日志絕對路徑,并且它的前綴用來表示各種日志文件名(主日志文件,過期日志和慢日志)。這個參數(shù)已經(jīng)被下面三個取代了:
-
es.logs.base_path:日志目錄絕對路徑 -
es.logs.cluster_name:默認的各種日志文件名前綴。 -
es.logs.node_name:如果文件名中需要包含節(jié)點名的話,在這里用。
es.logs參數(shù)已經(jīng)廢棄并將在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版本變動
啟動檢查系統(tǒng)調(diào)用
Elasticsearch自2.1.0版本開始試圖加入系統(tǒng)調(diào)用過濾器。在某些系統(tǒng)中,系統(tǒng)調(diào)用過濾器可能導致失敗。在早先的版本會加入waring日志記錄,但是會繼續(xù)執(zhí)行,可能用戶并不知道這個情況。從5.2.0版本開始加入啟動檢查系統(tǒng)調(diào)用,看是否成功。如果你啟動的時候因為這個檢查而出問題了,你需要檢查是需要修改配置中的系統(tǒng)調(diào)用過濾器,還是自擔后果去掉這個系統(tǒng)調(diào)用過濾器。
系統(tǒng)參數(shù)過濾器配置
簡單說就是bootstrap.seccomp這個參數(shù)被更名為: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 元數(shù)據(jù)字段改變
timestamp元字段的類型由java.lang.String改成了java.util.Date。
5.1版本變動
別名添加了和索引名幾乎相似的校驗規(guī)則
現(xiàn)在別名添加了和索引名幾乎相似的校驗規(guī)則。唯一不同的是別名允許使用大寫字母。意味著別名不允許使用如下規(guī)則:
- 以
_,-, 或+開頭 - 包含這些字符:#, , /, *, ?, ", <, >, |,
, - 超過100個UTF編碼字節(jié)
- 使用
.或..
5.1.0版本以前上述規(guī)則的別名還支持,但是現(xiàn)在不支持了。由于使用_aliases API 修改別名實際上是刪除別名再自動重新創(chuàng)建一個,修改別名如果非法也不再支持。
Log4j的依賴版本升級
Log4j的版本從2.6.2升級到2.7。如果你使用transport client,需要更新相應的Log4j版本
節(jié)點本地發(fā)現(xiàn)已經(jīng)移除
節(jié)點本地發(fā)現(xiàn)已經(jīng)移除。這種發(fā)現(xiàn)機制的實現(xiàn),用于內(nèi)部的tribe服務以及在同一個JVM環(huán)境下運行多個節(jié)點的測試。這意味著設置discovery.type為local啟動elasticsearch將會失敗。
UnicastHostsProvider 現(xiàn)在基于拉的模式
插件基于zen發(fā)現(xiàn)的UnicastHostsProvider現(xiàn)在采用拉的模式。實現(xiàn)DiscoveryPlugin類并覆蓋getZenHostsProviders方法?,F(xiàn)在也可以通過discovery.zen.hosts_provider配置 hosts_provider類型。
ZenPing和主節(jié)點選舉服務的可插拔特性取消
ZenPing還有選舉服務類都不支持可插拔了。有必要的話,要么自己實現(xiàn)發(fā)現(xiàn),要么擴展ZenDiscovery
onModule支持移除
之前通過Guice注入模塊的插件可以實現(xiàn)一個onModule方法。插件中所有自定義onModule方法的實現(xiàn)都被轉換成基于拉的插件。onModule這個hook被移除。
(譯者批注:源碼大概看了下,2.2版本中,節(jié)點啟動時先加載插件,然后讀取插件中的onModule方法并把plugin對應的module作為參數(shù)傳遞進去。這個方法并不是plugin類要求繼承的,而是一個約定)
索引的stats和節(jié)點的statsAPI中無法識別的參數(shù)
索引和節(jié)點的stats API允許查詢Elasticsearch中無法識別的一些指標。在之前的版本會默認接受這些不識別的參數(shù)(例如 transport)。在5.1.0中這個情況不再發(fā)生;不能識別的參數(shù)將導致請求失敗。5.0.0移除的這個特性在5.1.0以及之后的5.x系列會給出警告,但是6.0之后會和其他不識別的參數(shù)一樣,導致請求失敗。
5.0版本變動
這一張講解5.0的變動,當你遷移集群到這個版本時你要注意。
遷移插件
當你升級到Elasticsearch 5.0后,elasticsearch-migration插件(2.3以上的版本)會幫你發(fā)現(xiàn)需要解決的問題
5.0之前版本創(chuàng)建的索引
Elasticsearch5.0可以解析2.0之后創(chuàng)建的索引,但是2.0之前的索引無法識別,節(jié)點啟動會失敗。
初次啟動Elasticsearch 5.0,他將會自動重命名索引目錄,目錄命名由原來的索引名改成索引的UUID,