问题来自: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 开销用于向队列代理发送消息或从队列代理接收消息。