Установка SAP NetWeaver высокого уровня доступности в отказоустойчивом кластере Windows на общем диске для экземпляра SAP ASCS/SCS в Azure

В этой статье описывается, как установить и настроить в Azure систему SAP высокого уровня доступности, используя отказоустойчивый кластер Windows Server и общий диск для кластеризации экземпляра SAP ASCS/SCS. Как указано в Руководстве по архитектуре: Кластеризация экземпляра SAP ASCS/SCS в отказоустойчивом кластере Windows с помощью общего диска кластера, существует два варианта использования общего диска кластера:

Необходимые компоненты

Перед началом установки изучите следующие документы:

В этой статье мы не рассматриваем настройку СУБД, так как она зависит от используемой СУБД. Мы полагаем, что для СУБД высокий уровень доступности обеспечивается благодаря тем возможностям, которые поставщики СУБД поддерживают для Azure. Например, это Always On или зеркальное отображение базы данных для SQL Server и Oracle Data Guard для баз данных Oracle. Сценарии высокого уровня доступности для СУБД не рассматриваются в этой статье.

Не существует особых требований, которые нужно учитывать при взаимодействии любых СУБД с кластеризованной конфигурацией SAP ASCS/SCS в Azure.

Примечание.

Процедуры установки систем SAP NetWeaver ABAP, SAP Java и SAP ABAP с Java практически идентичны. Главное отличие состоит в том, что в системе SAP ABAP всего один экземпляр ASCS. В системе SAP Java имеется один экземпляр SCS. В системе SAP ABAP с Java — один экземпляр ASCS и один экземпляр SCS, которые работают в одной группе отказоустойчивого кластера Майкрософт. Любые отличия в установке для каждого стека установки SAP NetWeaver будут указаны явным образом. Все остальные шаги явлюятся аналогичными.

Установите SAP с экземпляром ASCS/SCS высокого уровня доступности.

Важно!

Если SIOS используется для предоставления общего диска, не следует размещать файл подкачки на зеркальных томах SIOS DataKeeper. Можно оставить файл подкачки на временном диске D виртуальной машины Azure, который задан по умолчанию. Если файла там нет, поместите его на диск D виртуальной машины Azure.

Установка SAP с высокодоступным экземпляром ASCS/SCS состоит из следующих заданий:

  • Создание имени виртуального узла для кластеризованного экземпляра SAP ASCS/SCS.
  • Установите SAP на первом узле кластера.
  • Изменение профиля SAP для экземпляра ASCS/SCS.
  • Добавление порта пробы.
  • Открытие порта пробы в брандмауэре Windows.

Создание имени виртуального узла для кластеризованного экземпляра SAP ASCS/SCS

  1. В диспетчере DNS Windows создайте запись DNS для имени виртуального узла экземпляра ASCS/SCS.

    Важно!

    IP-адрес, который назначается имени виртуального узла для экземпляра ASCS/SCS, должен совпадать с IP-адресом, назначенным для Azure Load Balancer.

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

    Определение записи DNS для виртуального имени кластера SAP ASCS/SCS и TCP/IP-адреса

  2. Если используется новый сервер постановки в очередь для репликации SAP 2, который также является кластеризованным экземпляром, необходимо еще зарезервировать в DNS имя виртуального узла для ERS2.

    Важно!

    IP-адрес, который назначается имени виртуального узла для экземпляра ERS2, должен совпадать со вторым IP-адресом, назначенным для Azure Load Balancer.

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

    Настройка записи DNS для виртуального имени и TCP/IP-адреса кластера SAP ERS2

  3. Чтобы определить IP-адрес, назначенный имени виртуального узла, выберите Диспетчер DNS>Домен.

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

    Новое виртуальное имя и TCP/IP-адрес для конфигурации кластера SAP ASCS/SCS

