1.4. SAP HANA HA/DR 供应商 hook
当前版本的 SAP HANA 以 hook 的形式提供了一个 API,允许 HANA 实例为特定事件发送通知,如丢失或建立系统复制。对于每个事件,HANA 实例会调用配置的 hook,也称为 HA/DR 供应商。hook 是自定义 Python 脚本,用于处理 HANA 发送的事件,脚本可以根据事件信息触发不同的操作。
您必须将 HA/DR 供应商定义添加到 HANA 全局配置中,以启用为某些事件触发额外操作所需的功能。
HanaSR 用于 srConnectionChanged ()
hook 方法
处理 srConnectionChanged ()
hook 方法需要 HanaSR
hook。此方法供 primary HANA 实例用于 HANA 系统复制状态的任何更改的通知。当 HANA 系统复制相关事件时,主 HANA 实例会调用 HanaSR
HA/DR 供应商。然后,hook 脚本 HanaSR.py
为系统复制状态详情解析 srConnectionChanged ()
事件,因此它会更新 srHook
集群属性。资源代理使用此属性来评估环境健康状况并做出决策。系统复制或同步状态的值定义集群是否在同一节点上恢复失败的主实例,或者它触发到次要状态。只有系统复制完全同步时,才会触发接管,这意味着 HANA 数据在 HANA 站点之间保持一致。
您必须配置 HanaSR
hook,以启用 srConnectionChanged ()
hook 方法,以便正常工作并完全支持 HA 集群设置。
srServiceStateChanged ()
hook 方法的 ChkSrv
当 HANA indexserver 检测到一个问题时,通过 HANA indexserver 处理它通过内部机制自动停止并重启 hdbindexserver
服务。
但是,对于非常大的 HANA 实例,hdbindexserver
服务可能需要很长时间才能用于此恢复过程的停止阶段。虽然 HANA 将这一服务降级报告为 HANA 环境中的错误,但在该时间内,如果实例中其他操作失败,则情况会给数据一致性带来风险。要改进无法预计的服务恢复时间,您可以将 ChkSrv
hook 配置为停止或终止整个受影响的 HANA 实例。
在启用了自动故障切换(PREFER_SITE_TAKEOVER=true
)的设置中,如果次要节点处于健康状态,则实例停止会导致接管。否则,实例恢复在本地进行,但强制的本地实例重启会加快进程。
当发生事件时,HANA 实例会调用 ChkSrv
hook。hook 脚本 ChkSrv.py
处理 srServiceStateChanged ()
hook 方法,并根据它应用到事件详情的过滤器执行操作。这样,ChkSrv.py
hook 脚本可以区分一个 HANA hdbindexserver
进程,该进程在因预期实例关闭的一部分而被 HANA 停止并重新启动。当 hook 脚本确定事件是由失败导致的,它会触发配置的操作。
ChkSrv.py
hook 脚本具有多个选项,用于定义检测到 indexserver 失败事件时发生的情况:
ignore
此操作仅将解析的事件和决策信息写入专用日志文件。这对于测试并验证 hook 脚本在激活
停止
或终止操作时将执行的操作非常有用。stop
此操作通过
sapcontrol
命令为实例执行安全停止系统。kill
此操作执行
HDB kill-<signal>
; 命令,它带有默认的信号 9,它可以进行配置。结果与使用stop
时的结果相同,但可能会更快。
任何 indexserver 故障都由 HANA 单独处理。每个 indexserver 问题始终都会触发相同的进程。
启用 srServiceStateChanged ()
hook 是可选的。