你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在 Azure 中,使用 Windows 故障转移群集和共享磁盘为 SAP ASCS/SCS 实例安装 SAP NetWeaver HA
本文介绍如何通过使用 Windows Server 故障转移群集和群集共享磁盘,群集化 SAP ASCS/SCS 实例,在 Azure 中配置高可用性 SAP 系统。 如体系结构指南:使用群集共享磁盘在 Windows 故障转移群集上群集化 SAP ASCS/SCS 实例中所述,有两种群集共享磁盘的替代方案:
- Azure 共享磁盘
- 使用 SIOS DataKeeper Cluster Edition 创建将模拟群集共享磁盘的镜像存储
先决条件
在开始安装之前,请查看这些文档:
本文不会介绍 DBMS 安装,因为安装因所使用的 DBMS 系统而异。 本文假设 DBMS 在高可用性方面的疑虑已通过不同 DBMS 供应商为 Azure 提供的功能支持而获得解决。 例如,适用于 SQL Server 的 Always On 或数据库镜像,以及适用于 Oracle 数据库的 Oracle Data Guard。 本文不介绍 DBMS 的高可用性方案。
当不同的 DBMS 服务与 Azure 中的群集 SAP ASCS 或 SCS 配置交互时,不存在任何特殊注意事项。
注意
SAP NetWeaver ABAP 系统、Java 系统和 ABAP+Java 系统的安装过程几乎完全相同。 最明显的差别在于,SAP ABAP 系统只有一个 ASCS 实例。 SAP Java 系统有一个 SCS 实例。 SAP ABAP+Java 系统有一个 ASCS 实例和一个在相同 Microsoft 故障转移群集组中运行的 SCS 实例。 将明确说明每个 SAP NetWeaver 安装堆栈的所有安装差异。 可以假定剩余步骤都相同。
使用高可用性 ASCS/SCS 实例安装 SAP
重要
如果使用 SIOS 显示共享磁盘,请不要将页面文件放置在 SIOS DataKeeper 镜像卷上。 可将页面文件保留在 Azure 虚拟机的临时驱动器 D 上,这是默认值。 如果它尚未在该位置,请将 Windows 页面文件移到 Azure 虚拟机的驱动器 D。
安装包含高可用性 ASCS/SCS 实例的 SAP 系统的过程包括以下任务:
- 为群集 SAP ASCS/SCS 实例创建虚拟主机名。
- 在第一个群集节点上安装 SAP。
- 修改 ASCS/SCS 实例的 SAP 配置文件。
- 添加探测端口。
- 打开 Windows 防火墙探测端口。
为群集 SAP ASCS/SCS 实例创建虚拟主机名
在 Windows DNS 管理器中为 ASCS/SCS 实例的虚拟主机名创建 DNS 条目。
重要
分配给 ASCS/SCS 实例的虚拟主机名的 IP 地址必须与分配给 Azure 负载均衡器的 IP 地址相同。
定义 SAP ASCS/SCS 群集虚拟名称和 TCP/IP 地址的 DNS 条目
如果使用的是新的 SAP 排队复制服务器 2(也是群集实例),则还需要在 DNS 中为 ERS2 保留虚拟主机名。
重要
分配给 ERS2 实例的虚拟主机名的 IP 地址必须是分配给 Azure 负载均衡器的第二个 IP 地址。
定义 SAP ERS2 群集虚拟名称和 TCP/IP 地址的 DNS 条目
若要定义分配给虚拟主机名的 IP 地址,请选择“DNS 管理器”>“域” 。
SAP ASCS/SCS 群集配置的新虚拟名称和 TCP/IP 地址
安装 SAP 的第一个群集节点
在群集节点 A 上执行第一个群集节点选项:
- ABAP 系统:ASCS 实例编号 00
- Java 系统:SCS 实例编号 01
- ABAP+Java 系统:ASCS 实例编号 00 和 SCS 实例编号 01
重要
请记住,Azure 内部负载均衡器的负载均衡规则的配置(如果使用基本 SKU)和所选的 SAP 实例编号必须匹配。
按照 SAP 说明的安装过程操作。 请确保在开始安装选项“第一个群集节点”中,选择“群集共享磁盘”作为配置选项。
提示
SAP 安装文档介绍如何安装第一个 ASCS/SCS 群集节点。
修改 ASCS/SCS 实例的 SAP 配置文件
如果运行的是排队复制服务器 1,请添加 SAP 配置文件参数 enque/encni/set_so_keepalive
,如下所述。 配置文件参数可避免 SAP 工作进程与排队服务器之间的连接在空闲时间太长时关闭。 ERS2 不需要 SAP 参数。
如果使用的是 ERS1,则将此配置文件参数添加到 SAP ASCS/SCS 实例配置文件中。
enque/encni/set_so_keepalive = TRUE
对于 ERS1 和 ERS2,请确保按 SAP 说明 1410736 中所述设置
keepalive
OS 参数。若要应用 SAP 配置文件参数更改,请重启 SAP ASCS/SCS 实例。
添加探测端口
使用内部负载均衡器探测功能,让整个群集配置使用 Azure Load Balancer。 Azure 内部负载均衡器通常在参与的虚拟机之间平均分配传入的工作负荷。
但是,这在某些群集配置中由于只有一个实例处于活动状态而不起作用。 其他实例处于被动状态,并且无法接受任何工作负荷。 当 Azure 内部负载均衡器检测处于活动状态的实例,并且仅将活动实例作为目标时,探测功能会很有帮助。
重要
在此示例配置中,“ProbePort” 设置为“620Nr”。 对于编号为“00”的 SAP ASCS 实例,则为“62000”。 你将需要调整配置,使其与 SAP 实例编号和 SAP SID 一致。
若要添加探测端口,请在其中一个群集 VM 上运行以下 PowerShell 模块:
对于 SAP ASC/SCS 实例
Set-AzureLoadBalancerHealthCheckProbePortOnSAPClusterIPResource -SAPSID SID -ProbePort 62000
如果使用的是群集化的 ERS2。 不需要为 ERS1 配置探测端口,因为它不是群集实例。
Set-AzureLoadBalancerHealthCheckProbePortOnSAPClusterIPResource -SAPSID SID -ProbePort 62001 -IsSAPERSClusteredInstance $True
函数 Set-AzureLoadBalancerHealthCheckProbePortOnSAPClusterIPResource
的代码如下:
function Set-AzureLoadBalancerHealthCheckProbePortOnSAPClusterIPResource {
<#
.SYNOPSIS
Set-AzureLoadBalancerHealthProbePortOnSAPClusterIPResource will set a new Azure Load Balancer Health Probe Port on 'SAP $SAPSID IP' cluster resource.
.DESCRIPTION
Set-AzureLoadBalancerHealthProbePortOnSAPClusterIPResource will set a new Azure Load Balancer Health Probe Port on 'SAP $SAPSID IP' cluster resource.
It will also restart SAP Cluster group (default behavior), to activate the changes.
You need to run it on one of the SAP ASCS/SCS Windows cluster nodes.
Expectation is that SAP group is installed with official SWPM installation tool, which will set default expected naming convention for:
- SAP Cluster Group: 'SAP $SAPSID'
- SAP Cluster IP Address Resource: 'SAP $SAPSID IP'
.PARAMETER SAPSID
SAP SID - 3 characters staring with letter.
.PARAMETER ProbePort
Azure Load Balancer Health Check Probe Port.
.PARAMETER RestartSAPClusterGroup
Optional parameter. Default value is '$True', so SAP cluster group will be restarted to activate the changes.
.PARAMETER IsSAPERSClusteredInstance
Optional parameter.Default value is '$False'.
If set to $True , then handle clustered new SAP ERS2 instance.
.EXAMPLE
# Set probe port to 62000, on SAP cluster resource 'SAP AB1 IP', and restart the SAP cluster group 'SAP AB1', to activate the changes.
Set-AzureLoadBalancerHealthCheckProbePortOnSAPClusterIPResource -SAPSID AB1 -ProbePort 62000
.EXAMPLE
# Set probe port to 62000, on SAP cluster resource 'SAP AB1 IP'. SAP cluster group 'SAP AB1' IS NOT restarted, therefore changes are NOT active.
# To activate the changes you need to manually restart 'SAP AB1' cluster group.
Set-AzureLoadBalancerHealthCheckProbePortOnSAPClusterIPResource -SAPSID AB1 -ProbePort 62000 -RestartSAPClusterGroup $False
.EXAMPLE
# Set probe port to 62001, on SAP cluster resource 'SAP AB1 ERS IP'. SAP cluster group 'SAP AB1 ERS' IS restarted, to activate the changes.
Set-AzureLoadBalancerHealthCheckProbePortOnSAPClusterIPResource -SAPSID AB1 -ProbePort 62000 -IsSAPERSClusteredInstance $True
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$True)]
[ValidateNotNullOrEmpty()]
[ValidateLength(3,3)]
[string]$SAPSID,
[Parameter(Mandatory=$True)]
[ValidateNotNullOrEmpty()]
[int] $ProbePort,
[Parameter(Mandatory=$False)]
[bool] $RestartSAPClusterGroup = $True,
[Parameter(Mandatory=$False)]
[bool] $IsSAPERSClusteredInstance = $False
)
BEGIN{}
PROCESS{
try{
if($IsSAPERSClusteredInstance){
#Handle clustered SAP ERS Instance
$SAPClusterRoleName = "SAP $SAPSID ERS"
$SAPIPresourceName = "SAP $SAPSID ERS IP"
}else{
#Handle clustered SAP ASCS/SCS Instance
$SAPClusterRoleName = "SAP $SAPSID"
$SAPIPresourceName = "SAP $SAPSID IP"
}
$SAPIPResourceClusterParameters = Get-ClusterResource $SAPIPresourceName | Get-ClusterParameter
$IPAddress = ($SAPIPResourceClusterParameters | Where-Object {$_.Name -eq "Address" }).Value
$NetworkName = ($SAPIPResourceClusterParameters | Where-Object {$_.Name -eq "Network" }).Value
$SubnetMask = ($SAPIPResourceClusterParameters | Where-Object {$_.Name -eq "SubnetMask" }).Value
$OverrideAddressMatch = ($SAPIPResourceClusterParameters | Where-Object {$_.Name -eq "OverrideAddressMatch" }).Value
$EnableDhcp = ($SAPIPResourceClusterParameters | Where-Object {$_.Name -eq "EnableDhcp" }).Value
$OldProbePort = ($SAPIPResourceClusterParameters | Where-Object {$_.Name -eq "ProbePort" }).Value
$var = Get-ClusterResource | Where-Object { $_.name -eq $SAPIPresourceName }
Write-Output "Current configuration parameters for SAP IP cluster resource '$SAPIPresourceName' are:"
Get-ClusterResource -Name $SAPIPresourceName | Get-ClusterParameter
Write-Output " "
Write-Output "Current probe port property of the SAP cluster resource '$SAPIPresourceName' is '$OldProbePort'."
Write-Output " "
Write-Output "Setting the new probe port property of the SAP cluster resource '$SAPIPresourceName' to '$ProbePort' ..."
Write-Output " "
$var | Set-ClusterParameter -Multiple @{"Address"=$IPAddress;"ProbePort"=$ProbePort;"Subnetmask"=$SubnetMask;"Network"=$NetworkName;"OverrideAddressMatch"=$OverrideAddressMatch;"EnableDhcp"=$EnableDhcp}
Write-Output " "
if($RestartSAPClusterGroup){
Write-Output ""
Write-Output "Activating changes..."
Write-Output " "
Write-Output "Taking SAP cluster IP resource '$SAPIPresourceName' offline ..."
Stop-ClusterResource -Name $SAPIPresourceName
sleep 5
Write-Output "Starting SAP cluster role '$SAPClusterRoleName' ..."
Start-ClusterGroup -Name $SAPClusterRoleName
Write-Output "New ProbePort parameter is active."
Write-Output " "
Write-Output "New configuration parameters for SAP IP cluster resource '$SAPIPresourceName':"
Write-Output " "
Get-ClusterResource -Name $SAPIPresourceName | Get-ClusterParameter
}else
{
Write-Output "SAP cluster role '$SAPClusterRoleName' is not restarted, therefore changes are not activated."
}
}
catch{
Write-Error $_.Exception.Message
}
}
END {}
}
打开 Windows 防火墙探测端口
在两个群集节点上打开 Windows 防火墙探测端口。 使用以下脚本打开 Windows 防火墙探测端口。 更新环境的 PowerShell 变量。
如果使用的是 ERS2,则还需要为 ERS2 探测端口打开防火墙端口。
$ProbePort = 62000 # ProbePort of the Azure internal load balancer
New-NetFirewallRule -Name AzureProbePort -DisplayName "Rule for Azure Probe Port" -Direction Inbound -Action Allow -Protocol TCP -LocalPort $ProbePort
安装数据库实例
若要安装数据库实例,请按照 SAP 安装文档中所述的过程操作。
安装第二个群集节点
若要安装第二个群集,请按照 SAP 安装指南中所述的步骤操作。
安装 SAP 主应用程序服务器
在已指定为托管 PAS 的虚拟机上安装主应用程序服务器 (PAS) 实例 <SID>-di-0。 Azure 上没有依赖项。 如果使用的是 SIOS,则没有特定于 DataKeeper 的设置。
安装 SAP 附加应用程序服务器
在指定用于托管 SAP 应用程序服务器实例的所有虚拟机上安装 SAP 附加应用程序服务器 (AAS)。
测试 SAP ASCS/SCS 实例故障转移
对于概述的故障转移测试,假设 SAP ASCS 在节点 A 上处于活动状态。
验证 SAP 系统是否可以成功地从节点 A 故障转移到节点 B。选择以下选项之一,以启动将 SAP <SID> 群集组从群集节点 A 故障转移到群集节点 B:
- 故障转移群集管理器
- 故障转移群集 PowerShell
$SAPSID = "PR1" # SAP <SID> $SAPClusterGroup = "SAP $SAPSID" Move-ClusterGroup -Name $SAPClusterGroup
重启 Windows 来宾操作系统中的群集节点 A。 这会启动将 SAP <SID> 群集组从节点 A 故障转移到节点 B 的自动故障转移。
重启 Azure 门户中的群集节点 A。 这会启动将 SAP <SID> 群集组从节点 A 故障转移到节点 B 的自动故障转移。
使用 Azure PowerShell 重启群集节点 A。 这会启动将 SAP <SID> 群集组从节点 A 故障转移到节点 B 的自动故障转移。
验证
故障转移后,请验证 SAP <SID> 群集组是否在群集节点 B 上运行。
在故障转移群集管理器中,SAP <SID> 群集组在群集节点 B 上运行
故障转移后,请验证共享磁盘现在已装载到群集节点 B 上。
故障转移后,如果使用 SIOS,请验证 SIOS DataKeeper 是否正在将群集节点 B 上的源卷驱动器 S 中的数据复制到群集节点 A 上的目标卷驱动器 S。
SIOS DataKeeper 将本地卷从群集节点 B 复制到群集节点 A