在 Azure 中 SAP ASCS/SCS 實例的 Windows 故障轉移叢集和共用磁碟上安裝 SAP NetWeaver HA

本文說明如何使用 Windows Server 故障轉移叢集和叢集共用磁碟,在 Azure 中安裝和設定高可用性 SAP 系統,以將 SAP ASCS/SCS 實例叢集化。 如架構指南:使用叢集共用磁碟在 Windows 故障轉移叢集上將 SAP ASCS/SCS 實例叢集進行叢集,有兩種替代方式可供叢集共用磁碟使用:

必要條件

開始安裝之前,請先檢閱這些檔:

我們不會在本文中描述 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 實例的虛擬主機名

  1. 在 Windows DNS 管理員中,為 ASCS/SCS 實例的虛擬主機名建立 DNS 專案。

    重要

    您指派給 ASCS/SCS 實例虛擬主機名的 IP 位址必須與您指派給 Azure Load Balancer 的 IP 位址相同。

    Figure 1: Define the DNS entry for the SAP ASCS/SCS cluster virtual name and TCP/IP address

    定義 SAP ASCS/SCS 叢集虛擬名稱和 TCP/IP 位址的 DNS 專案

  2. 如果使用新的 SAP 加入佇列復寫伺服器 2,也就是叢集實例,則您也必須在 DNS 中保留 ERS2 的虛擬主機名。

    重要

    您指派給 ERS2 實例虛擬主機名的 IP 位址必須是您指派給 Azure Load Balancer 的第二個 IP 位址。

    Figure 1A: Define the DNS entry for the SAP ASCS/SCS cluster virtual name and TCP/IP address

    定義 SAP ERS2 叢集虛擬名稱和 TCP/IP 位址的 DNS 專案

  3. 若要定義指派給虛擬主機名的IP位址,請選取 [DNS 管理員>網域]。

    Figure 2: New virtual name and TCP/IP address for SAP ASCS/SCS cluster configuration

    SAP ASCS/SCS 叢集組態的新虛擬名稱和 TCP/IP 位址

安裝 SAP 第一個叢集節點

  1. 在叢集節點 A 上執行第一個叢集節點選項。選取:

    • ABAP 系統ASCS 實例號碼 00
    • Java 系統:SCS 實例號碼 01
    • ABAP+Java 系統ASCS 實例號碼 00SCS 實例號碼 01

    重要

    請記住,Azure 內部負載平衡器負載平衡規則中的組態(如果使用基本 SKU)和選取的 SAP 實例號碼必須相符。

  2. 遵循 SAP 描述的安裝程式。 確定在 [開始安裝] 選項 [第一個叢集節點] 中,選擇 [叢集共用磁碟] 作為組態選項。

提示

SAP 安裝文件說明如何安裝第一個 ASCS/SCS 叢集節點。

修改 ASCS/SCS 實例的 SAP 設定檔

如果您有加入佇列復寫伺服器 1,請新增 SAP 配置文件參數 enque/encni/set_so_keepalive ,如下所示。 配置文件參數可防止 SAP 工作進程與加入佇列伺服器之間的連線在閑置太久時關閉。 ERS2 不需要 SAP 參數。

  1. 如果使用 ERS1,請將這個設定文件參數新增至 SAP ASCS/SCS 實例設定檔。

    enque/encni/set_so_keepalive = true
    

    針對ERS1和ERS2,請確定 keepalive OS參數已設定為SAP附註 1410736中所述。

  2. 若要套用 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 上為作用中。

  1. 確認 SAP 系統可以成功從節點 A 故障轉移至節點 B 選擇下列其中一個選項,從叢集節點 A 到叢集節點 B 起始 SAP <SID> 叢集群組的故障轉移:

    • 容錯移轉叢集管理員
    • 故障轉移叢集PowerShell
    $SAPSID = "PR1"     # SAP <SID>
    
    $SAPClusterGroup = "SAP $SAPSID"
    Move-ClusterGroup -Name $SAPClusterGroup
    
    
  2. 重新啟動 Windows 客體作業系統內的叢集節點 A。 這會起始從節點 A 到節點 B 的 SAP <SID> 叢集群組自動故障轉移。

  3. 從 Azure 入口網站 重新啟動叢集節點 A。 這會起始從節點 A 到節點 B 的 SAP <SID> 叢集群組自動故障轉移。

  4. 使用 Azure PowerShell 重新啟動叢集節點 A。 這會起始從節點 A 到節點 B 的 SAP <SID> 叢集群組自動故障轉移。

  5. 驗證

    • 故障轉移之後,請確認 SAP <SID> 叢集群組正在叢集節點 B 上執行。

      Figure 8: In Failover Cluster Manager, the SAP <SID> cluster group is running on cluster node B

      在故障轉移叢集管理員中,SAP <SID> 叢集群組正在叢集節點 B 上執行

    • 故障轉移之後,請確認共用磁碟現在已掛接在叢集節點 B 上。

    • 故障轉移之後,如果使用 SIOS,請確認 SIOS DataKeeper 正在將叢集節點 B 上來源磁碟區磁碟驅動器 S 的數據復寫到叢集節點 A 上的磁碟區磁碟驅動器 S。

      Figure 9: SIOS DataKeeper replicates the local volume from cluster node B to cluster node A

      SIOS DataKeeper 會將本機磁碟區從叢集節點 B 複寫至叢集節點 A