升级前重新索引
Elasticsearch可以读取上一个主要版本中创建的索引,旧的索引必须重新索引或删除。Elasticsearch 6.x可以使用Elasticsearch 5.x中创建的索引,但不能使用Elasticsearch 2.x或之前创建的索引,Elasticsearch 5.x可以使用Elasticsearch 2.x中创建的索引,但不能使用1.x或之前创建的索引。
如果存在不兼容的索引,Elasticsearch节点将无法启动。
要升级包含在2.x中创建的索引的Elasticsearch 5.x集群,必须在升级到6.x之前重新索引或删除它们。
要升级一个运行2.x的Elasticsearch集群,有两个选项:
- 执行完整的集群重启升级到5.6,重新索引2.x索引,然后执行滚动升级到6.x,如果你的Elasticsearch 2.x集群包含在2.x之前创建的索引,那么你必须在升级到5.6之前删除或重新索引它们,有关从2.x升级到5.6的更多信息,请参阅Elasticsearch 5.6参考资料中的升级Elasticsearch。
- 创建一个新的6.x集群,从远程重新索引,直接从2.x集群导入索引。
要升级Elasticsearch 1.x集群,有两个选项:
- 执行完整的集群重启升级到Elasticsearch 2.4.x,并重新索引或删除1.x索引,然后,执行完整的集群重启升级到5.6,重新索引或删除2.x索引,最后,执行滚动升级到6.x。有关从1.x升级到2.4的更多信息,请参见Elasticsearch 2.4参考资料中的升级Elasticsearch,有关从2.4升级到5.6的更多信息,请参阅Elasticsearch 5.6参考资料中的升级Elasticsearch。
- 创建一个新的6.x集群,从远程重新索引,直接从1.x集群导入索引。
升级基于时间的索引
如果你使用基于时间的索引,你可能不需要将之前的5.x索引向前推进到6.x,基于时间的索引中的数据通常会随着时间的推移而变得不那么有用,并且随着它们的时间期限超过你的保留期而被删除。
除非你的保留期非常长,否则你可以等待升级到6.x,直到你所有的前5.x索引都被删除。
就地重新索引
用reindex API手动重新索引你的旧索引:
- 创建一个新索引并从旧索引复制映射和设置。
- 将
refresh_interval
设置为-1
,并且number_of_replicas
设置为0
,以实现高效的重新索引。 - 使用Reindex API将旧索引中的所有文档重新索引到新索引。
- 将
refresh_interval
和number_of_replicas
重置为旧索引中使用的值。 - 等待索引状态变为
green
。 -
在单个更新别名请求中:
- 删除旧索引。
- 向新索引添加具有旧索引名称的别名。
- 将旧索引上存在的任何别名添加到新索引中。
迁移援助和升级工具
X-Pack 5.6提供了迁移援助和升级工具,简化了重新索引和升级到6.x,这些工具在X-Pack试用版和基本许可中是免费的,你可以使用它们来升级,无论X-Pack是不是你的Elastic Stack的一个常规部分,有关更多信息,请参阅http://www.elastic.co/guide/en/elastic-stack/6.4/upgrading-elastic-stack.html。
从远程集群重新索引
你可以使用reindex从远程将索引从旧集群迁移到新的6.x集群,这使你可以在不中断服务的情况下将之前的5.6集群迁移到6.x。
Elasticsearch提供向后兼容支持,可以将以前的主要版本的索引升级到当前的主要版本,跳过主要版本意味着你必须自己解决所有向后兼容性问题。
要迁移你的索引:
-
在旧集群旁边设置一个新的6.x集群,通过将旧集群添加到
elasticsearch.yml
中的reindex.remote.whitelist
,使其能够访问旧集群:reindex.remote.whitelist: oldhost:9200
新的集群不必完全扩展,当你迁移索引并将负载转移到新集群时,你可以向新集群添加节点,并从旧集群中删除节点。
-
对于需要迁移到6.x集群的每个索引:
- 用适当的映射和设置在6.x中创建一个新的索引,将
refresh_interval
设置为-1
,并将number_of_replicas
设置为0
,以便更快地重新索引。 -
从远程重新索引以将文档从旧索引拉到新的6.x索引。
POST _reindex { "source": { "remote": { "host": "http://oldhost:9200", "username": "user", "password": "pass" }, "index": "source", "query": { "match": { "test": "data" } } }, "dest": { "index": "dest" } }
- 如果通过将
wait_for_completion
设置为false
在后台运行重新索引作业,那么重新索引请求将返回一个task_id
,你可以使用task API用来监控重新索引作业的进度:GET _tasks/TASK_ID
。 - 当重新索引作业完成时,将
refresh_interval
和number_of_replicas
设置为所需的值(默认设置是30s
和1
)。 - 一旦复制完成,新索引的状态为
green
,你就可以删除旧索引。
- 用适当的映射和设置在6.x中创建一个新的索引,将
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。