Logstash高可用性部署

时间:2014-07-02 15:34:40

标签: linux logging logstash high-availability failover

我在一种模式下使用logstash,它从磁盘读取日志文件并放入ElasticSearch。

为高可用性(尤其是故障转移)部署logstash的最佳方法是什么?我可以使用主动/主动模式,其中两个logstash实例始终处于活动状态,而主动/被动模式,其中一个实例正在工作,另一个实例仅在第一个实例关闭时启动。

我特别询问了logstash而不是ElasticSearch。

3 个答案:

答案 0 :(得分:3)

看来,Logstash没有内置的HA选项,我们仍然使用Linux classic - Virtual IP。我正在考虑同样的topick,并且目前决定尝试以下选项(热/冷版本):

  • 使用Logstash作为索引器构建2个单独的服务器实例
  • 找到一种方法,同步Logstash索引器的.conf文件(rsync,git等)
  • 使用虚拟IP解决方案和Linux心跳,在服务器之间移动活动的虚拟IP或使用其他负载平衡解决方案(可以这样做)(例如,pfsense作为负载均衡器)
  • 每个Logstash索引器实例都有自己的REDIS实例,用于保留日志缓冲区,并且如果Logstash出现问题,可能允许从缓冲区移动日志。

以下是需要解决的问题:

  • Redis无法在HA主动/主动中运行,这会在实例切换期间或之后引入日志消息路由和查找问题。
  • 与主动/被动Logstash相同,当发生切换时 - 如何在此时间范围内丢失日志。

据我所知,主动/主动Logstash仅在考虑以下选项时可用:

  • 日志加倍。如果您将两个索引器节点都放在Logstash发货人的输出中。
  • 或者您必须提供逻辑机制来在Logstash索引器配置之外的条件下发送日志 - 例如弄明白,不要将相同的日志消息发送给两个索引器。

答案 1 :(得分:1)

您可以使用一个队列作为输入和索引过程之间的缓冲区。

将层与队列分开总是一件好事,因此如果elasticsearch崩溃,您的应用程序将不会受到影响。

答案 2 :(得分:0)

在这种情况下最好的方法是使用某种硬件平衡器,比如F5(如果你有一些)池,所以你定义了一个带有相应端口的VIP,然后你将该VIP与N IP相关联N个logstash主机的地址,这样你就可以从logstash或你需要运行的任何服务中获得任意数量的节点,然后应用循环算法并平衡连接。