我将 elasticsearch 用作 Logstash 堆栈的一部分,其中堆栈的所有组件都安装在同一台服务器上。
这样做的目的是向开发人员公开应用程序日志,以便进行调试。我不需要保留创建的索引。我有一个 cron 作业,用于删除超过 7 天的索引。
原始日志保存在其他地方,以备我们需要历史分析。
我遇到的问题是,由于未分配的分片,elasticsearch 不断进入红色健康状态。我研究了各种方法来恢复这种情况,但最终我还是不得不删除原始索引文件并重新启动服务。
这真的很痛苦,因为当开发人员需要访问时,elasticsearch 总是处于瘫痪状态。
我觉得除了删除有问题的索引之外,没有更简单的方法来恢复 elasticsearch。我已将 elasticsearch 配置为使用单个节点,无副本,不进行任何网络发现,但每隔几天,它就会崩溃。
我在浪费时间尝试在单台服务器上运行 elasticsearch 吗?它是否总是会因为未分配的分片而不断崩溃?考虑到我的用途,实际上必须部署集群似乎有点小题大做。
注意:我在 Amazon EC2 中运行此堆栈
答案1
经过多次尝试后我发现,在单个服务器上运行 elasticsearch 的最佳方法是更改默认设置:
index.number_of_replicas: 1
到
index.number_of_replicas: 0
如果有 0 个副本,elasticsearch 将永远不会尝试将分片分配给除其自身之外的任何其他“副本”,从而消除未分配分片和损坏索引的问题。
我的完整(稳定)独立、非默认的 elasticsearch 配置是:
node.max_local_storage_nodes: 1
index.number_of_replicas: 0
请注意,这仅仅是一个日志读取器设置的配置,而不是全面的生产设置。
答案2
不确定为什么你会得到未分配的分片,尤其是使用 Logstash 时。我使用馆长管理 elasticsearch。我的 ELK 堆栈在单个 VM 中运行(目前),因此它非常缺乏功能,但它仍然可以运行。我不得不对 elasticsearch 本身进行彻底的调整,以针对 VM 进行优化。对我来说,关键组件是 ES_HEAP_SIZE 和 MAX_OPEN_FILES。