8.3 连接池

上一章

8.5 熔断

下一章

更多图书

8.4 健康检测

Istio通过设置DestinationRule来指定服务实例健康检测的配置,可以设置服务实例健康检测计算的时间间隔、实例移出负载均衡池的条件、实例移出负载均衡池时间的基础值,以及服务实例移出负载均衡池的最大比例值。设置移出负载均衡池的最大比例,可以防止异常情况移出负载均衡池过多的服务实例,导致服务实例不够,剩余实例承受流量过大,压跨整个服务。与负载均衡策略设置类似,服务实例健康检测的配置也支持服务默认级别的配置、服务子集的配置、端口级别的配置。

对于HTTP协议的服务,当后端实例返回5xx的响应码时,代表后端实例出现错误,后端实例的错误计数会增加。对于TCP协议的服务,连接超时、连接失败会被认为后端实例出现错误,后端实例的错误计数会增加。

配置示例:


1 apiVersion: networking.istio.io/v1alpha3
 2 kind: DestinationRule
 3 metadata:
 4   name: service-go
 5 spec:
 6   host: service-go
 7   trafficPolicy:
 8     outlierDetection:
 9       consecutiveErrors: 3
10       interval: 10s
11       baseEjectionTime: 30s
12       maxEjectionPercent: 10
13   subsets:
14   - name: v1
15     labels:
16       version: v1
17   - name: v2
18     labels:
19       version: v2

第8~12行为后端实例健康检测配置的定义,配置最大实例移出比例(maxEjectionPercent)不超过10%,基础移出时间(baseEjectionTime)为30秒,当实例恢复健康加入集群中后,再次出现故障被移出时,移出时间会根据此值增加,每隔10秒(interval)检测一次后端实例是否应该被移出负载均衡池,当在10秒内出现3次错误时,实例会被移出负载均衡池。其中参数说明如下:

·consecutiveErrors表示服务实例移出负载均衡池之前的最大出错次数阈值,当负载均衡池中的实例在指定的时间间隔内出错次数到达该值时,会被移出负载均衡池。

·interval表示两次后端实例健康检查时间间隔,默认值为10秒。

·baseEjectionTime表示移出负载均衡池的基础时间,默认值为30秒。

·maxEjectionPercent表示后端实例最大移出百分比,默认值为10。