天天看点

10. Fluentd部署:高可用配置

对于高访问量的web站点或者服务,可以采用Fluentd的高可用配置模式。

  1. 消息分发语义

Fluentd设计初衷主要是用作事件日志分发系统的。这类系统支持几种不同的分发模式:

  • 至多一次。消息被立即发送,若传输成功,该消息不会再被发送。发送失败,则会导致消息丢失。现实环境下会有很多情况导致发送失败,比如网络暂时不可用。
  • 至少一次。消息至少会被发送一次,若发送失败,消息会被重发。这保证了消息不会被丢失,但可能导致接收端收到重复的消息。
  • 精确只发一次。消息刚好发送一次,能确保送达且不会重复。这是大家所期望的分发模式。实现此模式可能需要采用同步化的日志处理方式,当达到发送瓶颈时,告知业务层已无法接收更多的日志。

为了在不影响业务性能的情况下收集大量的日志,日志层必须以异步的方式运行。因此,Fluentd只提供了前两种传输模式。

  1. 网络拓扑

为使得Fluentd具备高可用性,典型的部署架构需要包含两种不同角色的Fluentd模块:转发器(forwarder)和聚合器(aggregator)。其拓扑结构如下图所示

10. Fluentd部署:高可用配置

转发器部署在业务节点,用于收集业务方产生的本地日志事件,并将事件发送至聚合器。

聚合器持续地从转发器接收日志,对日志进行缓存,并定期上传日志到下一个处理方(典型的就是存储)。

聚合器采用主备模式。如上图,192.168.0.1为主,192.168.0.2为备。

  1. 转发器配置

转发器的典型配置如下所示:

# TCP input
<source>
  @type forward
  port 24224
</source>

# HTTP input
<source>
  @type http
  port 8888
</source>

# Log Forwarding
<match mytag.**>
  @type forward

  # primary host
  <server>
    host 192.168.0.1
    port 24224
  </server>
  # use secondary host
  <server>
    host 192.168.0.2
    port 24224
    standby
  </server>

  # use longer flush_interval to reduce CPU usage.
  # note that this is a trade-off against latency.
  <buffer>
    flush_interval 60s
  </buffer>
</match>
           

这里有两个输入源,使用forward插件将日志事件发送到两个聚合器server中,其中通过standby指定192.168.0.2为备用聚合器。若两个聚合器节点都不可用,日志将会缓存在转发器节点。

  1. 聚合器配置

聚合器的典型配置如下所示:

# Input
<source>
  @type forward
  port 24224
</source>

# Output
<match mytag.**>
  ...
</match>
           

这个比较简单,使用forward插件作为输入源。日志会在本地缓存,并通过重传机制确保能送达目的地。

  1. 失败场景提示
  • 转发器收到业务层日志,在将日志写入缓存之前发生崩溃
  • 磁盘损坏
  1. 错误排查
$ telnet host 24224
$ nmap -p 24224 -sU host
           

继续阅读