29.2.2. 检查和通知脚本
Keepalived 通过定期运行可选用户提供的检查脚本来监控应用程序的健康状况。例如,该脚本可以通过发出请求并验证响应来测试 Web 服务器。
该脚本通过 oc adm ipfailover
命令的 --check-script=<
;script> 选项提供。对于 PASS 或 1
,该脚本必须以 0
退出。
默认情况下,检查每两秒完成一次,但可以使用 --check-interval=<seconds>
选项进行更改。
不提供检查脚本时,将运行一个简单的默认脚本来测试 TCP 连接。当监控端口为 0
时,禁止此默认测试。
对于每个虚拟 IP(VIP),keepalived 保留节点的状态。节点上的 VIP 可能处于 MASTER、BACKUP 或 FAULT 状态。所有不在 FAULT 状态的节点上的 VIP 均参与协商来决定是否哪个是 VIP 的 MASTER。所有丢失者都进入 BACKUP 状态。当 MASTER 上的 检查 脚本失败时,VIP 会进入 FAULT 状态,并触发重新协商。当 BACKUP 失败时,VIP 会进入 FAULT 状态。当 check 脚本再次在 FAULT 状态的 VIP 上再次传递时,它会退出 FAULT 并协商 MASTER。生成的状态为 MASTER 或 BACKUP。
管理员可以提供可选的 notify 脚本,该脚本会在状态更改时调用。keepalived 将以下三个参数传递给脚本:
-
$1
- "GROUP"|"INSTANCE" -
$2
- 组或实例的名称 -
$3
- 新状态("MASTER"|"BACKUP"|"FAULT")
这些脚本在 IP 故障转移 pod 中运行,并使用 pod 的文件系统,而不是主机文件系统。选项需要脚本的完整路径。管理员必须使容器集中的 脚本从运行 notify 脚本提取结果。提供脚本的建议方法是使用 ConfigMap。
检查 和通知 脚本的完整路径名称添加到 keepalived 配置文件 /etc/keepalived/keepalived.conf 中,该文件会在 keepalived 启动时加载。脚本可以通过 ConfigMap 添加到 pod,如下所示。
创建所需脚本,并创建 ConfigMap 来容纳它。脚本没有输入参数,并且必须返回
0(
OK )和1(
表示 FAIL )。检查脚本,mycheckscript.sh:
#!/bin/bash # Whatever tests are needed # E.g., send request and verify response exit 0
创建 ConfigMap:
$ oc create configmap mycustomcheck --from-file=mycheckscript.sh
可以通过两种方式将脚本添加到 pod:使用
oc
命令或编辑部署配置。在这两种情况下,所挂载的configMap
文件的defaultMode
必须允许执行。值通常为0755
(493
十进制)。使用
oc
命令:$ oc env dc/ipf-ha-router \ OPENSHIFT_HA_CHECK_SCRIPT=/etc/keepalive/mycheckscript.sh $ oc set volume dc/ipf-ha-router --add --overwrite \ --name=config-volume \ --mount-path=/etc/keepalive \ --source='{"configMap": { "name": "mycustomcheck", "defaultMode": 493}}'
编辑 ipf-ha-router 部署配置:
使用
oc edit dc ipf-ha-router
使用文本编辑器编辑路由器部署配置。... spec: containers: - env: - name: OPENSHIFT_HA_CHECK_SCRIPT 1 value: /etc/keepalive/mycheckscript.sh ... volumeMounts: 2 - mountPath: /etc/keepalive name: config-volume dnsPolicy: ClusterFirst ... volumes: 3 - configMap: defaultMode: 0755 4 name: customrouter name: config-volume ...
- 保存更改并退出编辑器。这会重启 ipf-ha-router。