尝试使用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先生的文章。期待吧!