进阶-第105_es生产集群版本升级之基于集群整体重启策略进行2.x到5.x的大版本升级

 

滚动升级策略,集群,集群里面有多个节点,一个节点一个节点的重启和升级

 

如果是大版本之间的升级,集群重启策略,要先将整个集群全部停掉,如果采取滚动升级策略的话,可能导致说,一个集群内,有些节点是es 5.5,有些节点是es 2.4.3,这样的话是可能会有问题的

 

升级的过程,其实是跟之前的一模一样的

 

es在进行重大版本升级的时候,一般都需要采取full cluster restart的策略,重启整个集群来进行升级。rolling upgrade在重大版本升级的时候是不合适的。

 

执行一个full cluster restart升级的过程如下:

 

我们先停掉之前的es 5.5,删除所有相关的目录,然后安装一个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时,可能导致部分replica shard死掉了,此时shard allocation机制会立即在其他节点上分配一些replica shard过去。如果是停止node导致primary shard死掉了,会将其他node上的replica shard提升为primary shard,同理会给其复制足够的replica shard,保持replica副本数量。但是这回导致大量的IO开销。我们首先得先禁止这个机制:

 

curl -XPUT 'http://localhost:9200/_cluster/settings?pretty' -d '

{

  "persistent": {

    "cluster.routing.allocation.enable": "none"

  }

}'

 

(2)执行一次flush操作

 

我们最好是停止接受新的index写入操作,并且执行一次flush操作,确保数据都fsync到磁盘上。这样的话,确保没有数据停留在内存和WAL日志中。shard recovery的时间就会很短。

 

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

 

此时,最好是执行synced flush操作,因为我们最好是确保说flush操作成功了,再执行下面的操作

 

如果flush操作报错了,那么可以反复多执行几次

 

(3)关闭和升级所有的node

 

如果是将es 2.x版本升级到es 5.x版本,唯一的区别就在这里开始了,先将整个集群中所有的节点全部停止

 

将最新版本的es解压缩替代之前的es安装目录之前,一定要记得先将plugins做个备份

 

将集群上所有node上的es服务都给停止,然后按照rolling upgrade中的步骤对集群中所有的node进行升级

 

将所有的节点全部停掉,将所有的node全部替换为最新版本的es安装目录

 

(4)升级plugin

 

最新版的es解压开来以后,就可以看看,可以去做一个plugin的升级

 

es plugin的版本是跟es版本相关联的,因此必须使用elasticsearch-plugin脚本来安装最新的plugin版本

 

(5)启动cluster集群

 

如果我们有专门的master节点的话,就是那些将node.master设置为true的节点(默认都是true,都有能力作为master节点),而且node.data设置为false,那么就先将master node启动。等待master node组建成一个cluster之后,这些master node中会选举一个正式的master node出来。可以在log中检查master的选举。

 

只要minimum number of master-eligible nodes数量的node发现了彼此,他们就会组成一个cluster,并且选举出来一个master。从这时开始,可以监控到加入cluster的node。

 

依次将所有的node重新启动起来

 

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

 

如果是将es 2.x升级到es 5.x,记得将log4j.properties拷贝到你外部的目录中去,而且还要重新做目录的权限的更改

 

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

 

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

 

(6)等待cluster状态变成yellow

 

只要每个ndoe都加入了cluster,就会开始对primary shard进行receover过程,就是看有没有数据在WAL日志中的,给恢复到内存里。刚开始的话,_cat/health请求会反馈集群状态是red,这意味着不是所有的primary shard都被分配了。

 

只要每个node发现了自己本地的shard之后,集群status就会变成yellow,意味着所有的primary shard都被发现了,但是并不是所有的replica shard都被分配了。

 

(7)重新启用allocation

 

直到所有的node都加入了集群,再重新启用shard allocation,可以让master将replica分配给那些本地已经有replica shard的node上。

 

curl -XPUT 'http://localhost:9200/_cluster/settings?pretty' -d '

{

  "persistent": {

    "cluster.routing.allocation.enable": "all"

  }

}'

 

cluster这个时候就会开始将replica shard分配给data node。此时可以恢复index和search操作,不过最好还是等待replica shard全部分配完之后,再去恢复读写操作。

 

我们可以通过下面的api来监控这个过程

 

GET _cat/health

 

GET _cat/recovery

 

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

猜你喜欢

转载自blog.csdn.net/qq_35524586/article/details/88774879