共用方式為


在 Azure 中的 SAP ASCS/SCS 執行個體的 Windows 容錯移轉叢集和共用磁碟上安裝 SAP NetWeaver HA

本文說明針對為 SAP ASCS/SCS 執行個體進行叢集處理,如何使用 Windows Server 容錯移轉和叢集共用磁碟在 Azure 中安裝及設定高可用性 SAP 系統。 如架構指南:使用叢集共用磁碟在 Windows 容錯移轉叢集上叢集化 SAP ASCS/SCS 執行個體中所述,叢集共用磁碟有兩個替代方案:

必要條件

在開始安裝之前,請檢閱這些文章:

由於設定視使用的 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 執行個體的虛擬主機名稱

  1. 在「Windows DNS 管理員」中,為 ASCS/SCS 執行個體的虛擬主機名稱建立 DNS 項目。

    重要

    您指派給 ASCS/SCS 執行個體之虛擬主機名稱的 IP 位址,必須與指派給 Azure Load Balancer 的 IP 位址相同。

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

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

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

    重要

    您指派給 ERS2 執行個體之虛擬主機名稱的 IP 位址,必須是指派給 Azure Load Balancer 的第二個 IP 位址。

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

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

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

    圖 2:SAP ASCS/SCS 叢集設定的新虛擬名稱和 TCP/IP 位址

    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
    

    針對 ENSA1 和 ENSA2,請確定已如 SAP 附註 1410736 中所述設定 keepalive OS 參數。

  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 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 上的狀態為作用中。

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

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

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

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

  5. 驗證

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

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

      在「容錯移轉叢集管理員」中,SAP <SID> 叢集群組會在叢集節點 B 上執行

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

    • 容錯移轉之後,如果使用 SIOS,請確認 SIOS DataKeeper 正在將資料從叢集節點 B 上的來源磁碟區「磁碟機 S」複寫到叢集節點 A 上的目標磁碟區「磁碟機 S」。

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

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