上游服务负载均衡

Fluent Bit 输出插件通过网络连接外部服务交付日志是很常见的,例如 HTTP, ElasticsearchForward 等其他插件都是这种情况。比较常见的是连接到一个节点(主机),可以满足许多应用场景,但是在某些情况下,则需要在不同节点进行负载均衡。 Upstream 特性提供了这种能力。

Upstream 定义了作为输出插件目标一组节点,根据实现的性质,输出插件必须支持 Upstream 功能。以下插件支持 Upstream:

当前实现的负载均衡模式是 round-robin(轮询)

配置

要定义 Upstream,需要创建一个特定的配置文件,其中包含 UPSTREAM 和一个或多个 NODE 配置段。下表描述了与每个配置段关联的属性。请注意,所有这些都是必须的:

配置段 配置项/键 描述
UPSTREAM name 定义 Upstream 名称
NODE name 定义 Node 名称,包含一个节点
host 目标主机的 IP 地址或主机名
port 目标服务的 TCP 端口

NODE 和特定插件配置

NODE 可能包含其他插件所需的配置项,这样我们为输出插件提供了足够的灵活性。一个常见的用例是 Forward 输出插件如果启用了TLS,则它需要一些共享的配置项(下面示例中包含更多详细信息)。

Nodes and TLS (Transport Layer Security)

除了上表中定义的属性之外,可以通过使用 TLS 加密和证书完成对一个节点的网络进行加密。

可用的 TLS 选项在 TLS/SSL 部分中进行了描述,且可以添加到任何 Node 配置段中。

配置文件示例

如下示例定义了一个名称为 forward-balancingUpstream,供 Forward 输出插件使用,它注册了三个 Nodes:

  • node-1: 连接到 127.0.0.1:43000
  • node-2: 连接到 127.0.0.1:44000
  • node-3: 连接到 127.0.0.1:45000,使用 TLS 而无需验证。它还定义了名称 shared_key 的 Forward 输出插件所需的特定配置项。
  1. [UPSTREAM]
  2. name forward-balancing
  3. [NODE]
  4. name node-1
  5. host 127.0.0.1
  6. port 43000
  7. [NODE]
  8. name node-2
  9. host 127.0.0.1
  10. port 44000
  11. [NODE]
  12. name node-3
  13. host 127.0.0.1
  14. port 45000
  15. tls on
  16. tls.verify off
  17. shared_key secret

请注意,每个 Upstream 必须定义在自己的配置文件中。不允许在同一文件或不同文件中添加多个 Upstreams