尝试使用Elasticsearch 6.0的滚动升级

这篇文章是 NIFTY Advent Calendar 2017 的第三天的文章。
第二天是 @hicka04 的”【Swift】想要摆脱MVC,所以学习了MVP”。

摘要

由于2017年11月14日的Elasticsearch 6.0 GA发布,我们现在可以使用”Rolling upgrades”功能来无需停机 (无需重新启动集群) 升级Elasticsearch版本。因此,我希望根据文档的指引来检查步骤。

环境

我在两台 AWS 的 EC2 实例上安装了 Elasticsearch 5.6,并进行了集群配置。

[ec2-user@host1 ~]$ curl localhost:9200
{
  "name" : "node-1",
  "cluster_name" : "rolling-upgrades-test",
  "cluster_uuid" : "YI3En589S4yo-dLmZX57mg",
  "version" : {
    "number" : "5.6.4",
    "build_hash" : "8bbedf5",
    "build_date" : "2017-10-31T18:55:38.105Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}
[ec2-user@host2 ~]$ curl localhost:9200
{
  "name" : "node-2",
  "cluster_name" : "rolling-upgrades-test",
  "cluster_uuid" : "YI3En589S4yo-dLmZX57mg",
  "version" : {
    "number" : "5.6.4",
    "build_hash" : "8bbedf5",
    "build_date" : "2017-10-31T18:55:38.105Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}

操作步驟

禁用Shard的重新分配。

在将节点停止的同时保持分片重新分配有效的情况下,节点停止前会禁用分片重新分配,以防止发生无谓的IO操作,将该节点所持有的分片移动到集群内的其他节点上。

[ec2-user@host1 ~]$ curl -X PUT localhost:9200/_cluster/settings -d'
{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}'

停止不必要的索引。

根据需要,通过使用Flush API来停止不必要的索引以加快重新组建节点时的恢复速度。

[ec2-user@host1 ~]$ curl -X POST localhost:9200/_flush/synced

停止节点

停止具体哪个要升级的 Elasticsearch。
(停止方式因环境而异)

[ec2-user@host2 ~]$ sudo service elasticsearch stop
Stopping elasticsearch:                                    [  OK  ]

升级Elasticsearch版本

这次将从5.6升级到6.0。
(根据环境不同,升级方法会有所差异)

[ec2-user@host2 ~]$ sudo yum update elasticsearch

5. 更新插件

如果您已安装插件,可以使用elasticsearch-plugin脚本进行更新。

[ec2-user@host2 elasticsearch]$ sudo bin/elasticsearch-plugin 

6. 启动节点

启动升级后的Elasticsearch。
(启动方式因环境而异)

[ec2-user@host2 ~]$ sudo service elasticsearch start
Starting elasticsearch:                                    [  OK  ]

当您启动后检查版本时,您会发现已经可以更新到6.0版本。

[ec2-user@host2 ~]$ curl localhost:9200
{
  "name" : "node-2",
  "cluster_name" : "rolling-upgrades-test",
  "cluster_uuid" : "YI3En589S4yo-dLmZX57mg",
  "version" : {
    "number" : "6.0.0",
    "build_hash" : "8f0685b",
    "build_date" : "2017-11-10T18:41:22.859Z",
    "build_snapshot" : false,
    "lucene_version" : "7.0.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

7. 启用碎片重新分配。

启用在步骤1中禁用的碎片的重新配置。

[ec2-user@host1 ~]$ curl -X PUT localhost:9200/_cluster/settings -d'
> {
>   "transient": {
>     "cluster.routing.allocation.enable": "all"
>   }
> }'

确认已启动的节点已被加入集群中。

确认通过Cluster Health API或其他方式更新的节点已成功加入集群。

[ec2-user@host1 ~]$ curl localhost:9200/_cluster/health?pretty
{
  "cluster_name" : "rolling-upgrades-test",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 2,
  "number_of_data_nodes" : 2,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

请在每个节点上重复步骤1至8。

只需要在簇内重复执行与节点数量相等的工作。


以上是确认滚动升级步骤的全部内容。
实际执行版本升级时,可能需要处理版本之间的差异等问题,所以请在进行操作时随时查看日志并进行相应的工作。

明天是@kanishionori先生的文章。期待吧!

广告
将在 10 秒后关闭
bannerAds