Service Fabric 探测
继续阅读本文之前,请熟悉 Service Fabric 应用程序模型和 Service Fabric 托管模型。 本文概述了如何使用清单文件定义运行情况探测和就绪情况探测。
运行情况探测
从版本 7.1 开始,Azure Service Fabric 支持容器化和非容器化应用程序的运行状态探测机制。 运行情况探测可帮助报告代码包的运行情况,如果代码包未快速响应,将重启。
就绪情况探测
从 8.2 开始,还支持就绪情况探测。 就绪情况探测用于确定代码包是否已准备好接受流量。 例如,如果容器需要很长时间来处理请求,或者请求队列已满,则代码包将无法再接受流量,因此将删除访问代码包的终结点。
就绪情况探测的行为如下:
- 容器/代码包实例启动
- 立即发布终结点
- 就绪情况探测开始运行
- 就绪情况探测最终达到失败阈值,并删除终结点使其不可用
- 实例最终准备就绪
- 就绪情况探测通知实例已准备就绪,并再次发布终结点
- 请求再次路由并成功,因为实例已准备好处理请求
注意
对于就绪情况探测,不会重启代码包,只是不发布终结点,因此副本/分区设置不受影响。
语义
只能为每个代码包指定一个运行情况探测和一个就绪情况探测,并可以使用以下字段控制其行为:
type
:用于指定探测类型是“运行情况”还是“就绪情况”。 支持的值为“Liveness”或“Readiness”initialDelaySeconds
:容器启动后开始执行探测的初始延迟秒数。 支持的值为整数。默认值为 0,最小值为 0。timeoutSeconds
:一个时间段(秒),在此时间之后,如果探测未成功完成,则会将其视为失败。 支持的值为整数。默认值为 1,最小值为 1。periodSeconds
:用于指定探测频率的时间段(秒)。 支持的值为整数。默认值为 10,最小值为 1。failureThreshold
:当达到此值时,容器将重启。 支持的值为整数。默认值为 3,最小值为 1。successThreshold
:失败后,若要将探测视为成功,则必须成功运行此值。 支持的值为整数。默认值为 1,最小值为 1。
在任何时刻,最多只能有对一个容器的一个探测。 如果探测未在“timeoutSeconds”中设置的时间内完成,请等待并计算到达“failureThreshold”的时间 。
此外,Service Fabric 还会引发有关“DeployedServicePackage”的以下探测运行状况报告:
OK
:对于“successThreshold”中设置的值,探测成功。Error
:容器重启之前,探测“failureCount” == “failureThreshold” 。Warning
设置用户帐户 :- 探测失败,“failureCount”<“failureThreshold” 。 此运行状况报告会一直进行下去,直至“failureCount”达到在“failureThreshold”或“successThreshold”中设置的值 。
- 如果失败后成功,警告仍然存在,但会包含更新的续成功。
指定探测
可以在 ApplicationManifest.xml 文件中的“ServiceManifestImport”下指定探测。
探测可用于以下任一情况:
- HTTP
- TCP
- Exec
HTTP 探测器
对于 HTTP 探测,Service Fabric 会向指定的端口和路径发送 HTTP 请求。 返回代码大于或等于 200 且小于 400 表示成功。
以下示例演示了如何指定 HTTP 运行情况探测:
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
<ConfigOverrides />
<Policies>
<CodePackagePolicy CodePackageRef="Code">
<Probes>
<Probe Type="Liveness" FailureThreshold="5" SuccessThreshold="2" InitialDelaySeconds="10" PeriodSeconds="30" TimeoutSeconds="20">
<HttpGet Path="/" Port="8081" Scheme="http">
<HttpHeader Name="Foo" Value="Val"/>
<HttpHeader Name="Bar" Value="val1"/>
</HttpGet>
</Probe>
</Probes>
</CodePackagePolicy>
</Policies>
</ServiceManifestImport>
HTTP 探测有其他可设置的属性:
path
:要在 HTTP 请求中使用的路径。port
:用于探测的端口。 此属性是必需的。 范围为 1 到 65535。scheme
:用于连接到代码包的方案。 如果将此属性设置为 HTTPS,则会跳过证书验证。 默认设置为 HTTP。httpHeader
:要在请求中设置的标头。 可以指定多个标头。host
:要连接到的主机 IP 地址。
注意
非容器化应用程序不支持端口和方案。 对于此场景,请使用 EndpointRef="EndpointName" 属性。 将“EndpointName”替换为 ServiceManifest.xml 中定义的终结点的名称。
TCP 探测器
对于 TCP 探测,Service Fabric 会尝试使用指定的端口在容器上打开一个套接字。 如果它可以建立连接,则探测会被视为成功。 下面的示例展示了如何指定使用 TCP 套接字的探测:
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
<ConfigOverrides />
<Policies>
<CodePackagePolicy CodePackageRef="Code">
<Probes>
<Probe Type="Liveness" FailureThreshold="5" SuccessThreshold="2" InitialDelaySeconds="10" PeriodSeconds="30" TimeoutSeconds="20">
<TcpSocket Port="8081"/>
</Probe>
</Probes>
</CodePackagePolicy>
</Policies>
</ServiceManifestImport>
Exec 探测
此探测将向容器发出一个“exec”命令,并等待命令完成。
注意
“Exec”命令接受以逗号分隔的字符串。 以下示例中的命令适用于 Linux 容器。 如果要探测 Windows 容器,请使用“cmd”。
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
<ConfigOverrides />
<Policies>
<CodePackagePolicy CodePackageRef="Code">
<Probes>
<Probe Type="Liveness" FailureThreshold="5" SuccessThreshold="2" InitialDelaySeconds="10" PeriodSeconds="30" TimeoutSeconds="20">
<Exec>
<Command>ping,-c,2,localhost</Command>
</Exec>
</Probe>
</Probes>
</CodePackagePolicy>
</Policies>
</ServiceManifestImport>
后续步骤
请参阅以下文章,了解相关信息: