滚动升级
按照此处的文档,我将 elasticsearch 集群从 5.4 版升级到 5.6 版。
此过程导致每个升级节点上的磁盘使用量翻倍。
以下文档使我假设在整个群集升级后将纠正此问题:
在滚动升级期间,群集将继续正常运行。任何新功能都将被禁用或以向后兼容的方式工作,直到群集的所有节点都已升级。升级完成并且所有节点都位于新版本上后,新功能将开始运行。一旦发生这种情况,几乎不可能回到向后兼容模式下运行。为了防止这种情况,将不允许以前主要版本(例如 5.x(的节点加入所有节点均为更高主要版本(例如 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 版创建的旧分片?
我对 elasticsearch 数据的内部结构不够了解,不知道哪些目录需要删除,哪些目录应该保留。
它们都应该保留。切勿手动更改数据目录的内容。
5.4 分片和 5.6 分片之间没有区别,因此这里不需要额外的手动清理。您引用的文档涉及跨主要版本(例如 5.x 到 6.x(的升级,不适用于次要升级(例如 5.4 到 5.6(。如果在重启期间将分片分配给新节点,那么 Elasticsearch 将暂时创建一些副本的额外副本,但是当这些分片的运行状况green
并且它们都没有重新定位时,它将清理不再需要的任何旧副本。
如果您的集群运行状况为绿色并且不包含重新定位的分片,但磁盘使用率尚未下降到您的预期,那么我建议您使用统计信息 API(例如GET /index/_stats?level=shards
尝试找出哪些索引占用了所有空间。如果您需要帮助分析这些统计数据,请在论坛上开始对话,因为在这里进行这种对话很尴尬。
我无法确定处理磁盘使用量翻倍的根本原因或机制,因此我在大约一个月的时间里将整个集群重新索引到一个新的 7.x 集群中。完成后,我从它占用的服务器中删除了旧集群,并将这些服务器添加到新集群中,新集群会自动开始重新平衡。
这花了相当长的时间,但最终成为一条有效的路线。这样做我没有看到异常的磁盘使用情况。