如何解决我的 OpenSearch Service 域中的存储空间不足问题?
我想解决我的 Amazon OpenSearch Service 域中的存储空间不足问题。
解决方法
您的 OpenSearch Service 域有必须遵守的存储空间要求。如果您的域存储空间不足,则可能会收到“ClusterBlockException”错误。
要解决存储空间不足的问题,请执行以下一项或多项操作。
检查分片是否不平衡
不平衡的分片(磁盘空间偏斜)会导致某些节点的存储空间不足。要解决此问题,请在所有节点间均匀分配分片。
要检查集群中每个节点有多少可用存储空间,请运行以下命令:
curl -XGET "aos_endpoint/_cat/allocation?v"
**注意:**将 aos_endpoint 替换为 OpenSearch Service 控制台中列出的端点。
输出示例:
shards | disk.indices | disk.used | disk.avail | disk.total | disk.percent | host | ip | node 8 | 989.4kb | 25.9gb | 32.4gb | 58.4gb | 44 | 192.0.2.0 | 192.0.2.3 | node1 8 | 962.4kb | 25.9gb | 32.4gb | 58.4gb | 44 | 192.0.2.1 | 192.0.2.4 | node2
在输出中,您可以查看每个节点的磁盘空间指标。OpenSearch Service 在每个 Amazon Elastic Compute Cloud (Amazon EC2) 实例上预留 20 GiB 或 20% 的可用存储空间用于内部操作。前面的 cat/allocation 输出不包括预留存储空间。要查看预留和总数据存储空间,请查看 Amazon CloudWatch 中的 FreeStorageSpace OpenSearch Service 指标。
**注意:**由于 cat/allocation 不包括预留数据,因此该值始终低于您在 OpenSearch Service 控制台中看到的存储空间。
增加您的域的 Amazon EBS 卷的大小
如果您的域使用 Amazon Elastic Block Store (Amazon EBS) 卷进行存储,请增加 EBS 卷的大小。
如果您无法增加 EBS 卷的大小,请执行以下一项或多项操作来扩展集群:
- 增加数据节点的 EC2 实例的大小。
- 添加更多节点以更好地分配负载。
**注意:**如果您使用 Amazon EC2 I3 实例进行数据存储,请向集群添加节点或纵向扩展您的实例类型。当您扩展实例时,可能会导致蓝绿部署。
删除未使用的索引
要减少存储在域中的数据量,请删除未使用的索引或文档,优化旧索引或减少域的副本数量。如果集群的磁盘使用量已经达到最大值,则必须扩展 EBS 卷或节点。
**注意:**如果减少域的副本数量,则容错能力会降低。最佳实践是为每个索引至少配置一个副本。
首先,在您的 Amazon Simple Storage Service (Amazon S3) 存储桶中创建不需要的索引的备份。您可以使用 OpenSearch Service 创建的自动快照来恢复您的实例。然后,从 OpenSearch Service 集群中删除这些索引以释放磁盘空间。
最佳做法是同时创建手动快照。在创建手动备份之前,必须创建手动快照存储库。
要检查索引的创建日期,请运行以下命令:
GET _cat/indices?h=h,s,i,id,p,r,dc,dd,ss,creation.date.string&s=creation.date.string:desc
要删除单个索引,请运行以下命令:
DELETE index-name
**注意:**将 index-name 替换为索引名称。
要删除多个索引,请运行以下命令:
DELETE index-pattern
**注意:**将 index-pattern 替换为您的索引模式。
使用 ISM 解决存储空间不足问题
使用索引状态管理 (ISM) 轮换 OpenSearch Service 中的索引。借助 ISM,您可以定义自定义管理策略来缓解磁盘空间不足等问题。例如,使用 ISM 策略根据索引大小等条件自动删除索引。然后,当现有索引满足定义的条件时,使用 rollover 操作将目标移动到新索引。
以下 ISM 策略示例会在 50 分钟后删除索引:
PUT _plugins/_ism/policies/delete_ism_policy { "policy": { "policy_id": "delete_ism_policy", "description": "A simple default policy that deletes old unused indexes", "last_updated_time": 1658834661281, "schema_version": 13, "error_notification": null, "default_state": "example_hot_state", "states": [ { "name": "example_hot_state", "actions": [], "transitions": [ { "state_name": "delete", "conditions": { "min_index_age": "50m" } } ] }, { "name": "delete", "actions": [ { "delete": {} } ], "transitions": [] } ], "ism_template": [ { "index_patterns": [ "sample*" ], "priority": 100, "last_updated_time": 1658834436349 } ] } }
**注意:**前面的策略将附加到您添加到策略中的索引模式的所有索引。
要将 ISM 策略附加到索引,请运行以下命令:
POST _plugins/_ism/add/your-index-* { "policy_id": "your_policy_id" }
**注意:**将 your-index-* 替换为您的索引或索引模式,将 your_policy_id 替换为您的策略 ID。
有关详细信息,请参阅如何使用 ISM 来管理 OpenSearch Service 存储空间不足问题?
使用 CloudWatch 警报来监控存储
要监控集群中的可用存储空间量,请使用 FreeStorageSpace 指标。要在存储空间不足时接收通知,请为 FreeStorageSpace 创建 CloudWatch 警报。
有关详细信息,请参阅针对 OpenSearch Service 的建议 CloudWatch 警报。

