在 Azure 中 SAP ASCS/SCS 實例的 Windows 故障轉移叢集和共用磁碟上安裝 SAP NetWeaver HA
本文說明如何使用 Windows Server 故障轉移叢集和叢集共用磁碟,在 Azure 中安裝和設定高可用性 SAP 系統,以將 SAP ASCS/SCS 實例叢集化。 如架構指南:使用叢集共用磁碟在 Windows 故障轉移叢集上將 SAP ASCS/SCS 實例叢集進行叢集,有兩種替代方式可供叢集共用磁碟使用:
- Azure 共用磁碟
- 使用 SIOS DataKeeper Cluster Edition 建立鏡像記憶體,以模擬叢集共用磁碟
必要條件
開始安裝之前,請先檢閱這些檔:
我們不會在本文中描述 DBMS 設定,因為安裝程式會根據您使用的 DBMS 系統而有所不同。 我們假設 DBMS 的高可用性考慮是透過不同 DBMS 廠商支援 Azure 的功能來解決。 範例包括 SQL Server 的 AlwaysOn 或資料庫鏡像,以及 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 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
針對ERS1和ERS2,請確定
keepalive
OS參數已設定為SAP附註 1410736中所述。若要套用 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 clsutered 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 manualy 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。 這會起始從節點 A 到節點 B 的 SAP <SID> 叢集群組自動故障轉移。
從 Azure 入口網站 重新啟動叢集節點 A。 這會起始從節點 A 到節點 B 的 SAP <SID> 叢集群組自動故障轉移。
使用 Azure PowerShell 重新啟動叢集節點 A。 這會起始從節點 A 到節點 B 的 SAP <SID> 叢集群組自動故障轉移。
驗證
故障轉移之後,請確認 SAP <SID> 叢集群組正在叢集節點 B 上執行。
在故障轉移叢集管理員中,SAP <SID> 叢集群組正在叢集節點 B 上執行
故障轉移之後,請確認共用磁碟現在已掛接在叢集節點 B 上。
故障轉移之後,如果使用 SIOS,請確認 SIOS DataKeeper 正在將叢集節點 B 上來源磁碟區磁碟驅動器 S 的數據復寫到叢集節點 A 上的磁碟區磁碟驅動器 S。
SIOS DataKeeper 會將本機磁碟區從叢集節點 B 複寫至叢集節點 A