2

问题来自:https ://groups.google.com/forum/#!topic/logstash-users/cYv8ULhHeE0

通过比较下面的 logstash 横向扩展策略,如果流量/cpu 负载均衡,tcp 负载均衡器具有最佳性能。但是,由于 logstash-forwarder <-> logstash tcp 连接的性质,似乎很难一直平衡流量。任何人都有更好的想法来使logstash节点之间的流量/cpu负载更加平衡?感谢您的建议:)

<我的场景>

  • 10+个服务节点,配备logstash-forwarder,将日志转发到中央logstash节点(集群)
  • 每个服务节点的日志平均吞吐量,吞吐量日分布,日志类型的过滤复杂度变化很大
    • 日志平均吞吐量:例如 service_1:0.5k 事件/秒;service_2:5k 事件/秒
    • 吞吐量日分布:例如service_1的高峰在早上,service_2的高峰在晚上
    • 日志类型的过滤复杂度:通过消耗100%单个logstash节点的CPU,service_1的日志类型可以处理300个事件/s,而service_2的日志类型是1500个事件/s

< TCP 负载均衡器 >

由于 tcp 连接是 logstash-forwarder 和 logstash 之间的持久性,这意味着最终 tcp 连接量是通过最小连接、最小负载平衡还是分布在所有 logstash 节点上。它不保证流量/cpu 负载在所有 logstash 节点之间保持平衡。根据我的场景,每个 tcp 连接的流量每天平均变化,随着时间的推移,它的事件复杂性。所以在更糟糕的情况下,比方说,logstash_1 和 logstash_2 都有 10 个 tcp 连接,但由于 logstash_1 的连接包含更高的流量、更复杂的事件,logstash_1 的 cpu 负载可能比 logstash_2 多 3 倍。

< 手动将 logstash-forwarders 分配给 logstash >

可能会面临与 TCP 负载均衡器相同的情况,因为我们可以计划根据历史每日平均流量分配负载,但它会随着时间的推移而变化,当然没有 HA。

<消息队列>

架构为:带有logstash-forwarder的服务节点->队列器:logstash到rabbitmq->索引器:从rabbitmq到ElasticSearch的logstash

  • 对于所有节点,大约 30% 的 CPU 开销用于向队列代理发送消息或从队列代理接收消息。
4

1 回答 1

1

我将专注于您问题的一个方面;这是对 RabbitMQ 集群进行负载平衡。RabbitMQ 集群总是由一个主节点和 0…n 个从节点组成。因此,最好强制连接到主节点,而不是实现循环、最小连接等。

即使您的负载均衡器路由到不同的节点,RabbitMQ 也会自动将流量直接路由到主节点。这篇文章更详细地解释了这个概念。

于 2014-11-18T15:26:19.680 回答