ClusterManager 配置
MOSN ClusterManager 配置说明。
本文是关于 MOSN ClusterManager 配置的说明。
MOSN 中通过 cluster_manager 来管理转发的集群地址,通常与 Router 配合使用。
"cluster_manager":{
"tls_context":"",
"cluster_pool_enable": "",
"clusters_configs":"",
"clusters":[]
}
tls_context,可选配置,用于描述 Cluster 全局共享的 TLS 配置,该配置项需要结合 clusters 配置中的 cluster_manager_tls 配置项一起使用,TLS 详细配置见 tls_context 文档。cluster_pool_enable,可选配置,bool 类型,用于控制所有Cluster是否使用独占的连接池,为 true 则使用Cluster独占连接池,默认值为 false。clusters_configs,可选配置,字符串类型,用于设置 Cluster 列表从 clusters_configs 指定的文件中解析。clusters,用于描述每个 Cluster 所采用的负载均衡算法、类型等细节信息。
注意:cluster_manager 中的 clusters 和 clusters_configs 不能同时配置。
cluster
{
"name":"",
"type":"",
"sub_type":"",
"lb_type":"",
"max_request_per_conn":"",
"conn_buffer_limit_bytes":"",
"circuit_breakers":"",
"health_check":"",
"spec":"",
"lb_subset_config":"",
"original_dst_lb_config":"",
"cluster_manager_tls":"",
"tls_context":"",
"hosts":[],
"connect_timeout":"",
"idle_timeout":"",
"lbconfig":"",
"dns_refresh_rate":"",
"respect_dns_ttl":"",
"dns_lookup_family":"",
"dns_resolvers":"",
"dns_resolver_file":"",
"dns_resolver_port":"",
"cluster_pool_enable":""
}
name,字符串。用作 Cluster 的唯一标识。type,字符串。用于表示 Cluster 的类型,目前支持的类型如下:- SIMPLE,是最基础的类型。
- ORIGINAL_DST,该种类型的一般会在透明劫持场景中使用,他会自动的把负载均衡
lb_type修改成 LB_ORIGINAL_DST 类型,具体作用见下文 - STRICT_DNS,该种类型会动态解析 Cluster 中的域名列表,并将域名对应的 A 记录全部加入转发列表中。
sub_type,已废弃。lb_type,字符串。在集群中选择主机时使用的负载平衡器类型,目前支持的类型如下:- LB_ROUNDROBIN,不带权重的轮训转发。
- LB_RANDOM,随机转发。
- LB_WEIGHTED_ROUNDROBIN,根据 host 的权重转发。
- LB_ORIGINAL_DST,在透明劫持场景下使用原始目标地址做转发,也可以通过请求 header 设置目标地址,详情可看
original_dst_lb_config配置项。 - LB_LEAST_REQUEST,选择请求数最少的 host 转发。
- LB_MAGLEV,一致性 hash 转发。
- LB_REQUEST_ROUNDROBIN,同一个请求粒度的轮训转发。
- LB_LEAST_CONNECTION,选择连接数最少的 host 转发。
- LB_PEAK_EWMA,基于延迟的负载均衡算法,通过记录主机的延迟,选择延迟较好并避免选择较差的主机
max_request_per_conn,uint32 类型,暂未实现。conn_buffer_limit_bytes,uint32 类型,暂未实现。circuit_breakers,CircuitBreakers 类型,既 Thresholds 类型的数组,用于配置 Cluster 的熔断配置。health_check,HealthCheck 类型,群集可选的健康检查配置。如果未指定该配置,则不会执行主动健康检查,且默认群集中的成员都将是健康状态。spec,暂未使用。lb_subset_config,LBSubsetConfig 类型,用于配置负载均衡的子集。original_dst_lb_config,LBOriDstConfig 类型,用于配置 LB_ORIGINAL_DST 类型的负载均衡器配置。cluster_manager_tls,bool 类型,用于控制每个 Cluster 是否使用全局共享的 TLS 配置,为 true 则共享,默认值为 false。tls_context,TLSConfig 类型,连接到上游群集的 TLS 配置。若没有指定 TLS 配置,则新连接不会使用 TLS,配置实例参考 tls_context 文档。hosts,[]Host 类型,用于配置 Cluster 中的机器列表。connect_timeout,Duration 类型,连接到该群集中主机的超时时长,默认值为 3 秒。idle_timeout,Duration 类型,用于设置 Cluster 中的连接空闲超时时间,若发生超时则会断开连接,中默认值为 0,表示不设置连接的空闲超时。lbconfig,LbConfig类型,为负载均衡器提供的扩展配置,目前只有 LB_LEAST_REQUEST/LB_LEAST_CONNECTION/LB_PEAK_EWMA 类型的负载均衡器有使用。dns_refresh_rate,Duration 类型,在群集类型是 STRICT_DNS 时,用于设置 DNS 刷新频率,此值默认为 5 秒。respect_dns_ttl,bool 类型,用于设置当 Cluster 类型为 STRICT_DNS 时,其域名对应的解析频率是否遵循 DNS 返回的 TTL。dns_lookup_family,字符串类型,DNS IP 地址解析策略。 如果未指定此设置,则该值默认为 V4_ONLY。取值列表如下:- V4_ONLY,表示只解析 IPv4
- V6_ONLY,表示只解析 IPv6
dns_resolvers,DnsResolverConfig 类型,在群集类型是 STRICT_DNS,此值用于指定群集的 DNS 解析相关配置。dns_resolver_file,字符串类型,用于设置 DNS server 列表的文件路径,该值默认为使用 /etc/resolv.conf 配置的默认解析器,该配置项仅在 dns_resolvers 未配置时生效。dns_resolver_port,字符串类型,用于设置 DNS server 地址的 port,默认值为 53,该配置项仅在 dns_resolvers 未配置时生效。cluster_pool_enable,bool 类型,用于控制当前Cluster是否使用独占的连接池,为 true 则使用独占连接池,默认值为 false。
Thresholds
{
"max_connections":"",
"max_pending_requests":"",
"max_requests":"",
"max_retries":""
}
max_connections,uint32 类型。用于设置 Cluster 中每台机器的最大连接数,对于 HTTP 协议,超过后会响应 502,对于多路复用协议则是控制单个 host 建立的最大连接数。默认值为 0 表示不启用该配置。max_pending_requests,uint32 类型。代表 Cluster 的最大排队数量,暂未使用到。max_requests,uint32 类型。将对上游群集执行的最大并行请求数,若超过限制则会响应 502,目前仅在 HTTP 系协议下生效。默认值为 0 表示不启用该配置。max_retries,uint32 类型。允许上游集群执行的最大并行重试次数,目前只在 HTTP 系协议下生效。默认值为 0 表示不启用该配置。
HealthCheck
HealthCheckConfig
{
"protocol":"",
"timeout":"",
"interval":"",
"interval_jitter":"",
"healthy_threshold":"",
"unhealthy_threshold":"",
"service_name":"",
"check_config":"",
"event_log_path":"",
"common_callbacks":""
}
protocol,字符串类型,用于设置 Cluster 发起健康检查使用的协议类型,目前只支持 TCP。timeout,Duration 类型,等待健康检查响应的时间。如果达到超时,则尝试健康检查将被视为失败。interval,Duration 类型,每次尝试健康检查之间的时间间隔。interval_jitter,Duration 类型,用于设置 interval 的随机抖动量,设置后将抖动量叠加到 interval 上。healthy_threshold,uint32 类型,主机在标记为健康之前所需的连续健康检查次数,默认值为 1。unhealthy_threshold,uint32 类型,在主机被标记为不健康之前,需要进行连续不健康的健康检查次数,默认值为 1。service_name,字符串类型,暂未支持。check_config,map[string]interface{} 类型,用于健康检查的扩展配置,当前支持 “http_check_config”。event_log_path, 字符串类型,健康检查日志路径。common_callbacks,[]string 类型,用于设置对应 Cluster 健康检查时执行的 callback。
LBSubsetConfig
LBSubsetConfig 主要用于 Cluster 中更为灵活的请求路由,列如 ABTesting、金丝雀发布、单元化等。详细使用可以参考 MOSN subset 路由实践。
{
"fall_back_policy":"",
"default_subset":"",
"subset_selectors":""
}
fall_back_policy,uint8 类型,用于设置在查找子集群失败时的容灾策略,当前支持如下配置:- 0,表示 NoFallBack,没有查找到匹配的子集群则不使用容灾策略
- 1,表示 AnyEndPoint,既在 Cluster 的 Host 列表中轮训选择目标机器
- 2,表示使用 DefaultSubset 策略重新查找子集群
default_subset,map[string]string 类型,如果 fallback_policy 为 2 既 DEFAULT_SUBSET,则指定在回退期间使用的端点的默认子集。subset_selectors,[][]string 类型,用于设置子集群匹配规则查找的条目。
LBOriDstConfig
{
"use_header":"",
"header_name":""
}
use_header,bool 类型,将该配置设置为 true 且负载均衡器使用 LB_ORIGINAL_DST 类型时,则转发的目标地址通过 header_name 从当前请求 header 中获取。header_name,字符串类型,用于设置目标地址从 header_name 对应的 header 中获取,默认值为 host。
Host
{
"address":"",
"hostname":""
"weight":"",
"metadata":"",
"tls_disable":""
}
address,字符串类型,用于设置集群的地址和端口。hostname,字符串类型,对应地址的名称,可以是一个域名。weight,uint32 类型,对应地址的权重。metadata,*MetadataConfig 类型,用于设置对应机器的 metadata 信息,通常和 LBSubsetConfig 一起使用。tls_disable,bool 类型,用于标记对应机器是否开启 TLS。
DnsResolverConfig
{
"servers":"",
"search":""
"port":"",
"ndots":"",
"timeout":"",
"attempts":""
}
servers,[]string 类型,用于设置 DNS 服务器列表。search,[]string 类型,用于设置和目标域名拼接的后缀列表,结合 ndots 使用。port,字符串类型,设置发起 DNS 请求的端口,默认值为 53。ndots,int 类型,用于设置 DNS 查询域名是否将 search 中的列表依次追加到待查询域名末尾,如果该值大于待查询域名中的 “.” 数量,则将待查询域名末尾拼依次接 search 中设置的后缀,默认值为 0。timeout,int 类型,用于设置 DNS 更新超时时间,单位为秒。attempts,int 类型,一次 DNS 请求中尝试查询的 DSN server 的次数。
LbConfig
{
"choice_count": "",
"active_request_bias": ""
}
choice_count,uint32类型,用来设置随机算法的随机选择次数,当配置了lbconfig时必填,且必须大于0active_request_bias,float64类型,用来设置负载均衡算法对active_request和connection_active指标的偏好
修改于 2024年6月28日: add shuke image (#259) (ed4efc8)