突出的版本變化
(譯者批注:這一章譯者選擇翻譯5.5版本的變化幔亥,因為全文主要講解2.x版本怕轿,所以有必要了解高版本的新特性)
這一章主要討論版本之間的不同,特別是當(dāng)你要從一個版本遷移數(shù)據(jù)到另一個版本的時候,你需要注意脚翘。
通常的規(guī)律:
- 跨越大版本遷移 —— 例如1.x到2.x —— 需要停集群升級。
- 小版本遷移 —— 例如1.x到1.y —— 需要滾動升級销钝。
- 跨越不連續(xù)版本遷移 —— 例如 1.x到5.x —— 不支持
(譯者批注:建議日志類集群可以進行跨版本升級厕吉,業(yè)務(wù)類集群如果已經(jīng)投入大量使用酱固,就先緩緩吧,數(shù)據(jù)同步又是一個很麻煩的過程头朱,特別是不同業(yè)務(wù)要求又不同运悲,牽扯到的人力成本比較高,升級的性價比不高项钮“嗝校可以選擇搭建新集群接入新業(yè)務(wù),老業(yè)務(wù)再有重構(gòu)需求時一并升級)
詳細(xì)請看集群升級烁巫。
5.5版本變動
忽略隱藏文件夾
之前的版本會跳過plugin目錄下面的隱藏文件夾署隘,這樣會導(dǎo)致?lián)p壞的插件安裝后不會被ES探查到,所以這個寬泛的特性被移除了程拭。
跳過內(nèi)核參數(shù)設(shè)置
Elasticsearch在安裝的時候嘗試設(shè)置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ù)設(shè)置。從Elasticsearch5.5.0開始亦歉,取消這個參數(shù)以及相應(yīng)的功能恤浪,可以通過systemd-sysctl
操作來實現(xiàn)相同的效果。
RPM/DEB安裝包在/etc/elasticsearch
下配置了 setgid
現(xiàn)在RPM/DEB安裝包中在/etc/elasticsearch
里設(shè)置了 setgid
肴楷,這樣任何在/etc/elasticsearch
目錄下的文件或子目錄都屬于同一個組(root:elasticsearch
)水由。主要是保證這個目錄下創(chuàng)建的文件都對elasticsearch
用戶可讀。
獲取別名和獲取映射 API 返回404
之前的版本珍坊,在請求獲取別名 和get mapping 兩個api的時候昔园,無論什么情況都不會返回404臭家。在Elasticsearch5.5版本后,當(dāng)獲取別名或獲取映射不存在的時候鞠值,返回404.
Java API改變
has_child
,has_parent
渗钉,paren_id
等查詢都放到了 parent-join模塊彤恶。children
聚合也放到了這個模塊下钞钙。parent-join模塊需要在TransportClient
使用的時候加載∩耄或者當(dāng)要動態(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
:默認(rèn)的各種日志文件名前綴。 -
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)用過濾器可能導(dǎo)致失敗嗤瞎。在早先的版本會加入waring日志記錄墙歪,但是會繼續(xù)執(zhí)行,可能用戶并不知道這個情況贝奇。從5.2.0版本開始加入啟動檢查系統(tǒng)調(diào)用虹菲,看是否成功。如果你啟動的時候因為這個檢查而出問題了掉瞳,你需要檢查是需要修改配置中的系統(tǒng)調(diào)用過濾器毕源,還是自擔(dān)后果去掉這個系統(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跋炕,需要更新相應(yīng)的Log4j版本
節(jié)點本地發(fā)現(xiàn)已經(jīng)移除
節(jié)點本地發(fā)現(xiàn)已經(jīng)移除。這種發(fā)現(xiàn)機制的實現(xiàn)土居,用于內(nèi)部的tribe服務(wù)以及在同一個JVM環(huán)境下運行多個節(jié)點的測試枣购。這意味著設(shè)置discovery.type
為local
啟動elasticsearch將會失敗嬉探。
UnicastHostsProvider 現(xiàn)在基于拉的模式
插件基于zen發(fā)現(xiàn)的UnicastHostsProvider現(xiàn)在采用拉的模式。實現(xiàn)DiscoveryPlugin
類并覆蓋getZenHostsProviders
方法∶奕Γ現(xiàn)在也可以通過discovery.zen.hosts_provider
配置 hosts_provider類型涩堤。
ZenPing和主節(jié)點選舉服務(wù)的可插拔特性取消
ZenPing還有選舉服務(wù)類都不支持可插拔了。有必要的話分瘾,要么自己實現(xiàn)發(fā)現(xiàn)胎围,要么擴展ZenDiscovery
onModule支持移除
之前通過Guice注入模塊的插件可以實現(xiàn)一個onModule
方法。插件中所有自定義onModule
方法的實現(xiàn)都被轉(zhuǎn)換成基于拉的插件德召。onModule這個hook被移除白魂。
(譯者批注:源碼大概看了下,2.2版本中上岗,節(jié)點啟動時先加載插件福荸,然后讀取插件中的onModule
方法并把plugin對應(yīng)的module作為參數(shù)傳遞進去。這個方法并不是plugin類要求繼承的肴掷,而是一個約定)
索引的stats和節(jié)點的statsAPI中無法識別的參數(shù)
索引和節(jié)點的stats API允許查詢Elasticsearch中無法識別的一些指標(biāo)敬锐。在之前的版本會默認(rèn)接受這些不識別的參數(shù)(例如 transport
)。在5.1.0中這個情況不再發(fā)生呆瞻;不能識別的參數(shù)將導(dǎo)致請求失敗台夺。5.0.0移除的這個特性在5.1.0以及之后的5.x系列會給出警告,但是6.0之后會和其他不識別的參數(shù)一樣痴脾,導(dǎo)致請求失敗颤介。
5.0版本變動
這一張講解5.0的變動,當(dāng)你遷移集群到這個版本時你要注意赞赖。
遷移插件
當(dāng)你升級到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,