Elastic Stack 5.0升級踩坑記
先說結論,做好測試,謹慎操作。
? ES5簡介
這次是個大升級,統一了全家桶版本號,升級了Lucene,發布了對於官方來說非常重要的X-Pack,等等。詳見 Elastic Stack 5.0.0 Released、Breaking changes in 5.0、What"s new in Elasticsearch 5.0。
關於Elastic Search本體,一些值得關注的:
1. Lucene升級到了6.2,搜索方面會有巨大的性能提升。
2. 優化Indexing過程,性能會更加穩定。3. 新增Ingest Node,用於數據轉換,相當於Elastic Search里內置了一個Logstash。或許有比bulk更好的Indexing性能,有待測試。
? 踩到的坑
1. Copy2.X的elasticsearch.yml到5.0里,大量報錯
1)踩了個"node settings must not contain any index level settings",報錯提示是所有index配置(例如 index.mapper.dynamic)都需要在ES啟動之後通過介面來改。
2)script開頭的配置項也沒了。
3)一些配置項的名字改了,例如 bootstrap.mlockall 改成了 bootstrap.memory_lock。
建議直接在5.0的elasticsearch.yml上面改配置。
另外,./config/ 裡面新增了 jvm.options 和 log4j2.properties,取消了logging.yml。關於內存的配置可以直接在 jvm.options 裡面設,不需要折騰環境變數了。
2. 啟動報錯,提示調高JVM線程數限制
bootstrap checks failed
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解法:
vi /etc/sysctl.conf
vm.max_map_count=262144 #添加這一行
3. 搜索報錯,默認Scripting語言從groovy改成了painless
這個坑藏得好深,讓我困惑了一段時間(都怪我沒有看完What"s New就去折騰升級)...最後改query的lang欄位為painless就過了。
感覺painless的可讀性要好一點。之前寫Function Score Query的時候發現自己想表達的跟實際出來的結果不一樣(也可能是文檔的問題)。
4. 搜索報錯,部分DSL語言格式變了
發現2.X的query在5.0里跑不通了...
最後發現Filter的DSL語言格式改了。
把我坑慘了...
? 關於X-Pack
X-Pack是一套新的擴展。
一直以來,Elastic Search團隊提供的付費插件與服務都感覺不痛不癢。新發布的X-Pack把所有付費痛點打包到一起了,包括許可權控制、更好的數據可視化系統、經常被提出的報表系統等,我認為是Elastic Search商業化非常重要的一步(另一步是Elastic Cloud)。
X-Pack的License(可註冊1年免費License)由於全家桶都被打包到一起了,安裝上更方便,操作上也非常有整體感。
UI徹底重做了一次,沒有那麼山寨了。
一個問題是,跟Marvel插件一樣,每天還是會生產一個很?大的Index,還是得要有個腳本盯著來刪。
? 性能對比
1. 同樣的機器(硬體、數量)及集群結構(Master Node、Data Node)
2. 同樣的索引結構和分片數量
3. 基本一致的查詢語句(ES5語法有所變化,所以query沒有完全一致)
4. 同樣的數據量
5. 同樣的流量
ES5集群的 CPU Usage 約為ES2集群的 3/4
ES5集群的 Search Latency 約為ES2集群的 2/3
另外,發現ES5的index/update性能也優於ES2,有待量化評測。
? 總結
由於Lucene升級帶來的巨大性能提升,我認為ES5非常值得升級。
但是,
做好測試,謹慎操作!
做好測試,謹慎操作!
做好測試,謹慎操作!
推薦閱讀:
※elasticsearch狀態顯示為red,該如何修復索引呢?
※學習elasticsearch必須先學習lucene嗎?
※elasticsearch,我用ik分詞,搜索"寶馬2012",怎樣只查出即包含「寶馬」又包含「2012」的文章?
※Elasticsearch到底能玩多大的數據量?
TAG:Elasticsearch | 搜索引擎 |