Azure で SAP ASCS/SCS インスタンス用の Windows フェールオーバー クラスターと共有ディスクに SAP NetWeaver HA をインストールする

この記事では、SAP ASCS/SCS インスタンスのクラスタリング用の Windows Server フェールオーバー クラスターとクラスター共有ディスクを使って、Azure に高可用性の SAP システムをインストールして構成する方法について説明します。 アーキテクチャ ガイド: クラスター共有ディスクを使用した Windows フェールオーバー クラスター上の SAP ASCS/SCS インスタンスのクラスタリングに関するページ記載されているように、"クラスター共有ディスク" には次に 2 つの代替手段があります。

前提条件

インストールを始める前に、次のドキュメントを確認してください。

DBMS のセットアップは使用する DBMS システムによって異なるため、この記事では説明はしません。 さまざまな DBMS ベンダーが Azure でサポートする機能を使用して、DBMS に関する高可用性の問題に対処していることを想定しています。 たとえば、SQL Server の Always On またはデータベース ミラーリング、Oracle データベースの Oracle Data Guard などがあります。 この記事では、DBMS の高可用性シナリオについては説明しません。

異なる DBMS サービスが Azure のクラスター化された SAP ASCS または SCS 構成と対話する際に、特別な考慮事項はありません。

Note

SAP NetWeaver ABAP システム、Java システム、ABAP + Java システムのインストール手順はほとんど同じです。 最も重要な違いは、SAP ABAP システムでは 1 つの ASCS インスタンスを使用することです。 SAP Java システムは 1 つの SCS インスタンスを使用します。 SAP ABAP + Java システムでは、1 つの ASCS インスタンスと、同じ Microsoft フェールオーバー クラスター グループで実行する 1 つの SCS インスタンスを使用します。 各 SAP NetWeaver インストール スタックのインストールの違いについて明確に説明します。 残りの手順は同じであると見なすことができます。

高可用性 ASCS/SCS インスタンスでの SAP のインストール

重要

SIOS を使用して共有ディスクを提供する場合は、ページ ファイルを SIOS DataKeeper ミラー ボリュームに配置しないでください。 ページ ファイルは、既定の場所である Azure Virtual Machines の一時ドライブ D のままにしておいてかまいません。 既にそこにない場合は、Azure Virtual Machines のドライブ D に Windows ページ ファイルを移動します。

高可用性 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 を使用し、これもクラスター化されたインスタンスである場合、ERS2 の仮想ホスト名も DNS で予約する必要があります。

    重要

    ERS2 インスタンスの仮想ホスト名に割り当てる IP アドレスは Azure Load Balancer に割り当てた 2 番目の 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 内部ロード バランサーの負荷分散規則 (Basic SKU を使用する場合) の構成と、選択した SAP インスタンス番号が一致する必要があることに注意してください。

  2. SAP の説明に従ってインストール手順を行います。 インストールの開始オプション [First Cluster Node](最初のクラスター ノード) で、構成オプションとして [Cluster Shared Disk](クラスターの共有ディスク) を選択します。

ヒント

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 内部ロード バランサーは、参加している仮想マシン間に受信ワークロードを均等に分散させます。

ただし、アクティブなインスタンスが 1 つだけであるため、一部のクラスター構成では動作しません。 他のインスタンスはパッシブであり、ワークロードを受け付けることができません。 プローブ機能は、Azure 内部ロード バランサーによって、アクティブなインスタンスが検出され、アクティブなインスタンスのみが対象とされる場合に役立ちます。

重要

この構成例では、ProbePort は 620Nr に設定されます。 番号が 00 の SAP ASCS インスタンスの場合は、62000 です。 SAP インスタンス番号と SAP SID に合わせて構成を調整する必要があります。

プローブ ポートを追加するには、次のいずれかのクラスター VM でこの PowerShell モジュールを実行します。

  • SAP ASCS/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 インストール ドキュメントに記載されている手順に従います。

第 2 のクラスター ノードのインストール

第 2 のクラスター ノードをインストールするには、SAP インストール ガイドの手順に従います。

SAP プライマリ アプリケーション サーバーのインストール

プライマリ アプリケーション サーバー (PAS) のインスタンス <SID>-di-0 を、PAS のホストとして指定した仮想マシンにインストールします。 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 Portal からクラスター ノード 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 にローカル ボリュームをレプリケートする