在 Azure 中的 SAP ASCS/SCS 執行個體的 Windows 容錯移轉叢集和共用磁碟上安裝 SAP NetWeaver HA
本文說明針對為 SAP ASCS/SCS 執行個體進行叢集處理,如何使用 Windows Server 容錯移轉和叢集共用磁碟在 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 執行個體和一個 SCS 執行個體在相同 Microsoft 容錯移轉叢集群組中執行。 我們會明確說明每個 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 Load Balancer 的 IP 位址相同。
定義 SAP ASCS/SCS 叢集虛擬名稱和 TCP/IP 位址的 DNS 項目
如果使用新的 SAP 加入佇列復寫伺服器 2,也就是叢集實例,則您也必須在 DNS 中保留 ERS2 的虛擬主機名。
重要
您指派給 ERS2 執行個體之虛擬主機名稱的 IP 位址,必須是指派給 Azure Load Balancer 的第二個 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
針對 ENSA1 和 ENSA2,請確定已如 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 選擇下列其中一個選項,從叢集節點 A 到叢集節點 B 起始 SAP <SID> 叢集群組的故障轉移:
- 容錯移轉叢集管理員
- 容錯移轉叢集 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