集群简介

查看本文大纲

Cluster 是 Envoy 的核心概念之一,代表了后端服务的一个集合,用来路由出站请求。这个概念在负载均衡、服务发现和故障处理中扮演了关键角色。

Cluster 的定义与功能

Cluster 是 Envoy 配置中定义的逻辑服务端点的集合。每个 Cluster 包含了一组逻辑上相似的服务实例,这些服务实例能够处理相同类型的请求。Envoy 将请求路由到这些实例,通常基于配置的负载均衡策略。

主要属性

Envoy 的 Cluster 配置包括以下主要属性:

  • 服务发现机制(Service Discovery):Envoy 支持多种服务发现机制,包括静态定义的 IP 列表、动态服务发现(如 DNS、Consul)以及集成的服务发现 API(如 EDS, Endpoint Discovery Service)。

  • 健康检查(Health Checking):Cluster 支持配置健康检查,以便定期检查后端服务实例的健康状态。如果检查失败,相应的实例会从负载均衡中移除。

  • 负载均衡策略(Load Balancing Strategies):Envoy 支持多种负载均衡策略,包括随机、轮询、最少请求、加权轮询等,以便根据不同需求分配流量。

  • 传输协议(Transport Protocol):可配置为 TCP 或 HTTP,决定了 Envoy 如何与后端服务通信。

配置示例

下面是一个基本的 Cluster 配置示例,它使用静态地址列表和简单的轮询负载均衡策略:

static_resources:
  clusters:
  - name: service_cluster
    connect_timeout: 0.25s
    type: STATIC
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: service_cluster
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: 192.168.1.10
                port_value: 80
        - endpoint:
            address:
              socket_address:
                address: 192.168.1.11
                port_value: 80

该配置定义了一个名为 service_cluster 的静态集群,使用**轮询(ROUND_ROBIN)**负载均衡策略,将请求分发到两个后端服务实例,分别位于IP地址 192.168.1.10:80192.168.1.11:80,连接超时时间为 0.25 秒。

动态能力

Envoy 的动态配置能力允许在不重启服务的情况下动态改变 Cluster 配置。例如,通过集成的 xDS API(如 CDS),可以实时添加、更新或删除 Cluster 配置。

高级特性

除了基础功能外,Cluster 还支持许多高级特性,如:

  • 连接池化:减少了频繁建立连接的开销,提高了性能。
  • 断路器:在后端服务超载时防止进一步的连接尝试,帮助服务恢复正常。
  • 超时和重试:可配置的请求超时和重试机制,增强了请求的健壮性。
  • 连接预热:在集群初始化时,Envoy 会执行连接预热,以确保在开始处理流量之前,所有主机都处于健康状态并且已准备好接受请求。
  • 子集选择:Envoy 可以根据元数据将集群中的端点划分为多个子集,允许基于特定条件(如版本或环境)选择不同的后端服务。
  • 流量控制:Envoy 支持流量控制策略,允许用户配置流量的速率限制和优先级,从而管理流量的流入和流出。

最后更新于 2024/11/27