概括
簡述
升級(jí)分為Elasticsearch server升級(jí)和Elasticsearch client api升級(jí)
為什么要遷移
當(dāng)前團(tuán)隊(duì)內(nèi)多個(gè)業(yè)務(wù)方公用一套ES集群后室,容易被影響,重要業(yè)務(wù)應(yīng)該獨(dú)自搭建一套集群
遷移的優(yōu)勢:
降低業(yè)務(wù)耦合性,加強(qiáng)不同業(yè)務(wù)隔離烁设;
豐富的資源提供更好的服務(wù)支撐汰蓉;
為什么選擇ES2.3
在1.X系列之上泛源,ES2.X算是開啟了又一個(gè)重要的里程碑究珊,文檔的展示樣式也體現(xiàn)了該版本的重要性婴氮,當(dāng)然了這只是冰山一角只洒;
下邊是增強(qiáng)說明(下邊兩幅圖說明了同一個(gè)觀點(diǎn):更優(yōu)秀的功能集成在了2.X版本上):
附上地址:https://www.elastic.co/blog/release-we-have新功能
我們既然決定了遷移许帐,那就一起升級(jí)到優(yōu)秀的版本,2.3.3是當(dāng)時(shí)最新的版本,算是比較穩(wěn)定的版本毕谴,看他最近一次提交是5.17成畦;
遷移的效果如何
整個(gè)系統(tǒng)服務(wù)數(shù)據(jù)召回接口
這個(gè)效果是ES Server在基本上沒怎么調(diào)優(yōu)的情況下的效果,之后會(huì)一遍觀察涝开,一遍調(diào)優(yōu)循帐,找出適合自己服務(wù)的配置;
ES升級(jí)方案
升級(jí)策略
搭建自己業(yè)務(wù)獨(dú)立的ES集群(2.3.3)
API更新?lián)Q代
配置文件
根據(jù)自己的需要進(jìn)行處理
插件
1 head
2 ik
3 http-auth
4 monitor
監(jiān)控
監(jiān)控方案:通過rest api獲取數(shù)據(jù)進(jìn)行監(jiān)控
監(jiān)控效果:falcon 畫圖
異同
https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes-2.3.html
2.0比1.7的變化
其中紅色部分是這次遷移過程中遇到需要解決的問題舀武,帶箭頭的是ES Server變化的相關(guān)部分拄养,不帶箭頭的是代碼層面需要變化的部分;
其中银舱,代碼改動(dòng)部分最大的是Query DSL changes;
2.1的變化
search changes:search type的count和scan過期了瘪匿;
2.2的變化
2.3的變化
比較少,摘一個(gè)
如何同步遷移時(shí)的新需求
從feature上新開一個(gè)branch 寻馏,每次feature增加新功能棋弥,上線之后,立馬同步到新的branch操软,時(shí)時(shí)保證同步性嘁锯;
遷移流程
1 ?搭建一套新的ES2.3.3集群;
2 ?全量寫入數(shù)據(jù)索引聂薪,觀察ES寫入是否正常家乘,修改出現(xiàn)的問題,直至索引寫入OK藏澳;
3 ?上線每天全量刷數(shù)據(jù)到索引的服務(wù)仁锯,觀察兩天,索引創(chuàng)建過程及結(jié)果正常翔悠;
4 ?此時(shí)線上有一套1.7的刷索引服務(wù)和讀索引服務(wù)业崖,還有一套ES2.3刷索引服務(wù)野芒,此時(shí)ES2.3增量索引也正常進(jìn)行;
5 ?將搭建好的ES2.3備份集群上線双炕,收集數(shù)據(jù)服務(wù)接入該備份集群狞悲,通過雙寫的方式保證數(shù)據(jù)正常;
6 ?在3妇斤、4摇锋、5進(jìn)行期間,在stage環(huán)境上部署ES2.3的搜索服務(wù)站超,通過這段時(shí)間線下的點(diǎn)擊來發(fā)現(xiàn)問題荸恕,修復(fù)直至搜索和1.7結(jié)果一致;
7 ?原有服務(wù)4臺(tái)Server死相,增加一臺(tái)Server融求,發(fā)ES2.3API端的分支(該分支請求ES2.3索引),通過OCTO將該臺(tái)server流量調(diào)至1/50算撮,通過觀察錯(cuò)誤日志和監(jiān)控圖表生宛,直至無問題;(此時(shí)有問題钮惠,通過OCTO的禁用茅糜,可以瞬間恢復(fù))
8 ?繼續(xù)放開流量,一邊放流量一遍觀察日志和監(jiān)控素挽,直到1/5,沒問題狸驳,然后發(fā)新加的3臺(tái)機(jī)器预明,直至放入1/2流量,繼續(xù)觀察耙箍,無問題后撰糠,通過OCTO禁用原來ES1.7的API端而不是直接下掉服務(wù)(這樣即使有問題,可以通過OCTO的禁用瞬間恢復(fù))辩昆;PS:這個(gè)觀察的時(shí)間還是蠻長的阅酪,幾個(gè)小時(shí)吧
9 ?觀察一段時(shí)間沒什么問題,隨后增加少量代碼汁针,實(shí)現(xiàn)一鍵切換的功能术辐,驗(yàn)證、上線施无,完全上線之后辉词,一鍵切換到備份集群,沒什么問題猾骡,再切回來瑞躺;
10 ?觀察整個(gè)周末線上服務(wù)的一個(gè)運(yùn)行情況敷搪,基本無大礙(有一個(gè)GC的問題,已經(jīng)整理到需要解決的問題里邊)幢哨,然后將數(shù)據(jù)收集服務(wù)里邊的一些定時(shí)任務(wù)遷移到ES2.3的收集服務(wù)里邊赡勘,上線;
11 ?截止到上周末為止捞镰,升級(jí)狮含、遷移基本完成,原有集群任務(wù)還在跑曼振,考慮再跑這周几迄,下周跑幾天,沒有問題的話冰评,做一下善后處理映胁,下掉對(duì)ES1.7的完全引用,收拾收拾代碼甲雅,開始ES2.3的業(yè)務(wù)之旅解孙;
ES集群宕機(jī)方案
索引
采用雙寫的機(jī)制,保證當(dāng)前使用索引和備份索引保持一致抛人;
搜索
采用ZK配置弛姜,一鍵切換使用集群;