Установка первого узла кластера SAP

  1. Выполните установку первого узла кластера на узле A кластера. Выберите:

    • для системы ABAP — экземпляр ASCS с номером 00;
    • для системы Java — экземпляр SCS с номером 01;
    • для системы ABAP с Java — экземпляр ASCS с номером 00 и экземпляр SCS с номером 01.

    Важно!

    Следует иметь в виду, что конфигурация в правилах балансировки нагрузки внутренней подсистемы балансировки нагрузки Azure (если используется SKU уровня "Базовый") и номера выбранных экземпляров SAP должны совпадать.

  2. Выполните описанную в статье процедуру установки SAP. Проверьте, что для параметра начальной установки "Первый узел кластера" в качестве варианта конфигурации выбрано значение "Общий диск кластера".

Совет

В документации по установке SAP содержатся сведения по установке первого узла кластера ASCS/SCS.

Изменение профиля SAP экземпляра ASCS/SCS

Если у вас имеется сервер постановки в очередь для репликации 1, нужно добавить параметр профиля SAP enque/encni/set_so_keepalive, как описано ниже. Этот параметр профиля запрещает закрытие подключений между рабочими процессами SAP и сервером постановки в очередь, если они простаивают слишком долго. Параметр SAP не является обязательным для ERS2.

  1. При использовании ERS1 добавьте этот параметр профиля в профиль экземпляра SAP ASCS/SCS.

    enque/encni/set_so_keepalive = true
    

    Убедитесь, что для ERS1 и ERS2 параметры ОС keepalive заданы так, как указано в примечании для SAP 1410736.

  2. Чтобы применить изменения в параметрах профиля SAP, перезапустите экземпляр SAP ASCS/SCS.

Добавление порта пробы

Чтобы вся конфигурация кластера работала с Azure Load Balancer, нужно использовать функцию проб внутреннего балансировщика нагрузки. Обычно внутренний балансировщик нагрузки Azure распределяет входящую рабочую нагрузку поровну между участвующими виртуальными машинами.

Однако это не будет работать в некоторых конфигурациях кластера, так как активен только один экземпляр. Другой экземпляр пассивен и не может принимать рабочую нагрузку. Функция проверки помогает, когда внутренний балансировщик нагрузки Azure определяет, какой экземпляр является активным, и предназначен только для активного экземпляра.

Важно!

В этом примере конфигурации для ProbePort задано значение 620Nr. Для экземпляра SAP ASCS с номером 00 соответствующим значением будет 62000. Необходимо скорректировать конфигурацию, чтобы обеспечить соответствие номеров экземпляров SAP и идентификатора безопасности SAP.

Чтобы добавить порт пробы, запустите этот модуль 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) <SID>-di-0 на виртуальную машину, предназначенную для размещения PAS. В Azure нет зависимостей. При использовании SIOS для DataKeeper не требуется специальных настроек.

Установка дополнительного сервера приложений SAP

Установите дополнительный сервер приложений SAP (AAS) на все виртуальные машины, предназначенные для размещения экземпляра сервера приложений SAP.

Проверка отработки отказа для экземпляра SAP ASCS/SCS

В тестах по отработке отказа предполагается, что SAP ASCS активен на узле A.

  1. Убедитесь, что система SAP может успешно отрабатывать отказ с узла A на узел B. Выберите один из указанных вариантов, чтобы инициировать отработку отказа кластерной группы SAP <SID> с узла A на узел B кластера:

    • Диспетчер отказоустойчивости кластеров
    • с помощью команд PowerShell для отказоустойчивого кластера.
    $SAPSID = "PR1"     # SAP <SID>
    
    $SAPClusterGroup = "SAP $SAPSID"
    Move-ClusterGroup -Name $SAPClusterGroup
    
    
  2. Перезапустите узел A кластера из гостевой ОС Windows. Это инициирует автоматический переход кластерной группы SAP <SID> на другой ресурс с узла A на узел B кластера.

  3. Перезапустите узел A кластера с помощью портала Azure. Это инициирует автоматический переход кластерной группы SAP <SID> на другой ресурс с узла A на узел B кластера.

  4. Перезапустите узел A кластера с помощью Azure PowerShell. Это инициирует автоматический переход кластерной группы SAP <SID> на другой ресурс с узла A на узел B кластера.

  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 реплицирует данные из исходного тома накопителя S, находящегося на узле B кластера, в целевой том накопителя S, который находится на узле A кластера.

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

      SIOS DataKeeper выполняет репликацию локального тома с узла B на узел A кластера