一般情况下,由于 Logstash 之间并不存在通信,Logstash 单节点宕掉的话,必定会带来影响的。如果 是 filebeat-kafka-logstash
这种使用场景,可以通过 kafka 的消息消费机制实现 Logstash 的高可用。
多个 logstash 订阅同一个主题,使用同一个 group ,这·样一条消息只可能被一个 logstash 节点消费,当某一个节点挂了,并不影响其他节点对该 topic 消息的消费。
但是如果针对版本比较旧的 Windows 和 Windows sever2003 等其他windows 系统,filebeat 无法使用,在 filebeat 无法使用的情况下,一般会使用 filebeat 的 windows 日志采集替代品 nxlog。nxlog 目前来说,主要有 community 和 Enterprise 两个版本。两者差别如下图所示。
针对 Enterprise 版本的话,可以通过 nxlog 的 om_kafka
模块实现 nxlog-kafka-logstash
结构,以实现 Logstash 的高可用。但是 Community 是不支持的,当然如果一定要通过 kafka 消费机制实现的话可以通过 nxlog-logstash-kafka-logstash
实现,这不是一个很机智的做法。
对于 Logstash 高可用的问题,还可以通过 Nginx 、haproxy 以及 F5 软硬件的系统层面负载均衡实现。
博主也测试过通过 F5 分发的形式实现,但是没有成功,F5 做分发需要 Logstash 有返回消息,目前没找 Logstash 任何收到消息后的回应信息,所以通过 F5 做负载的,博主没有实现呢。
后面博主使用 Haproxy 软负载,走 TCP
通道,实现了对 nxlog 日志消息分发到 Logstash 集群的功能。
环境准备
haproxy : 192.168.96.129
三台Logstash:
- Logstash1:192.168.96.131
- Logstash2:192.168.96.132
- Logstash3:192.168.96.133
haproxy 安装
下载 haproxy