本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
SAP HANA 服务控制
修改 SAP HANA 服务的管理方式以启用集群接管和操作。
主题
将 sidadm 添加到客户群组
pacemaker 软件会创建一个 haclient 操作系统组。为确保正确的群集访问权限,请在所有群集节点上将 sidadm 用户添加到该组中。以 root 用户身份运行以下命令:
# usermod -a -G haclient hdbadm
修改 HANA 的 SAP 配置文件
要防止 SAP 启动框架在实例重启时自动启动 SAP HANA,请修改所有节点上的 SAP HANA 实例配置文件。这些配置文件位于/usr/sap/<SID>/SYS/profile/
。
作为 <sid>adm,编辑 SAP HANA 配置文件<SID>_HDB<hana_sys_nr>_<hostname>
并修改或添加自动启动参数,确保将其设置为 0:
Autostart = 0
配置 SAPHana SR 集群挂钩以优化集群响应
如果系统复制失败, SAPHanaSR 挂钩会立即通知群集,从而补充了标准的群集轮询机制。这种优化可以显著缩短故障转移响应时间。
按照以下步骤配置 SAPHana SR 挂钩:
-
验证集群 Package
挂钩配置因使用的资源代理而异(有关详细信息,请参阅部署指南)。
-
确认挂钩位置
默认情况下,软件包安装在
/usr/share/SAPHanaSR-angi
或中/usr/share/SAPHanaSR
。我们建议使用默认位置,但您可以选择将其复制到自定义目录;例如,/hana/share/myHooks
。该挂钩必须在所有 SAP HANA 集群节点上可用。 -
配置 global.ini
更新位于每个 SAP HANA 群集节点
/hana/shared/<SID>/global/hdb/custom/config/
上的global.ini
文件。在继续操作之前,请先制作一份备份副本。 -
配置 Sudo 权限
SAPHanaSR Python 挂钩需要 su <sid>do 权限才能让管理员用户访问集群属性:
-
例如,在中以 root 用户身份创建新的 sudoers 文件
/etc/sudoers.d/
60-SAPHanaSR-hook
-
使用 visudo 安全地编辑新文件
visudo /etc/sudoers.d/60-SAPHanaSR-hook
-
添加以下配置,<sid>替换为小写系统 ID 和<SID>大写系统 ID:
Cmnd_Alias SITE_SOK = /usr/sbin/crm_attribute -n hana_<sid>_site_srHook_[a-zA-Z0-9_]* -v SOK -t crm_config -s SAPHanaSR Cmnd_Alias SITE_SFAIL = /usr/sbin/crm_attribute -n hana_<sid>_site_srHook_[a-zA-Z0-9_]* -v SFAIL -t crm_config -s SAPHanaSR Cmnd_Alias HOOK_HELPER = /usr/sbin/SAPHanaSR-hookHelper --sid=<SID> --case=checkTakeover <sid>adm ALL=(ALL) NOPASSWD: SITE_SOK, SITE_SFAIL, HOOK_HELPER
例如:
Cmnd_Alias SITE_SOK = /usr/sbin/crm_attribute -n hana_hdb_site_srHook_[a-zA-Z0-9_]* -v SOK -t crm_config -s SAPHanaSR Cmnd_Alias SITE_SFAIL = /usr/sbin/crm_attribute -n hana_hdb_site_srHook_[a-zA-Z0-9_]* -v SFAIL -t crm_config -s SAPHanaSR Cmnd_Alias HOOK_HELPER = /usr/sbin/SAPHanaSR-hookHelper --sid=HDB --case=checkTakeover hdbadm ALL=(ALL) NOPASSWD: SITE_SOK, SITE_SFAIL, HOOK_HELPER
注意
该语法使用 glob 表达式,允许它适应不同的 HSR 站点名称,同时避免使用通配符。这确保了灵活性和安全性。如果 SID 发生变化,仍需要进行修改。将替换为
<sid>
与您的安装相匹配的小写字母sid
和<SID>
大写字母SID
。
-
-
重新加载配置
在 <sid>adm 重新加载时,
global.ini
使用 HANA 重启或命令重新加载更改:hdbadm> hdbnsutil -reconfig
-
验证挂钩配置
以 <sid>adm 的身份验证挂钩是否已加载:
hdbadm> cdtrace hdbadm> grep "loading HA/DR Provider" nameserver*
-
将配置复制到辅助设备
-
确认 global.ini 更改已复制到辅助系统
-
在辅助系统上创建相应的 sudoers.d 文件
-
配置 susTkOver 集群挂钩以确保集群意识到手动接管
susTkOver如果 SAP HANA 多状态资源(由 SAPHana 或 SAPHana控制器管理)处于活动状态,.py 可防止手动接管 HANA 主资源,除非集群设置为维护模式或 Linux 集群已停止。
欲了解更多详情:
# man susTkOver.py
除了上一个挂钩的步骤外,还可以在每个节点的 global.ini 中添加一个额外的条目。必须重新启动 Hana:
[ha_dr_provider_susTkOver] provider = susTkOver path = /usr/share/SAPHanaSR execution_order = 2 sustkover_timeout = 30 [trace] ha_dr_sustkover = info
(可选)配置 susChkSrv 群集挂钩(快死索引服务器)
在默认配置中,即使受集群保护,SAP HANA 的故障 IndexServer 也会导致进程在本地重新启动。停止进程和重新加载内存所花费的时间可能会影响恢复时间目标 (RTO) 和性能。SAP HANA 挂钩 suschksRV 提供了一个选项来触发操作,例如基于 HA/DR 提供者挂钩方法 srServiceState Changed () 的屏蔽或关闭,这反过来又会触发故障转移。
重要
由于可以使用几个不同的选项来配置此挂钩。我们建议您查阅手册页或 SUSE 文档,并评估适合您的设置的最佳选择。
# man susChksrv.py
使用量产规模的系统测试场景,以评估恢复运营的时间是否符合您的非功能要求。
有关更多信息,请参阅 SUSE 博客:SAP HANA 死亡索引服务器的紧急制动
(可选)配置快速启动选项
尽管超出了本文档的范围,但 SAP HANA 快速重启选项使用 tmpfs 文件系统来保留和重复使用主数据片段,以加快 SAP HANA 的重启速度。这在操作系统未重新启动(包括索引服务器的本地重启)的情况下有效。
快速启动选项可能是 susChkSrv 挂钩的替代方案。
有关更多信息,请参阅 SAP 文档:SAP HANA 快速重启选项
查看系统集成
查看 SAP HANA 版本和 systemd 版本,以确定 systemd 的先决条件是否可用:
sidadm> systemctl --version
操作系统版本
-
SUSE Linux 企业服务器 15(systemd 版本 234)
SAP HANA 修订版
-
SAP HANA SPS07 修订版 70
在使用具有 systemd 集成的 SAP HANA 版本(SPS07 及更高版本)时,您必须运行以下步骤,以防止在故意停止亚马逊 EC2 实例时节点被屏蔽。参见 Note 3189534-Linux:sapstartsrv 和 SAP HANA 的系统集成
-
验证 SAP HANA 是否已与 systemd 集成。如果已集成,则会出现 systemd 服务名称
SAP<SID>_<hana_sys_nr>.service
,例如。例如,对于 SID HDB 和实例编号 00,SAPHDB_00.service
是服务名称。以 root 用户身份使用以下命令查找 SAP systemd 服务:
# systemctl list-unit-files | grep -i sap
-
创建起搏器服务插件文件:
# mkdir -p /etc/systemd/system/pacemaker.service.d/
-
创建包含以下内容的文件/etc/systemd/system/pacemaker.service.d/50-saphana.conf:
[Unit] Description=pacemaker needs SAP instance service Documentation=man:SAPHanaSR_basic_cluster(7) Wants=SAP<SID>_<hana_sys_nr>.service After=SAP<SID>_<hana_sys_nr>.service
-
通过重新加载 systemd 来启用插入式文件:
# systemctl daemon-reload
-
验证更改是否处于活动状态:
# systemctl show pacemaker.service | grep SAP<SID>_<hana_sys_nr>
例如,对于 SID HDB 和实例编号 00,预计会有以下输出:
# systemctl show pacemaker.service | grep SAPHDB_00 Wants=SAPHDB_00.service resource-agents-deps.target dbus.service After=system.slice network.target corosync.service resource-agents-deps.target basic.target rsyslog.service SAPHDB_00.service systemd-journald.socket sysinit.target time-sync.target dbus.service sbd.service