Istio提供了三种负载均衡策略:simple、consistentHash、localityLbSetting,下面一一介绍。
| 名称 | 描述 |
|---|---|
| simple | 简单方式,其内置了四种负载均衡算法 |
| consistentHash | 基于HASH一致性算法的负载均衡 |
| localityLbSetting | 局部负载均衡器设置,将完全覆盖网格的设置 |
simple方式提供四种负载均衡算法:
| 名称 | 描述 |
|---|---|
| ROUND_ROBIN | 默认算法,循环访问某个服务 |
| LEAST_CONN | 该算法随机选择两个健康的服务,最终选择活动请求较少的服务 |
| RANDOM | 该算法随机选择1个健康的服务,如果服务未配置健康检测策略,该策略的性能通常比轮询更好 |
| PASSTHROUGH | 该算法将连接转发到呼叫着请求的原始IP地址,不进行任何负载均衡,需谨慎使用 |
consistentHash提供五种设置参数:
| 名称 | 描述 |
|---|---|
| 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提供三种算法
| 名称 | 描述 |
|---|---|
| distribute | 可选,只能设置分发或故障转移之一,明确指定跨不同区域和地理位置的负载均衡权重。 |
| failover | 可选,只能 设置故障转移或分发,明确指定当本地区域中的端点变得不健康时,区域通信将降落,应该与OutlierDetection一起使用以检测不健康的端口。 |
| enabled | 启用局域负载平衡,这是DestinationRule级别,将整体覆盖网格范围的设置 |