从以前的 elasticsearch 版本 (5.4 -> 5.6) 中清理碎片

Clean up shards from previous elasticsearch version (5.4 -> 5.6)

滚动升级

根据文档 here,我将 elasticsearch 集群从 5.4 版升级到 5.6 版。

此过程导致每个升级节点上的磁盘使用量翻倍。

以下文档让我假设一旦整个集群升级,这个问题就会得到纠正:

During a rolling upgrade the cluster will continue to operate as normal. Any new functionality will be disabled or work in a backward compatible manner until all nodes of the cluster have been upgraded. Once the upgrade is completed and all nodes are on the new version, the new functionality will become operational. Once that has happened, it is practically impossible to go back to operating in a backward compatible mode. To protect against such a scenario, nodes from the previous major version (e.g. 5.x) will not be allowed to join a cluster where all nodes are of a higher major version (e.g. 6.x).

磁盘使用量翻倍

然而,即使集群中的每个节点都是相同的版本 (5.6.16),保存以前数据的每个节点都会继续保存该数据,并且集群不会清理它。这意味着磁盘使用率实际上翻了一番,我不得不修改 high/low watermark 值以允许集群继续运行。

我不太了解elasticsearch数据的内部结构,不知道哪些目录需要删除,哪些目录应该保留。也许甚至有一种内置的方法来强制清理。

来自数据目录的小例子:

$ ls nodes/0/indices/
-AW6zio6TuynJ_KQlEooVA  66O4EMc0R3KYclO50uRQ1g  CuiQlU_dTDOVkJbV9oQIGw  J_YG4HlBRYeBWp0wc0L_Nw  Qw-3eYh6TlGpHCys2GBdwg  YRrQono1QCWxXahJIT0hfg  eK0di6WSRnumTUHiqAQ3gw  m3EDPIOqS9mx22k6hQH2yA  umpdodA2QR6de8VcuR3qag
-ItvQ5StRECde2zvdV-Ucg  6FAopyspSLu8NGEUekOwhg  CzqDKml3QCG16g0zxgnG7g  JgbfkCt5RDGmpFowxnYIiA  QwerlX68SaqhEzg-Ml3i0Q  YcbvcSuxQtaNIXcxU6mpJQ  eOww30E7R96ymTqhQyNYng  mAspUVrETLuAP6zapD8IVQ  uoMcWwmfTeCTKXchAyVt-w
-K59oANFSmmopPt2r5yjYg  6GWAf6ITT4e_9HNwjYlk3g  D3Co7Ht1SROlEGCHcSn67Q  JrSXkDEETfS8XHe-PH-9qw  RB6LxG9uT_eW8Z28Zh4b9A  YjHJMVZjRK-8Coya8eBMOA  eVtK6_HrTA-1yAfDEnKZnw  mG_NCeR3RhSQO6tLRYmJGg  upHl_Bu7R0eFZUxU5qrDrA
-WevSR0jRZKTz7CH5LWKOQ  6L6MDgW0QCWLn0lr6NwRUA  DEB0-vP7TMmyBK8M18sJ2A  JtXS6yJPQwGKhC0qAulNBQ  RKcX1apNTsyod54oLYnJ0A  YuLmawshTn-WCPPD8Hs8YA  ecrbXDCdSleo6Y2_p6SDeg  mHOr6_WMT4ODxBGh1e5MCw  uq9BlreyTk-xXM-HTsmesw
-jjL_BjFTFycO83wVW4L6Q  6LD31skNSbGVgscF784PnQ  DG1ESvHdS1y8AzbbqhML6Q  Ju6ks-W5Q4yX0GggfO3hQw  RKcvj2kwRe6OBspnZBFrjA  Yuu9nCSfTjCqEwcznS1Oqw  eq6QwBMaTI2fik81gyD6gQ  mKXR0uWtTjenFFkq0GVP8g  utoyyWn3SY23rKrg8sCwpg
-t4M8dc9TZiKYZI7Mia8hQ  6Rw8yFOhSvqveDoWf19F5A  DOJaKVahTvm7G79RIfpGhQ  K-a5KU8hT-WSQw1cPAWXhw  RPhKOIYNRoKQYHPauPpYzQ  Z0GgoShfR2iGidFa-fXhzQ  f8qpQPOARdeqHcXH3OFBqQ  mM_43p8mRsOCosUH2C3iUg  uv40fHgkQtCFShozCAmtMQ
04JbWXE4S-66wTVQZ6587Q  6XjX8cP1QEuCxalGCmq9bQ  Dc-lhr15Qz6sCEdw4smRGQ  KAHIxqC2Sm-8Cu-fo4P54A  Rd6gkNVkTxitNvGPtmJ8jw  Z6c02QTLRz6nrfVEjMQr3g  fPJyBMlVQQ2j5oyvyYQKNw  mUioLd-hTq2CbRpQ6BMfxw  vC3erzIcT1Ked9vGmCGRFw

如何清理由 5.4 版本创建的旧分片?

I do not understand the internals of elasticsearch's data well enough to know what directories need to be deleted and which ones should be kept.

它们都应该保留。 切勿手动更改数据目录的内容。

5.4分片和5.6分片没有区别,所以这里不需要额外的手动清理。您引用的文档适用于跨主要版本的升级(例如 5.x 到 6.x),不适用于次要升级(例如 5.4 到 5.6)。如果分片在重启期间被分配给新节点,那么 Elasticsearch 将临时制作一些副本的额外副本,但当这些分片的健康状况为 green 和 none 他们正在搬迁。

如果您的集群运行状况为绿色并且不包含重新定位的分片但磁盘使用率没有下降到您期望的水平,那么我建议您使用统计 API(例如 GET /index/_stats?level=shards to try and work out which indices are consuming all the space. If you need help analysing these stats then please start a conversation on the discussion forum 因为它很难保存就是这种对话。

我无法确定处理磁盘使用量翻倍的根本原因或机制,因此我 re-indexed 在大约 7.x 的过程中将整个集群转换为新的 7.x 集群一个月。完成后,我将旧集群从它占用的服务器中删除,并将这些服务器添加到新集群,新集群会自动开始重新平衡。

这花了很多时间,但最终成为一条有效的路线。通过这样做,我没有看到异常的磁盘使用情况。