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

В этой статье описывается установка и настройка системы SAP с высоким уровнем доступности в Azure с помощью отказоустойчивого кластера 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, которая используется по умолчанию. Если он еще не существует, переместите файл страницы Windows на диск D: виртуальной машины Azure.

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

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

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

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

    Снимок экрана: диалоговое окно

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

    Внимание

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

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

    Внимание

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

    Снимок экрана: диалоговое окно

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

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

    1. Расширьте зону.

    2. Откройте запись, в которой нужно указать IP-адрес.

    Скриншот менеджера DNS Windows с несколькими записями в зоне прямого просмотра.

    Новое виртуальное имя и 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

Если у вас есть Enqueue Replication Server 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 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) <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.

    Снимок экрана диспетчера кластеров отказоустойчивости Windows с кластером SAP, настроенным как роль.

    В средстве управления кластерной отказоустойчивостью кластерная группа SAP <SID> работает на узле B кластера.

    • После переключения убедитесь, что общий диск теперь подключен к узлу B кластера.
    • После переключения на резервный узел при использовании SIOS убедитесь, что SIOS DataKeeper реплицирует данные из исходного тома диска S: на узле кластера B на целевой том диска S: на узле кластера A.

    Снимок экрана программы SIOS DataKeeper, реплицирующей локальный том с узла кластера B на узел кластера A.

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