你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Red Hat Enterprise Linux 上 Azure VM 中 SAP HANA 的高可用性
对于本地开发,可以使用 HANA 系统复制或共享存储为 SAP HANA 建立高可用性(HA)。 在 Azure 虚拟机上,Azure 上的 HANA 系统复制目前是唯一受支持的 HA 函数。
SAP HANA 复制由一个主节点和至少一个辅助节点组成。 对主节点上数据所做的更改以同步或异步方式复制到辅助节点。
本文介绍如何部署和配置虚拟机(VM)、安装群集框架以及安装和配置 SAP HANA 系统复制。
在示例配置和安装命令中,使用了实例编号 03 和 HANA 系统 ID HN1。
先决条件
请先阅读以下 SAP 说明和文档:
- SAP 说明 1928533,其中包含:
- SAP 软件部署支持的 Azure VM 大小的列表。
- Azure VM 大小的重要容量信息。
- 支持的 SAP 软件和操作系统(OS)和数据库组合。
- Microsoft Azure 上 Windows 和 Linux 所需的 SAP 内核版本。
- SAP 说明 2015553 列出了在 Azure 中 SAP 支持的 SAP 软件部署的先决条件。
- SAP 说明 2002167 包含适用于 Red Hat Enterprise Linux 的建议 OS 设置。
- SAP 说明 2009879 包含适用于 Red Hat Enterprise Linux 的 SAP HANA 指南。
- SAP 说明 3108302 具有适用于 Red Hat Enterprise Linux 9.x 的 SAP HANA 指南。
- SAP 说明 2178632 包含为 Azure 中的 SAP 报告的所有监控指标的详细信息。
- SAP 说明 2191498 包含 Azure 中的 Linux 所需的 SAP 主机代理版本。
- SAP 说明 2243692 包含 Azure 中的 Linux 上的 SAP 许可的相关信息。
- SAP 说明 1999351 包含适用于 SAP 的 Azure 增强型监视扩展的更多故障排除信息。
- SAP Community WIKI 包含适用于 Linux 的所有必需 SAP 说明。
- 适用于 Linux 上的 SAP 的 Azure 虚拟机规划和实施
- 适用于 Linux 上的 SAP 的 Azure 虚拟机部署(本文)
- 适用于 Linux 上的 SAP 的 Azure 虚拟机 DBMS 部署
- Pacemaker 群集中的 SAP HANA 系统复制
- 通用 RHEL 文档:
- Azure 特定的 RHEL 文档:
- Support Policies for RHEL High Availability Clusters - Microsoft Azure Virtual Machines as Cluster Members(RHEL 高可用性群集的支持策略 - Microsoft Azure 虚拟机作为群集成员)
- Installing and Configuring a Red Hat Enterprise Linux 7.4 (and later) High-Availability Cluster on Microsoft Azure(在 Microsoft Azure 上安装和配置 Red Hat Enterprise Linux 7.4 [及更高版本] 高可用性群集)
- Install SAP HANA on Red Hat Enterprise Linux for Use in Microsoft Azure(在 Red Hat Enterprise Linux 上安装要在 Microsoft Azure 中使用的 SAP HANA)
概述
若要实现 HA,SAP HANA 安装在两个 VM 上。 数据将使用 HANA 系统复制进行复制。
SAP HANA 系统复制设置使用专用虚拟主机名和虚拟 IP 地址。 在 Azure 上,需要负载均衡器才能使用虚拟 IP 地址。 显示的配置展示了一个负载均衡器,其中:
- 前端 IP 地址:10.0.0.13 (hn1-db)
- 探测端口:62503
为 Linux 部署
Azure 市场包含具有高可用性加载项的 SAP HANA 限定的映像,这些映像可用于使用各种版本的 Red Hat 部署新 VM。
通过Azure 门户手动部署 Linux VM
本文档假定你已部署资源组、 Azure 虚拟网络和子网。
为 SAP HANA 部署 VM。 选择 HANA 系统支持的合适 RHEL 映像。 可以在任一可用性选项中部署 VM:规模集、可用性区域或可用性集。
重要
请确保你选择的 OS 已通过 SAP 针对你计划在部署中使用的特定 VM 类型上的 SAP HANA 的认证。 可以在 SAP HANA 认证的 IaaS 平台中查找 SAP HANA 认证的 VM 类型及其 OS 版本。 请确保查看 VM 类型的详细信息,以获取适用于特定 VM 类型的 SAP HANA 支持的 OS 版本的完整列表。
在 VM 配置期间,可以在网络部分创建或选择现有负载均衡器。 如果要创建新的负载均衡器,请执行以下步骤:
创建前端 IP 池:
- 打开负载均衡器,选择前端 IP 池,然后选择“添加”。
- 输入新前端 IP 池的名称(例如 hana-frontend)。
- 将分配设置为静态并输入 IP 地址(例如 10.0.0.13)。
- 选择“确定”。
- 创建新前端 IP 池后,请记下池 IP 地址。
创建单个后端池:
- 打开负载均衡器,选择“后端池”,然后选择“添加”。
- 输入新后端池的名称(例如 hana-backend)。
- 对于“后端池配置”,选择“NIC”。
- 选择“添加虚拟机”。
- 选择 HANA 群集的 VM。
- 选择“添加” 。
- 选择“保存” 。
创建运行状况探测:
- 打开负载均衡器,选择运行状况探测,然后选择“添加”。
- 输入新运行状况探测的名称(例如 hana-hp)。
- 选择“TCP”作为协议,并选择端口 62503。 始终将“间隔”值设置为 5。
- 选择“确定”。
创建负载均衡规则:
- 打开负载均衡器,选择负载均衡规则,然后选择“添加”。
- 输入新负载均衡器规则的名称(例如 hana-lb)。
- 选择前面创建的前端 IP 地址、后端池和运行状况探测(例如 hana-frontend、hana-backend 和 hana-hp)。
- 将“空闲超时”增大到 30 分钟。
- 选择“HA 端口”。
- 将“空闲超时”增大到 30 分钟。
- 确保启用浮动 IP。
- 选择“确定”。
有关 SAP HANA 所需端口的详细信息,请参阅 SAP HANA 租户数据库指南中的连接到租户数据库一章或 SAP 说明 2388694。
重要
负载均衡方案中的 NIC 辅助 IP 配置不支持浮动 IP。 有关详细信息,请参阅Azure 负载均衡器限制。 如果你需要为 VM 提供另一个 IP 地址,请部署第二个 NIC。
注意
当没有公共 IP 地址的 VM 放置在标准Azure 负载均衡器的内部(无公共 IP 地址)实例的后端池中时,除非执行更多配置以允许路由到公共终结点,否则不会建立出站 Internet 连接。 有关如何实现出站连接的详细信息,请参阅 SAP 高可用性方案中使用 Azure 标准负载均衡器的 VM 的公共终结点连接。
重要
请勿在放置于 Azure 负载均衡器之后的 Azure VM 上启用 TCP 时间戳。 启用 TCP 时间戳可能会导致运行状况探测失败。 将参数 net.ipv4.tcp_timestamps 设置为 0。 有关详细信息,请参阅负载均衡器运行状况探测。 另请参阅 SAP 说明 2382421。
安装 SAP HANA
本部分中的步骤使用以下前缀:
- [A] :该步骤适用于所有节点。
- [1] :该步骤仅适用于节点 1。
- [2] :该步骤仅适用于 Pacemaker 群集的节点 2。
[A] 设置磁盘布局:逻辑卷管理器 (LVM) 。
我们建议对存储数据和日志文件的卷使用 LVM。 以下示例假定 VM 附加了四个数据磁盘,用于创建两个卷。
列出所有可用的磁盘:
ls /dev/disk/azure/scsi1/lun*
示例输出:
/dev/disk/azure/scsi1/lun0 /dev/disk/azure/scsi1/lun1 /dev/disk/azure/scsi1/lun2 /dev/disk/azure/scsi1/lun3
为要使用的所有磁盘创建物理卷:
sudo pvcreate /dev/disk/azure/scsi1/lun0 sudo pvcreate /dev/disk/azure/scsi1/lun1 sudo pvcreate /dev/disk/azure/scsi1/lun2 sudo pvcreate /dev/disk/azure/scsi1/lun3
为数据文件创建卷组。 将一个卷组用于日志文件,将另一个卷组用于 SAP HANA 的共享目录:
sudo vgcreate vg_hana_data_HN1 /dev/disk/azure/scsi1/lun0 /dev/disk/azure/scsi1/lun1 sudo vgcreate vg_hana_log_HN1 /dev/disk/azure/scsi1/lun2 sudo vgcreate vg_hana_shared_HN1 /dev/disk/azure/scsi1/lun3
创建逻辑卷。 线性卷是使用不带
-i
开关的lvcreate
创建的。 我们建议你创建一个带区卷,以获得更好的 I/O 性能。 将带区大小与 SAP HANA VM 存储配置中记录的值保持一致。 该-i
参数应是基础物理卷的数量,并且-I
该参数是条带大小。在本文档中,两个物理卷用于数据卷,因此
-i
开关参数设置为 2。 数据卷的带区大小为 256 KiB。 一个物理卷用于日志卷,因此,-i
或-I
开关不会显式用于日志卷命令。重要
对每个数据、日志或共享卷使用多个物理卷时,请使用
-i
开关,并将其设置为基础物理卷的数量。 创建带区卷时,请使用-I
开关来指定带区大小。 有关建议的存储配置,包括带区大小和磁盘数量,请参阅 SAP HANA VM 存储配置。 以下布局示例不一定满足特定系统大小的性能准则。 它们仅供参考。sudo lvcreate -i 2 -I 256 -l 100%FREE -n hana_data vg_hana_data_HN1 sudo lvcreate -l 100%FREE -n hana_log vg_hana_log_HN1 sudo lvcreate -l 100%FREE -n hana_shared vg_hana_shared_HN1 sudo mkfs.xfs /dev/vg_hana_data_HN1/hana_data sudo mkfs.xfs /dev/vg_hana_log_HN1/hana_log sudo mkfs.xfs /dev/vg_hana_shared_HN1/hana_shared
不要通过发出装载命令来装载目录。 而是在配置中
fstab
输入配置,并发出最终mount -a
配置来验证语法。 首先为每个卷创建装载目录:sudo mkdir -p /hana/data sudo mkdir -p /hana/log sudo mkdir -p /hana/shared
接下来,通过在文件中插入以下行
/etc/fstab
,为这三个逻辑卷创建fstab
条目:/dev/mapper/vg_hana_data_HN1-hana_data /hana/data xfs defaults,nofail 0 2 /dev/mapper/vg_hana_log_HN1-hana_log /hana/log xfs defaults,nofail 0 2 /dev/mapper/vg_hana_shared_HN1-hana_shared /hana/shared xfs defaults,nofail 0 2
最后,一次性装载新卷:
sudo mount -a
[A] 为所有主机设置主机名解析。
可以使用 DNS 服务器或修改
/etc/hosts
所有节点上的文件,方法是为所有节点创建条目,/etc/hosts
如下所示:10.0.0.5 hn1-db-0 10.0.0.6 hn1-db-1
[A] 为 HANA 配置执行 RHEL。
按照以下说明配置 RHEL:
- 2447641 - 在 RHEL 7.X 上安装 SAP HANA SPS 12 所需的其他包
- 2292690 - SAP HANA DB: Recommended OS settings for RHEL 7(2292690 - SAP HANA DB:RHEL 7 的建议 OS 设置)
- 2777782 - SAP HANA DB:建议用于 RHEL 8 的操作系统设置
- 2455582 - Linux:运行使用 GCC 6.x 编译的 SAP 应用程序
- 2593824 - Linux:运行使用 GCC 7.x 编译的 SAP 应用程序
- 2886607 - Linux:运行使用 GCC 9.x 编译的 SAP 应用程序
[A] 安装 SAP HANA。
若要安装 SAP HANA 系统复制,请参阅使用 RHEL HA 加载项自动执行 SAP HANA 纵向扩展系统复制。
从 HANA DVD 运行 hdblcm 程序。 在提示符下输入以下值:
- 选择安装:输入 1。
- 选择要安装的其他组件:输入 1。
- 输入 安装路径 [/hana/shared]:选择 Enter。
- 输入 本地主机名 [..]:选择 Enter。
- 是否要将其他主机添加到系统? (y/n) [n]:选择 Enter。
- 输入 SAP HANA 系统 ID:输入 HANA 的 SID,例如: HN1。
- 输入 实例编号 [00]:输入 HANA 实例编号。 如果使用了 Azure 模板或者遵循了本文的手动部署部分,请输入 03。
- 选择数据库模式/输入索引 [1]:选择 Enter。
- 选择 系统使用情况/输入索引 [4]:选择系统使用情况值。
- 输入 数据卷 的位置 [/hana/data]:选择 Enter。
- 输入 日志卷 的位置 [/hana/log]:选择 Enter。
- 是否限制最大内存分配? [n]:选择 Enter。
- 输入 主机“... ”的证书主机名 ...“:选择 Enter。
- 输入 SAP 主机代理用户(sapadm)密码:输入主机代理用户密码。
- 确认 SAP 主机代理用户(sapadm)密码:再次输入主机代理用户密码进行确认。
- 输入系统管理员istrator (hdbadm) 密码:输入系统管理员密码。
- 确认系统管理员istrator (hdbadm) 密码:再次输入系统管理员密码进行确认。
- 输入系统管理员istrator Home Directory [/usr/sap/HN1/home]:选择 Enter。
- 输入系统管理员istrator Login Shell [/bin/sh]:选择 Enter。
- 输入系统管理员istrator 用户 ID [1001]:选择 Enter。
- 输入 用户组 (sapsys) [79]的 ID:选择 Enter。
- 输入 数据库用户(SYSTEM)密码:输入数据库用户密码。
- 确认 数据库用户(SYSTEM)密码:再次输入数据库用户密码进行确认。
- 重新引导计算机后是否重新启动系统? [n]:选择 Enter。
- 是否继续? (y/n):验证摘要。 按 y 继续。
[A] 升级 SAP 主机代理。
从 SAP 软件中心下载最新的 SAP 主机代理存档,并运行以下命令来升级代理。 替换存档的路径,使其指向已下载的文件:
sudo /usr/sap/hostctrl/exe/saphostexec -upgrade -archive <path to SAP Host Agent>;
[A] 配置防火墙。
为Azure 负载均衡器探测端口创建防火墙规则。
sudo firewall-cmd --zone=public --add-port=62503/tcp sudo firewall-cmd --zone=public --add-port=62503/tcp --permanent
配置 SAP HANA 2.0 系统复制
本部分中的步骤使用以下前缀:
- [A] :该步骤适用于所有节点。
- [1] :该步骤仅适用于节点 1。
- [2] :该步骤仅适用于 Pacemaker 群集的节点 2。
[A] 配置防火墙。
创建防火墙规则以允许 HANA 系统复制和客户端流量。 所有 SAP 产品的 TCP/IP 端口上均列出了所需端口。 以下命令只是允许 HANA 2.0 系统复制和客户端流量流向数据库 SYSTEMDB、HN1 和 NW1 的示例。
sudo firewall-cmd --zone=public --add-port=40302/tcp --permanent sudo firewall-cmd --zone=public --add-port=40302/tcp sudo firewall-cmd --zone=public --add-port=40301/tcp --permanent sudo firewall-cmd --zone=public --add-port=40301/tcp sudo firewall-cmd --zone=public --add-port=40307/tcp --permanent sudo firewall-cmd --zone=public --add-port=40307/tcp sudo firewall-cmd --zone=public --add-port=40303/tcp --permanent sudo firewall-cmd --zone=public --add-port=40303/tcp sudo firewall-cmd --zone=public --add-port=40340/tcp --permanent sudo firewall-cmd --zone=public --add-port=40340/tcp sudo firewall-cmd --zone=public --add-port=30340/tcp --permanent sudo firewall-cmd --zone=public --add-port=30340/tcp sudo firewall-cmd --zone=public --add-port=30341/tcp --permanent sudo firewall-cmd --zone=public --add-port=30341/tcp sudo firewall-cmd --zone=public --add-port=30342/tcp --permanent sudo firewall-cmd --zone=public --add-port=30342/tcp
[1] 创建租户数据库。
如果使用的是 SAP HANA 2.0 或 MDC,请为 SAP NetWeaver 系统创建一个租户数据库。 将 NW1 替换为 SAP 系统的 SID。
以 <hanasid>adm 身份运行以下命令:
hdbsql -u SYSTEM -p "[passwd]" -i 03 -d SYSTEMDB 'CREATE DATABASE NW1 SYSTEM USER PASSWORD "<passwd>"'
[1] 在第一个节点上配置系统副本 (replica)tion。
以 <hanasid>adm 身份备份数据库:
hdbsql -d SYSTEMDB -u SYSTEM -p "<passwd>" -i 03 "BACKUP DATA USING FILE ('initialbackupSYS')" hdbsql -d HN1 -u SYSTEM -p "<passwd>" -i 03 "BACKUP DATA USING FILE ('initialbackupHN1')" hdbsql -d NW1 -u SYSTEM -p "<passwd>" -i 03 "BACKUP DATA USING FILE ('initialbackupNW1')"
将系统 PKI 文件复制到辅助站点:
scp /usr/sap/HN1/SYS/global/security/rsecssfs/data/SSFS_HN1.DAT hn1-db-1:/usr/sap/HN1/SYS/global/security/rsecssfs/data/ scp /usr/sap/HN1/SYS/global/security/rsecssfs/key/SSFS_HN1.KEY hn1-db-1:/usr/sap/HN1/SYS/global/security/rsecssfs/key/
创建主站点:
hdbnsutil -sr_enable --name=SITE1
[2] 在第二个节点上配置系统副本 (replica)tion。
注册第二个节点以启动系统复制。 以 <hanasid>adm 身份运行以下命令:
sapcontrol -nr 03 -function StopWait 600 10 hdbnsutil -sr_register --remoteHost=hn1-db-0 --remoteInstance=03 --replicationMode=sync --name=SITE2
[1] 检查副本 (replica)状态。
检查复制状态并等待,直到所有数据库都保持同步。如果状态一直“未知”,请检查防火墙设置。
sudo su - hn1adm -c "python /usr/sap/HN1/HDB03/exe/python_support/systemReplicationStatus.py" # | Database | Host | Port | Service Name | Volume ID | Site ID | Site Name | Secondary | Secondary | Secondary | Secondary | Secondary | Replication | Replication | Replication | # | | | | | | | | Host | Port | Site ID | Site Name | Active Status | Mode | Status | Status Details | # | -------- | -------- | ----- | ------------ | --------- | ------- | --------- | --------- | --------- | --------- | --------- | ------------- | ----------- | ----------- | -------------- | # | SYSTEMDB | hn1-db-0 | 30301 | nameserver | 1 | 1 | SITE1 | hn1-db-1 | 30301 | 2 | SITE2 | YES | SYNC | ACTIVE | | # | HN1 | hn1-db-0 | 30307 | xsengine | 2 | 1 | SITE1 | hn1-db-1 | 30307 | 2 | SITE2 | YES | SYNC | ACTIVE | | # | NW1 | hn1-db-0 | 30340 | indexserver | 2 | 1 | SITE1 | hn1-db-1 | 30340 | 2 | SITE2 | YES | SYNC | ACTIVE | | # | HN1 | hn1-db-0 | 30303 | indexserver | 3 | 1 | SITE1 | hn1-db-1 | 30303 | 2 | SITE2 | YES | SYNC | ACTIVE | | # # status system replication site "2": ACTIVE # overall system replication status: ACTIVE # # Local System Replication State # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # mode: PRIMARY # site id: 1 # site name: SITE1
配置 SAP HANA 1.0 系统复制
本部分中的步骤使用以下前缀:
- [A] :该步骤适用于所有节点。
- [1] :该步骤仅适用于节点 1。
- [2] :该步骤仅适用于 Pacemaker 群集的节点 2。
[A] 配置防火墙。
创建防火墙规则以允许 HANA 系统复制和客户端流量。 所有 SAP 产品的 TCP/IP 端口上均列出了所需端口。 以下命令是允许 HANA 2.0 系统复制的示例。 针对 SAP HANA 1.0 安装对其进行调整。
sudo firewall-cmd --zone=public --add-port=40302/tcp --permanent sudo firewall-cmd --zone=public --add-port=40302/tcp
[1] 创建所需的用户。
以 root 身份运行以下命令。 请确保将 HANA 系统 ID(例如 HN1)、实例编号(03)和任何用户名的值替换为 SAP HANA 安装的值:
PATH="$PATH:/usr/sap/HN1/HDB03/exe" hdbsql -u system -i 03 'CREATE USER hdbhasync PASSWORD "passwd"' hdbsql -u system -i 03 'GRANT DATA ADMIN TO hdbhasync' hdbsql -u system -i 03 'ALTER USER hdbhasync DISABLE PASSWORD LIFETIME'
[A] 创建密钥存储条目。
以 root 身份运行以下命令来创建新的密钥存储条目:
PATH="$PATH:/usr/sap/HN1/HDB03/exe" hdbuserstore SET hdbhaloc localhost:30315 hdbhasync passwd
[1] 备份数据库。
以 root 身份备份数据库:
PATH="$PATH:/usr/sap/HN1/HDB03/exe" hdbsql -d SYSTEMDB -u system -i 03 "BACKUP DATA USING FILE ('initialbackup')"
如果使用多租户安装,还备份租户数据库:
hdbsql -d HN1 -u system -i 03 "BACKUP DATA USING FILE ('initialbackup')"
[1] 在第一个节点上配置系统副本 (replica)tion。
以
adm 身份创建主站点: su - hdbadm hdbnsutil -sr_enable –-name=SITE1
[2] 在辅助节点上配置系统副本 (replica)。
以
adm 身份注册辅助站点: HDB stop hdbnsutil -sr_register --remoteHost=hn1-db-0 --remoteInstance=03 --replicationMode=sync --name=SITE2 HDB start
创建 Pacemaker 群集
按照在 Azure 中的 Red Hat Enterprise Linux 上设置 Pacemaker 的步骤,创建适用于此 HANA 服务器的基本 Pacemaker。
重要
使用基于系统的 SAP 启动框架,SAP HANA 实例现在可以由系统管理。 所需的最低 Red Hat Enterprise Linux (RHEL) 版本是适用于 SAP 的 RHEL 8。 如 SAP 说明 3189534中所述,SAP HANA SPS07 修订版 70 或更高版本的任何新安装,或 HANA 系统更新到 HANA 2.0 SPS07 修订版 70 或更高版本,SAP 启动框架将自动注册到 systemd。
使用 HA 解决方案管理 SAP HANA 系统副本 (replica)与启用系统的 SAP HANA 实例(请参阅 SAP 说明3189534)结合使用时,需要执行其他步骤来确保 HA 群集可以管理 SAP 实例,而不会受到系统干扰。 因此,对于与 systemd 集成的 SAP HANA 系统,必须在所有群集节点上遵循 Red Hat 知识库(KB)A 7029705中概述的其他步骤。
实现 Python 系统复制挂钩 SAPHanaSR
这一重要步骤优化与群集的集成,并在需要群集故障转移时改进检测。 强烈建议配置 SAPHanaSR Python 挂钩。
[A] 在所有节点上安装 SAP HANA 资源代理。 确保启用包含程序包的存储库。 如果使用启用了 RHEL 8.x HA 的映像,则无需启用更多存储库。
# Enable repository that contains SAP HANA resource agents sudo subscription-manager repos --enable="rhel-sap-hana-for-rhel-7-server-rpms" sudo yum install -y resource-agents-sap-hana
[A] 安装 HANA
system replication hook
。 需要在两个 HANA DB 节点上安装挂钩。提示
Python 挂钩只能为 HANA 2.0 实现。
以
root
身份准备挂钩。mkdir -p /hana/shared/myHooks cp /usr/share/SAPHanaSR/srHook/SAPHanaSR.py /hana/shared/myHooks chown -R hn1adm:sapsys /hana/shared/myHooks
在两个节点上停止 HANA。 以 <sid>adm 身份运行。
sapcontrol -nr 03 -function StopSystem
在每个群集节点上调整
global.ini
。[ha_dr_provider_SAPHanaSR] provider = SAPHanaSR path = /hana/shared/myHooks execution_order = 1 [trace] ha_dr_saphanasr = info
[A] 群集需要在
sudoers
每个群集节点上配置 <sid>adm。 在此示例中,通过创建新文件来实现此目的。visudo
使用命令将拖放文件编辑20-saphana
为root
.sudo visudo -f /etc/sudoers.d/20-saphana
插入以下行,然后保存:
Cmnd_Alias SITE1_SOK = /usr/sbin/crm_attribute -n hana_hn1_site_srHook_SITE1 -v SOK -t crm_config -s SAPHanaSR Cmnd_Alias SITE1_SFAIL = /usr/sbin/crm_attribute -n hana_hn1_site_srHook_SITE1 -v SFAIL -t crm_config -s SAPHanaSR Cmnd_Alias SITE2_SOK = /usr/sbin/crm_attribute -n hana_hn1_site_srHook_SITE2 -v SOK -t crm_config -s SAPHanaSR Cmnd_Alias SITE2_SFAIL = /usr/sbin/crm_attribute -n hana_hn1_site_srHook_SITE2 -v SFAIL -t crm_config -s SAPHanaSR hn1adm ALL=(ALL) NOPASSWD: SITE1_SOK, SITE1_SFAIL, SITE2_SOK, SITE2_SFAIL Defaults!SITE1_SOK, SITE1_SFAIL, SITE2_SOK, SITE2_SFAIL !requiretty
[A] 在两个节点上启动 SAP HANA。 以 <sid>adm 身份运行。
sapcontrol -nr 03 -function StartSystem
[1] 验证是否安装了挂钩。 在活动 HANA 系统复制站点上以 <sid>adm 身份运行。
cdtrace awk '/ha_dr_SAPHanaSR.*crm_attribute/ \ { printf "%s %s %s %s\n",$2,$3,$5,$16 }' nameserver_*
# 2021-04-12 21:36:16.911343 ha_dr_SAPHanaSR SFAIL # 2021-04-12 21:36:29.147808 ha_dr_SAPHanaSR SFAIL # 2021-04-12 21:37:04.898680 ha_dr_SAPHanaSR SOK
有关 SAP HANA 系统复制挂钩实现的详细信息,请参阅 “启用 SAP HA/DR 提供程序挂钩”。
创建 SAP HANA 群集资源
创建 HANA 拓扑。 在其中一个 Pacemaker 群集节点上运行以下命令。 在这些说明中,请务必根据需要替换实例编号、HANA 系统 ID、IP 地址和系统名称。
sudo pcs property set maintenance-mode=true
sudo pcs resource create SAPHanaTopology_HN1_03 SAPHanaTopology SID=HN1 InstanceNumber=03 \
op start timeout=600 op stop timeout=300 op monitor interval=10 timeout=600 \
clone clone-max=2 clone-node-max=1 interleave=true
接着,创建 HANA 资源。
注意
本文包含对 Microsoft 不再使用的术语的引用。 在从软件中删除该术语后,我们会将其从本文中删除。
如果要在 RHEL 7.x 上生成群集,请使用以下命令:
sudo pcs resource create SAPHana_HN1_03 SAPHana SID=HN1 InstanceNumber=03 PREFER_SITE_TAKEOVER=true DUPLICATE_PRIMARY_TIMEOUT=7200 AUTOMATED_REGISTER=false \
op start timeout=3600 op stop timeout=3600 \
op monitor interval=61 role="Slave" timeout=700 \
op monitor interval=59 role="Master" timeout=700 \
op promote timeout=3600 op demote timeout=3600 \
master notify=true clone-max=2 clone-node-max=1 interleave=true
sudo pcs resource create vip_HN1_03 IPaddr2 ip="10.0.0.13"
sudo pcs resource create nc_HN1_03 azure-lb port=62503
sudo pcs resource group add g_ip_HN1_03 nc_HN1_03 vip_HN1_03
sudo pcs constraint order SAPHanaTopology_HN1_03-clone then SAPHana_HN1_03-master symmetrical=false
sudo pcs constraint colocation add g_ip_HN1_03 with master SAPHana_HN1_03-master 4000
sudo pcs resource defaults resource-stickiness=1000
sudo pcs resource defaults migration-threshold=5000
sudo pcs property set maintenance-mode=false
如果要在 RHEL 8.x/9.x 上生成群集,请使用以下命令:
sudo pcs resource create SAPHana_HN1_03 SAPHana SID=HN1 InstanceNumber=03 PREFER_SITE_TAKEOVER=true DUPLICATE_PRIMARY_TIMEOUT=7200 AUTOMATED_REGISTER=false \
op start timeout=3600 op stop timeout=3600 \
op monitor interval=61 role="Slave" timeout=700 \
op monitor interval=59 role="Master" timeout=700 \
op promote timeout=3600 op demote timeout=3600 \
promotable notify=true clone-max=2 clone-node-max=1 interleave=true
sudo pcs resource create vip_HN1_03 IPaddr2 ip="10.0.0.13"
sudo pcs resource create nc_HN1_03 azure-lb port=62503
sudo pcs resource group add g_ip_HN1_03 nc_HN1_03 vip_HN1_03
sudo pcs constraint order SAPHanaTopology_HN1_03-clone then SAPHana_HN1_03-clone symmetrical=false
sudo pcs constraint colocation add g_ip_HN1_03 with master SAPHana_HN1_03-clone 4000
sudo pcs resource defaults update resource-stickiness=1000
sudo pcs resource defaults update migration-threshold=5000
sudo pcs property set maintenance-mode=false
若要为 SAP HANA 配置 priority-fencing-delay
(仅适用于 pacemaker-2.0.4-6.el8 或更高版本),需要执行以下命令。
注意
如果有双节点群集,则可以配置 priority-fencing-delay
群集属性。 此属性引入了隔离节点的延迟,该节点在发生拆分脑方案时具有更高的总资源优先级。 有关详细信息,请参阅 Pacemaker 是否可以隔离运行最少资源的群集节点?。
属性 priority-fencing-delay
适用于 pacemaker-2.0.4-6.el8 或更高版本。 如果要在现有群集上设置 priority-fencing-delay
,请确保取消设置 pcmk_delay_max
隔离设备中的选项。
sudo pcs property set maintenance-mode=true
sudo pcs resource defaults update priority=1
sudo pcs resource update SAPHana_HN1_03-clone meta priority=10
sudo pcs property set priority-fencing-delay=15s
sudo pcs property set maintenance-mode=false
重要
在执行故障转移测试时,最好将 AUTOMATED_REGISTER
设置为 false
,以防止故障的主实例自动注册为辅助实例。 测试后,最佳做法是设置为AUTOMATED_REGISTER
true
在接管后,系统副本 (replica)可以自动恢复。
确保群集状态正常,并且已启动所有资源。 资源在哪个节点上运行并不重要。
注意
前面的配置中的超时只是示例,可能需要适应特定的 HANA 设置。 例如,如果启动 SAP HANA 数据库需要较长时间,则可能需要增加启动超时。
使用命令sudo pcs status
检查创建的群集资源的状态:
# Online: [ hn1-db-0 hn1-db-1 ]
#
# Full list of resources:
#
# azure_fence (stonith:fence_azure_arm): Started hn1-db-0
# Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]
# Started: [ hn1-db-0 hn1-db-1 ]
# Master/Slave Set: SAPHana_HN1_03-master [SAPHana_HN1_03]
# Masters: [ hn1-db-0 ]
# Slaves: [ hn1-db-1 ]
# Resource Group: g_ip_HN1_03
# nc_HN1_03 (ocf::heartbeat:azure-lb): Started hn1-db-0
# vip_HN1_03 (ocf::heartbeat:IPaddr2): Started hn1-db-0
在 Pacemaker 群集中配置 HANA 主动/读取启用的系统副本 (replica)
从 SAP HANA 2.0 SPS 01 开始,SAP 允许对 SAP HANA 系统复制启用主动/读取的设置,其中 SAP HANA 系统复制的辅助系统可以主动用于读取密集型工作负荷。
若要在群集中支持此类设置,需要第二个虚拟 IP 地址,这样客户端就可以访问启用了辅助读取的 SAP HANA 数据库。 为了确保在接管后仍可访问辅助副本 (replica)站点,群集需要使用辅助 SAPHana 资源移动虚拟 IP 地址。
本部分介绍在 Red Hat HA 群集中使用第二个虚拟 IP 管理 HANA 活动/读取启用系统副本 (replica)所需的其他步骤。
在继续操作之前,请确保已完全配置管理 SAP HANA 数据库的 Red Hat HA 群集,如文档前面的部分所述。
在 Azure 负载均衡器中进行其他设置,以实现启用活动/读取设置
若要继续执行有关预配第二个虚拟 IP 的更多步骤,请确保已按照“Azure 门户”部分手动部署 Linux VM 中所述配置Azure 负载均衡器。
对于标准负载均衡器,请按照前面部分中创建的同一负载均衡器执行这些步骤。
a. 创建第二个前端 IP 池:
- 打开负载均衡器,选择前端 IP 池,然后选择“添加”。
- 输入第二个新前端 IP 池的名称(例如“hana-secondaryIP”)。
- 将分配设置为静态并输入 IP 地址(例如 10.0.0.14)。
- 选择“确定”。
- 创建新前端 IP 池后,请记下池 IP 地址。
b. 创建运行状况探测:
- 打开负载均衡器,选择运行状况探测,然后选择“添加”。
- 输入新运行状况探测的名称(例如“hana-secondaryhp”)。
- 选择“TCP”作为协议,并选择端口“62603” 。 将 Interval 值设置为 5 ,并将 “不正常”阈值 设置为 2。
- 选择“确定”。
c. 创建负载均衡规则:
- 打开负载均衡器,选择负载均衡规则,然后选择“添加”。
- 输入新负载均衡器规则的名称(例如“hana-secondarylb”)。
- 选择前面创建的前端 IP 地址、后端池和运行状况探测(例如“hana-secondaryIP”、“hana-backend”和“hana-secondaryhp”)。
- 选择“HA 端口”。
- 确保启用浮动 IP。
- 选择“确定”。
配置启用 HANA 活动/读取的系统复制
“配置 SAP HANA 2.0 系统复制”部分介绍了 配置 HANA 系统复制 的步骤。 如果要在第二个节点上配置系统副本 (replica)tion 时部署启用了读取的辅助方案,请以 hanasidadm 身份运行以下命令:
sapcontrol -nr 03 -function StopWait 600 10
hdbnsutil -sr_register --remoteHost=hn1-db-0 --remoteInstance=03 --replicationMode=sync --name=SITE2 --operationMode=logreplay_readaccess
为已启用活动/读取设置添加辅助虚拟 IP 地址资源
可以通过以下命令配置第二个虚拟 IP 和适当的归置约束:
pcs property set maintenance-mode=true
pcs resource create secvip_HN1_03 ocf:heartbeat:IPaddr2 ip="10.40.0.16"
pcs resource create secnc_HN1_03 ocf:heartbeat:azure-lb port=62603
pcs resource group add g_secip_HN1_03 secnc_HN1_03 secvip_HN1_03
pcs constraint location g_secip_HN1_03 rule score=INFINITY hana_hn1_sync_state eq SOK and hana_hn1_roles eq 4:S:master1:master:worker:master
pcs constraint location g_secip_HN1_03 rule score=4000 hana_hn1_sync_state eq PRIM and hana_hn1_roles eq 4:P:master1:master:worker:master
pcs property set maintenance-mode=false
确保群集状态正常,并且所有资源都已启动。 第二个虚拟 IP 与 SAPHana 辅助资源一起在辅助站点上运行。
sudo pcs status
# Online: [ hn1-db-0 hn1-db-1 ]
#
# Full List of Resources:
# rsc_hdb_azr_agt (stonith:fence_azure_arm): Started hn1-db-0
# Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]:
# Started: [ hn1-db-0 hn1-db-1 ]
# Clone Set: SAPHana_HN1_03-clone [SAPHana_HN1_03] (promotable):
# Masters: [ hn1-db-0 ]
# Slaves: [ hn1-db-1 ]
# Resource Group: g_ip_HN1_03:
# nc_HN1_03 (ocf::heartbeat:azure-lb): Started hn1-db-0
# vip_HN1_03 (ocf::heartbeat:IPaddr2): Started hn1-db-0
# Resource Group: g_secip_HN1_03:
# secnc_HN1_03 (ocf::heartbeat:azure-lb): Started hn1-db-1
# secvip_HN1_03 (ocf::heartbeat:IPaddr2): Started hn1-db-1
在下一部分中,可以找到要运行的典型故障转移测试组。
在测试配置了启用了读取的辅助群集的 HANA 群集时,请注意第二个虚拟 IP 行为:
将SAPHana_HN1_03群集资源迁移到辅助站点 hn1-db-1 时,第二个虚拟 IP 将继续在同一站点 hn1-db-1 上运行。 如果已在
AUTOMATED_REGISTER="true"
hn1-db-0 上自动注册资源和 HANA 系统副本 (replica)tion,则第二个虚拟 IP 也会移动到 hn1-db-0。测试服务器崩溃时,第二个虚拟 IP 资源(secvip_HN1_03)和Azure 负载均衡器端口资源(secnc_HN1_03)与主虚拟 IP 资源一起在主服务器上运行。 因此,在辅助服务器关闭之前,连接到启用读取的 HANA 数据库的应用程序将连接到主 HANA 数据库。 此行为是预期的,因为你不希望连接到启用读取的 HANA 数据库的应用程序无法访问,直到辅助服务器不可用为止。
在第二个虚拟 IP 地址的故障转移和回退期间,使用第二个虚拟 IP 连接到 HANA 数据库的应用程序上的现有连接可能会中断。
安装程序将第二个虚拟 IP 资源分配给运行正常 SAP HANA 实例的节点的时间最大化。
测试群集设
本部分介绍如何测试设置。 在开始测试之前,请确保 Pacemaker 没有任何失败的操作(通过电脑状态),没有意外的位置约束(例如迁移测试的剩余),HANA 处于同步状态,例如,使用 systemReplicationStatus
。
sudo su - hn1adm -c "python /usr/sap/HN1/HDB03/exe/python_support/systemReplicationStatus.py"
测试迁移
开始测试之前的资源状态:
Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]
Started: [ hn1-db-0 hn1-db-1 ]
Master/Slave Set: SAPHana_HN1_03-master [SAPHana_HN1_03]
Masters: [ hn1-db-0 ]
Slaves: [ hn1-db-1 ]
Resource Group: g_ip_HN1_03
nc_HN1_03 (ocf::heartbeat:azure-lb): Started hn1-db-0
vip_HN1_03 (ocf::heartbeat:IPaddr2): Started hn1-db-0
可以通过运行以下命令作为根节点迁移 SAP HANA 主节点:
# On RHEL 7.x
pcs resource move SAPHana_HN1_03-master
# On RHEL 8.x
pcs resource move SAPHana_HN1_03-clone --master
如果设置 AUTOMATED_REGISTER="false"
,此命令应将 SAP HANA 主节点和包含虚拟 IP 地址的组迁移到 hn1-db-1
该节点。
迁移完成后, sudo pcs status
输出如下所示:
Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]
Started: [ hn1-db-0 hn1-db-1 ]
Master/Slave Set: SAPHana_HN1_03-master [SAPHana_HN1_03]
Masters: [ hn1-db-1 ]
Stopped: [ hn1-db-0 ]
Resource Group: g_ip_HN1_03
nc_HN1_03 (ocf::heartbeat:azure-lb): Started hn1-db-1
vip_HN1_03 (ocf::heartbeat:IPaddr2): Started hn1-db-1
SAP HANA 资源 hn1-db-0
已停止。 在这种情况下,通过运行以下命令将 HANA 实例配置为辅助实例,即 hn1adm:
sapcontrol -nr 03 -function StopWait 600 10
hdbnsutil -sr_register --remoteHost=hn1-db-1 --remoteInstance=03 --replicationMode=sync --name=SITE1
迁移过程将创建位置约束,需要再次删除这些约束。 以 root 或通过 sudo
以下命令运行以下命令:
pcs resource clear SAPHana_HN1_03-master
使用 pcs status
.. 监视 HANA 资源的状态。 启用 hn1-db-0
HANA 后,输出应如下所示:
Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]
Started: [ hn1-db-0 hn1-db-1 ]
Master/Slave Set: SAPHana_HN1_03-master [SAPHana_HN1_03]
Masters: [ hn1-db-1 ]
Slaves: [ hn1-db-0 ]
Resource Group: g_ip_HN1_03
nc_HN1_03 (ocf::heartbeat:azure-lb): Started hn1-db-1
vip_HN1_03 (ocf::heartbeat:IPaddr2): Started hn1-db-1
阻止网络通信
开始测试之前的资源状态:
Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]
Started: [ hn1-db-0 hn1-db-1 ]
Master/Slave Set: SAPHana_HN1_03-master [SAPHana_HN1_03]
Masters: [ hn1-db-1 ]
Slaves: [ hn1-db-0 ]
Resource Group: g_ip_HN1_03
nc_HN1_03 (ocf::heartbeat:azure-lb): Started hn1-db-1
vip_HN1_03 (ocf::heartbeat:IPaddr2): Started hn1-db-1
运行防火墙规则以阻止其中一个节点上的通信。
# Execute iptable rule on hn1-db-1 (10.0.0.6) to block the incoming and outgoing traffic to hn1-db-0 (10.0.0.5)
iptables -A INPUT -s 10.0.0.5 -j DROP; iptables -A OUTPUT -d 10.0.0.5 -j DROP
当群集节点无法相互通信时,存在拆分脑方案的风险。 在这种情况下,群集节点尝试同时相互隔离,从而导致围栏争用。 为了避免这种情况,我们建议在群集配置中设置 priority-fencing-delay 属性(仅适用于 pacemaker-2.0.4-6.el8 或更高版本)。
通过启用 priority-fencing-delay
该属性,群集会在托管 HANA 主资源的节点上引入隔离操作延迟,从而允许节点赢得围栏争用。
运行以下命令以删除防火墙规则:
# If the iptables rule set on the server gets reset after a reboot, the rules will be cleared out. In case they have not been reset, please proceed to remove the iptables rule using the following command.
iptables -D INPUT -s 10.0.0.5 -j DROP; iptables -D OUTPUT -d 10.0.0.5 -j DROP
测试 Azure 隔离代理
注意
本文包含对 Microsoft 不再使用的术语的引用。 在从软件中删除该术语后,我们会将其从本文中删除。
开始测试之前的资源状态:
Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]
Started: [ hn1-db-0 hn1-db-1 ]
Master/Slave Set: SAPHana_HN1_03-master [SAPHana_HN1_03]
Masters: [ hn1-db-1 ]
Slaves: [ hn1-db-0 ]
Resource Group: g_ip_HN1_03
nc_HN1_03 (ocf::heartbeat:azure-lb): Started hn1-db-1
vip_HN1_03 (ocf::heartbeat:IPaddr2): Started hn1-db-1
可以通过禁用节点上的网络接口(SAP HANA 作为主控节点运行)来测试 Azure 隔离代理的设置。 有关如何模拟网络故障的说明,请参阅 Red Hat 知识库文章 79523。
在此示例中,我们将 net_breaker
脚本用作根目录来阻止对网络的所有访问:
sh ./net_breaker.sh BreakCommCmd 10.0.0.6
VM 现在应根据群集配置重启或停止。
如果设置为 stonith-action
该设置 off
,则会停止 VM,并将资源迁移到正在运行的 VM。
再次启动 VM 后,如果设置 AUTOMATED_REGISTER="false"
,SAP HANA 资源将无法作为辅助资源启动。 在这种情况下,通过以 hn1adm 用户身份运行以下命令,将 HANA 实例配置为辅助实例:
sapcontrol -nr 03 -function StopWait 600 10
hdbnsutil -sr_register --remoteHost=hn1-db-0 --remoteInstance=03 --replicationMode=sync --name=SITE2
切换回根目录并清理失败状态:
# On RHEL 7.x
pcs resource cleanup SAPHana_HN1_03-master
# On RHEL 8.x
pcs resource cleanup SAPHana_HN1_03 node=<hostname on which the resource needs to be cleaned>
测试之后的资源状态:
Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]
Started: [ hn1-db-0 hn1-db-1 ]
Master/Slave Set: SAPHana_HN1_03-master [SAPHana_HN1_03]
Masters: [ hn1-db-0 ]
Slaves: [ hn1-db-1 ]
Resource Group: g_ip_HN1_03
nc_HN1_03 (ocf::heartbeat:azure-lb): Started hn1-db-0
vip_HN1_03 (ocf::heartbeat:IPaddr2): Started hn1-db-0
测试手动故障转移
开始测试之前的资源状态:
Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]
Started: [ hn1-db-0 hn1-db-1 ]
Master/Slave Set: SAPHana_HN1_03-master [SAPHana_HN1_03]
Masters: [ hn1-db-0 ]
Slaves: [ hn1-db-1 ]
Resource Group: g_ip_HN1_03
nc_HN1_03 (ocf::heartbeat:azure-lb): Started hn1-db-0
vip_HN1_03 (ocf::heartbeat:IPaddr2): Started hn1-db-0
可以通过停止节点上的 hn1-db-0
群集作为根来测试手动故障转移:
pcs cluster stop
故障转移后,可以再次启动该群集。 如果设置 AUTOMATED_REGISTER="false"
,节点上的 hn1-db-0
SAP HANA 资源无法作为辅助数据库启动。 在这种情况下,通过以 root 身份运行以下命令,将 HANA 实例配置为辅助实例:
pcs cluster start
以 hn1adm 身份运行以下命令:
sapcontrol -nr 03 -function StopWait 600 10
hdbnsutil -sr_register --remoteHost=hn1-db-1 --remoteInstance=03 --replicationMode=sync --name=SITE1
然后作为根:
# On RHEL 7.x
pcs resource cleanup SAPHana_HN1_03-master
# On RHEL 8.x
pcs resource cleanup SAPHana_HN1_03 node=<hostname on which the resource needs to be cleaned>
测试之后的资源状态:
Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]
Started: [ hn1-db-0 hn1-db-1 ]
Master/Slave Set: SAPHana_HN1_03-master [SAPHana_HN1_03]
Masters: [ hn1-db-1 ]
Slaves: [ hn1-db-0 ]
Resource Group: g_ip_HN1_03
nc_HN1_03 (ocf::heartbeat:azure-lb): Started hn1-db-1
vip_HN1_03 (ocf::heartbeat:IPaddr2): Started hn1-db-1