天天看點

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
           

繼續閱讀