设计从 6.8 到 7.16 的 ElasticSearch 迁移以及应用程序部署

Designing ElasticSearch Migration from 6.8 to 7.16 along with App Deployment

我有一个使用 ElasticSearch 6.8 的 Spring 引导应用程序,我想将它迁移到 Elasticsearch 7.16 以尽可能减少停机时间。我可以rolling update but the problem with migration is that when I migrate my ES cluster from version 6 to 7, some features in my application fails because of breaking changes (for example total hit response change)

我还在一个单独的分支中将我的 ElasticSearch 客户端升级到版本 7,我也可以部署它,但是那个客户端不能使用 ES 版本 6。所以我不能先发布应用程序然后再进行 ES 迁移.我想同时进行应用程序部署和 ES 迁移,停机几个小时,但万一出现问题,回滚可能会花费太多时间(我们在 PROD 中有 >10TB 的数据)。

我仍然找不到解决这个问题的好方法。我正在考虑仅将 ES 数据节点迁移到 7.16 版本并将主节点保留在 6.8 中。然后进行应用程序部署和迁移 ElasticSearch 主节点以及少量停机时间。有没有人试过这样做?我的不同版本(6.8 和 7.16)的 ElasticSearch 集群的 运行 数据和主节点会导致问题吗?

非常感谢任何帮助/建议

可以通过在您的客户端代码中使用查询字符串参数 rest_total_hits_as_int=true 来缓解 breaking change you mention,以便继续获得版本 6 中的总命中数(在相同的 [=22= 中提到) ] 你分享了)。

运行 不支持不同版本的主节点和数据节点,我不会冒险尝试。如果您有一个可以测试此升级过程的临时环境,那就更好了。

由于 6.8 客户端与 7.16 集群兼容,您可以将这一小部分添加到 6.8 客户端代码中,然后您应该能够将集群升级到 7.16。

当你的 ES 服务器升级后,你可以升级你的应用程序代码以使用 7.16 客户端,你会很好。

与往常一样升级,因为一旦开始就无法还原,您应该先在测试环境中进行测试。