108_es生產(chǎn)集群版本升級之基于集群整體重啟策略進(jìn)行2.x到5.x的大版本升級

108_es生產(chǎn)集群版本升級之基于集群整體重啟策略進(jìn)行2.x到5.x的大版本升級

滾動升級策略,集群,集群里面有多個節(jié)點,一個節(jié)點一個節(jié)點的重啟和升級

如果是大版本之間的升級,集群重啟策略,要先將整個集群全部停掉,如果采取滾動升級策略的話,可能導(dǎo)致說,一個集群內(nèi),有些節(jié)點是es 5.5,有些節(jié)點是es 2.4.3,這樣的話是可能會有問題的

升級的過程,其實是跟之前的一模一樣的

es在進(jìn)行重大版本升級的時候,一般都需要采取full cluster restart的策略,重啟整個集群來進(jìn)行升級。rolling upgrade在重大版本升級的時候是不合適的。

執(zhí)行一個full cluster restart升級的過程如下:

我們先停掉之前的es 5.5,刪除所有相關(guān)的目錄,然后安裝一個es 2.4.3,再將其升級到es 5.5

chown -R elasticsearch /usr/local/elasticsearch
chown -R elasticsearch /var/log/elasticsearch
chown -R elasticsearch /var/data/elasticsearch
chown -R elasticsearch /etc/elasticsearch

su elasticsearch

elasticsearch -d -Dpath.conf=/etc/elasticsearch
kill -SIGTERM 15516

curl -XPUT 'http://localhost:9200/forum/article/1?pretty' -d '
{
"title": "first article",
"content": "this is my first article"
}'

(1)禁止shard allocation

我們停止一個node時,可能導(dǎo)致部分replica shard死掉了,此時shard allocation機(jī)制會立即在其他節(jié)點上分配一些replica shard過去。如果是停止node導(dǎo)致primary shard死掉了,會將其他node上的replica shard提升為primary shard,同理會給其復(fù)制足夠的replica shard,保持replica副本數(shù)量。但是這回導(dǎo)致大量的IO開銷。我們首先得先禁止這個機(jī)制:

curl -XPUT 'http://localhost:9200/_cluster/settings?pretty' -d '
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}'

(2)執(zhí)行一次flush操作

我們最好是停止接受新的index寫入操作,并且執(zhí)行一次flush操作,確保數(shù)據(jù)都fsync到磁盤上。這樣的話,確保沒有數(shù)據(jù)停留在內(nèi)存和WAL日志中。shard recovery的時間就會很短。

curl -XPOST 'http://localhost:9200/_flush/synced?pretty'

此時,最好是執(zhí)行synced flush操作,因為我們最好是確保說flush操作成功了,再執(zhí)行下面的操作

如果flush操作報錯了,那么可以反復(fù)多執(zhí)行幾次

(3)關(guān)閉和升級所有的node

如果是將es 2.x版本升級到es 5.x版本,唯一的區(qū)別就在這里開始了,先將整個集群中所有的節(jié)點全部停止

將最新版本的es解壓縮替代之前的es安裝目錄之前,一定要記得先將plugins做個備份

將集群上所有node上的es服務(wù)都給停止,然后按照rolling upgrade中的步驟對集群中所有的node進(jìn)行升級

將所有的節(jié)點全部停掉,將所有的node全部替換為最新版本的es安裝目錄

(4)升級plugin

最新版的es解壓開來以后,就可以看看,可以去做一個plugin的升級

es plugin的版本是跟es版本相關(guān)聯(lián)的,因此必須使用elasticsearch-plugin腳本來安裝最新的plugin版本

(5)啟動cluster集群

如果我們有專門的master節(jié)點的話,就是那些將node.master設(shè)置為true的節(jié)點(默認(rèn)都是true,都有能力作為master節(jié)點),而且node.data設(shè)置為false,那么就先將master node啟動。等待master node組建成一個cluster之后,這些master node中會選舉一個正式的master node出來??梢栽趌og中檢查master的選舉。

只要minimum number of master-eligible nodes數(shù)量的node發(fā)現(xiàn)了彼此,他們就會組成一個cluster,并且選舉出來一個master。從這時開始,可以監(jiān)控到加入cluster的node。

依次將所有的node重新啟動起來

elasticsearch -d -Epath.conf=/etc/elasticsearch

如果是將es 2.x升級到es 5.x,記得將log4j.properties拷貝到你外部的目錄中去,而且還要重新做目錄的權(quán)限的更改

curl -XGET 'http://localhost:9200/_cat/health?pretty'

curl -XGET 'http://localhost:9200/_cat/nodes?pretty'

(6)等待cluster狀態(tài)變成yellow

只要每個ndoe都加入了cluster,就會開始對primary shard進(jìn)行receover過程,就是看有沒有數(shù)據(jù)在WAL日志中的,給恢復(fù)到內(nèi)存里。剛開始的話,_cat/health請求會反饋集群狀態(tài)是red,這意味著不是所有的primary shard都被分配了。

只要每個node發(fā)現(xiàn)了自己本地的shard之后,集群status就會變成yellow,意味著所有的primary shard都被發(fā)現(xiàn)了,但是并不是所有的replica shard都被分配了。

(7)重新啟用allocation

直到所有的node都加入了集群,再重新啟用shard allocation,可以讓master將replica分配給那些本地已經(jīng)有replica shard的node上。

curl -XPUT 'http://localhost:9200/_cluster/settings?pretty' -d '
{
"persistent": {
"cluster.routing.allocation.enable": "all"
}
}'

cluster這個時候就會開始將replica shard分配給data node。此時可以恢復(fù)index和search操作,不過最好還是等待replica shard全部分配完之后,再去恢復(fù)讀寫操作。

我們可以通過下面的api來監(jiān)控這個過程

GET _cat/health

GET _cat/recovery

如果_cat/health中的status列變成了green,那么所有的primary和replica shard都被成功分配了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容