Azure で SAP ASCS/SCS インスタンス用の Windows フェールオーバー クラスターと共有ディスクに SAP NetWeaver HA をインストールする
この記事では、SAP ASCS/SCS インスタンスのクラスタリング用の Windows Server フェールオーバー クラスターとクラスター共有ディスクを使って、Azure に高可用性の SAP システムをインストールして構成する方法について説明します。 アーキテクチャ ガイド: クラスター共有ディスクを使用した Windows フェールオーバー クラスター上の SAP ASCS/SCS インスタンスのクラスタリングに関するページ記載されているように、"クラスター共有ディスク" には次に 2 つの代替手段があります。
- Azure 共有ディスク
- クラスター共有ディスクをシミュレートする、SIOS DataKeeper Cluster Edition を使用したミラー化ストレージの作成
前提条件
インストールを始める前に、次のドキュメントを確認してください。
アーキテクチャ ガイド: クラスター共有ディスクを使用して Windows フェールオーバー クラスター上の SAP ASCS/SCS インスタンスをクラスター化する
SAP ASCS/SCS インスタンス用の Windows フェールオーバー クラスターと共有ディスクを使用して SAP HA 向けに Azure インフラストラクチャを準備する
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 インスタンスの仮想ホスト名の作成
Windows DNS マネージャーで、ASCS/SCS インスタンスの仮想ホスト名の DNS エントリを作成します。
重要
ASCS/SCS インスタンスの仮想ホスト名に割り当てる IP アドレスは Azure Load Balancer に割り当てた IP アドレスと同じでなければなりません。
SAP ASCS/SCS クラスターの仮想名と TCP/IP アドレスの DNS エントリを定義する
新しい SAP エンキュー レプリケーション サーバー 2 を使用し、これもクラスター化されたインスタンスである場合、ERS2 の仮想ホスト名も DNS で予約する必要があります。
重要
ERS2 インスタンスの仮想ホスト名に割り当てる IP アドレスは Azure Load Balancer に割り当てた 2 番目の 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 内部ロード バランサーの負荷分散規則 (Basic SKU を使用する場合) の構成と、選択した SAP インスタンス番号が一致する必要があることに注意してください。
SAP の説明に従ってインストール手順を行います。 インストールの開始オプション [First Cluster Node](最初のクラスター ノード) で、構成オプションとして [Cluster Shared Disk](クラスターの共有ディスク) を選択します。
ヒント
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 内部ロード バランサーは、参加している仮想マシン間に受信ワークロードを均等に分散させます。
ただし、アクティブなインスタンスが 1 つだけであるため、一部のクラスター構成では動作しません。 他のインスタンスはパッシブであり、ワークロードを受け付けることができません。 プローブ機能は、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 インストール ドキュメントに記載されている手順に従います。
第 2 のクラスター ノードのインストール
第 2 のクラスター ノードをインストールするには、SAP インストール ガイドの手順に従います。
SAP プライマリ アプリケーション サーバーのインストール
プライマリ アプリケーション サーバー (PAS) のインスタンス <SID>-di-0 を、PAS のホストとして指定した仮想マシンにインストールします。 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 Portal からクラスター ノード 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 にローカル ボリュームをレプリケートする