前言
Istio提供了三种负载均衡策略:simple、consistentHash、localityLbSetting,下面一一介绍。
名称 | 描述 |
---|---|
simple | 简单方式,其内置了四种负载均衡算法 |
consistentHash | 基于HASH一致性算法的负载均衡 |
localityLbSetting | 局部负载均衡器设置,将完全覆盖网格的设置 |
一、simple
simple方式提供四种负载均衡算法:
- 轮询(ROUND_ROBIN)
- 最少连接(LEAST_CONN)
- 随机(RANDOM)
- 透传(PASSTHROUGH)
名称 | 描述 |
---|---|
ROUND_ROBIN | 默认算法,循环访问某个服务 |
LEAST_CONN | 该算法随机选择两个健康的服务,最终选择活动请求较少的服务 |
RANDOM | 该算法随机选择1个健康的服务,如果服务未配置健康检测策略,该策略的性能通常比轮询更好 |
PASSTHROUGH | 该算法将连接转发到呼叫着请求的原始IP地址,不进行任何负载均衡,需谨慎使用 |
二、consistentHash(hash一致性)
consistentHash提供五种设置参数:
- httpHeaderName
- httpCookie
- useSourceIp
- httpQueryParamterName
- minimumRingSize
名称 | 描述 |
---|---|
httpHeaderName | 基于HTTP请求头的哈希 |
httpCookie | 基于HTTP Cookie的哈希 |
useSourceIp | 基于源IP地址的哈希 |
httpQueryParamterName | 基于特定HTTP请求参数的哈希 |
minimumRingSize | 用户哈希环的最小虚拟节点,默认值为1024, |
使用useSourceIp的设置例子:
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: newframe
namespace: dmo
spec:
host: newframe-tttest-service
trafficPolicy:
loadBalancer:
consistentHash:
useSourceIp: true
connectionPool:
tcp:
maxConnections: 100
http:
http1MaxPendingRequests: 50
maxRequestsPerConnection: 80
# outlierDetection:
# # 实例被驱逐前的连续错误次数,默认是5.HTTP返回5xx被认为异常,TCP超时和连接出错被认为异常
# consecutiveErrors: 100
# # 驱逐的时间间隔,默认10s,要求大于1ms,可以是ms、s、m、h
# interval: 10s
# # 最小驱逐时间,默认30s。
# baseEjectionTime: 10s
# # 均衡池中可以被驱逐的故障实例最大比例。默认是10%. 避免驱逐太多服务能力下降。
# maxEjectionPercent: 50
subsets:
- name: v1
labels:
version: v1
使用cookie的例子:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: newframe
spec:
host: newframe
trafficPolicy:
loadBalancer:
consistentHash:
httpCookie:
name: Authorization
ttl: 0s # Cookie的生命周期 必须写
三、LocalityLoadBalancer(区域加权负载均衡)(没太懂)
LocalityLoadBalancer提供三种算法
- distribute
- failover
- enabled
名称 | 描述 |
---|---|
distribute | 可选,只能设置分发或故障转移之一,明确指定跨不同区域和地理位置的负载均衡权重。 |
failover | 可选,只能 设置故障转移或分发,明确指定当本地区域中的端点变得不健康时,区域通信将降落,应该与OutlierDetection一起使用以检测不健康的端口。 |
enabled | 启用局域负载平衡,这是DestinationRule级别,将整体覆盖网格范围的设置 |