Руководство по настройке прослушивателя группы доступности на виртуальных машинах Linux

Применимо к:SQL Server на виртуальной машине Azure

В этом руководстве описано, как создать прослушиватель группы доступности для серверов SQL Server на виртуальных машинах Linux в Azure, для Red Hat Enterprise Linux (RHEL), SUSE Linux Enterprise Server (SLES) и Ubuntu.

Вы изучите следующие темы:

  • создавать подсистему балансировки нагрузки на портале Azure;
  • настраивать серверный пул для подсистемы балансировки нагрузки;
  • создавать пробы для подсистемы балансировки нагрузки;
  • Настройка правил балансировки нагрузки
  • Создание ресурса подсистемы балансировки нагрузки в кластере
  • Создание прослушивателя группы доступности
  • проверять подключение к прослушивателю;
  • тестировать отработку отказа.

Примечание.

Обмен данными без смещения

Эта статья содержит ссылки на термин slave (подчиненный), который Майкрософт считает оскорбительным при использовании в этом контексте. Термин присутствует в этой статье, так как в настоящее время он присутствует в программном обеспечении. При удалении термина из программного обеспечения мы удалим его из статьи.

Необходимые условия

Создание балансировщика нагрузки на портале Azure

В следующих инструкциях описаны шаги 1–4 из статьи "Создание и настройка подсистемы балансировки нагрузки" в разделе портал Azure статьи "Настройка прослушивателя подсистемы балансировки нагрузки и группы доступности" (SQL Server на виртуальных машинах Azure).

Создание подсистемы балансировки нагрузки

  1. На портале Azure откройте группу ресурсов, в которой содержатся виртуальные машины SQL Server.

  2. В группе ресурсов щелкните Добавить.

  3. Выполните поиск по запросу подсистема балансировки нагрузки и в результатах поиска выберите Подсистема балансировки нагрузки, опубликованную корпорацией Майкрософт.

  4. На панели Load Balancer нажмите кнопку "Создать".

  5. В диалоговом окне Создание подсистемы балансировки нагрузки настройте подсистему балансировки нагрузки, задав следующие параметры:

    Параметр Значение
    Имя Текст, представляющий имя балансировщика нагрузки. Например, sqlLB.
    Тип Внутренний
    Виртуальная сеть Виртуальная сеть по умолчанию должна быть названа VM1VNET.
    Подсеть Выберите подсеть, в которой расположены экземпляры SQL Server. Значение по умолчанию должно быть VM1Subnet.
    Назначение IP-адресов статически.
    Частный IP-адрес Используйте созданный в кластере IP-адрес virtualip.
    Подписка Используйте подписку, которая использовалась для группы ресурсов.
    Группа ресурсов Выберите группу ресурсов, в которой расположены экземпляры SQL Server.
    Местонахождение Выберите расположение Azure, в котором расположены экземпляры SQL Server.

Настройка серверного пула

В Azure серверный пул адресов называется просто серверным пулом. В этом случае серверный пул — это адреса трех экземпляров SQL Server в группе доступности.

  1. В группе ресурсов щелкните созданную подсистему балансировки нагрузки.

  2. В разделе Параметры выберите Серверные пулы.

  3. На вкладке Серверные пулы выберите Добавить, чтобы создать серверный пул адресов.

  4. В колонке Добавление серверного пула в поле Имя введите имя серверного пула.

  5. В разделе Сопоставлено с выберите Виртуальная машина.

  6. Выберите каждую виртуальную машину в среде и свяжите с каждой из них соответствующий IP-адрес.

    Screenshot showing how to add a backend pool.

  7. Выберите Добавить.

Создание пробы

Проба определяет, как Azure проверяет, какой из экземпляров SQL Server в настоящее время владеет прослушивателем группы доступности. Azure проверяет службу по IP-адресу и порту, которые вы указываете при создании пробы.

  1. На панели Параметры подсистемы балансировки нагрузки выберите пробы работоспособности.

  2. На панели проб работоспособности нажмите кнопку "Добавить".

  3. Настройте пробу на панели добавления пробы . Для настройки пробы используйте следующие значения:

    Параметр Значение
    Имя Текст, представляющий имя пробы. Например, SQLAlwaysOnEndPointProbe.
    Протокол TCP
    порт. Вы можете использовать любой доступный порт. Например, 59999.
    Интервал 5
    Пороговое значение сбоя 2
  4. Нажмите ОК.

  5. Войдите на все виртуальные машины и откройте порт пробы с помощью следующих команд:

    sudo firewall-cmd --zone=public --add-port=59999/tcp --permanent
    sudo firewall-cmd --reload
    

Azure создает пробу, а затем использует ее для проверки того, какой экземпляр SQL Server имеет прослушиватель для группы доступности.

Настройка правил балансировки нагрузки

Правила балансировки нагрузки определяют способ направления трафика подсистемой балансировки нагрузки в экземплярах SQL Server. Для этой подсистемы балансировки нагрузки можно включить прямой возврат сервера, так как только один из трех экземпляров SQL Server владеет ресурсом прослушивателя группы доступности одновременно.

  1. На панели балансировки нагрузки Параметры выберите правила балансировки нагрузки.

  2. На панели правил балансировки нагрузки нажмите кнопку "Добавить".

  3. На панели "Добавление правил балансировки нагрузки" настройте правило балансировки нагрузки. Используйте следующие параметры:

    Параметр Значение
    Имя Текстовое имя, представляющее правила балансировки нагрузки. Например, SQLAlwaysOnEndPointListener.
    Протокол TCP
    порт. 1433
    Внутренний порт 1433. Это значение игнорируется, поскольку правило использует плавающий IP-адрес (прямой ответ от сервера).
    Проба Используйте имя пробы, созданной для этого балансировщика нагрузки.
    Сохранение сеанса Не допускается
    Время ожидания простоя (в минутах) 4
    Плавающий IP-адрес (прямой ответ от сервера) Включено

    Screenshot showing how to add a load balancing rule.

  4. Нажмите ОК.

  5. Azure настроит правило балансировки нагрузки. Теперь подсистема балансировки нагрузки настроена для маршрутизации трафика в экземпляр SQL Server, на котором размещен прослушиватель группы доступности.

На этом этапе группа ресурсов содержит подсистему балансировки нагрузки, через которую происходит подключение ко всем виртуальным машинам SQL Server. Подсистема балансировки нагрузки также содержит IP-адрес прослушивателя группы доступности SQL Server AlwaysOn, чтобы любой компьютер смог ответить на запросы групп доступности.

Создание ресурса прослушивателя группы доступности

Перед созданием ресурса подсистемы балансировки нагрузки в Pacemaker сначала создайте ресурс прослушивателя:

sudo crm configure primitive virtualip \
ocf:heartbeat:IPaddr2 \
params ip=x.y.z.a

В предыдущем примере x.y.z.a ссылается на внешний IP-адрес подсистемы балансировки нагрузки.

Создание ресурса подсистемы балансировки нагрузки в кластере

Следуйте инструкциям по настройке дистрибутива.

  1. Войдите на основную виртуальную машину. Чтобы включить порт пробы подсистемы балансировки нагрузки Azure (в нашем примере используется 59999), необходимо создать ресурс. Выполните следующую команду:

    sudo pcs resource create azure_load_balancer azure-lb port=59999
    
  2. Создайте группу, содержащую ресурсы virtualip и azure_load_balancer:

    sudo pcs resource group add virtualip_group azure_load_balancer virtualip
    

Добавление ограничений

  1. Чтобы ресурсы IP-адреса и группы доступности подсистемы балансировки нагрузки Azure выполнялись в одном узле, необходимо настроить ограничение совместного размещения. Выполните следующую команду:

    sudo pcs constraint colocation add azure_load_balancer ag_cluster-master INFINITY with-rsc-role=Master
    
  2. Создайте ограничение очередности, чтобы ресурс группы доступности запускался до ресурса IP-адреса подсистемы балансировки нагрузки Azure. Ограничение совместного размещения предполагает такое ограничение, поэтому его необходимо задать явно.

    sudo pcs constraint order promote ag_cluster-master then start azure_load_balancer
    
  3. Чтобы проверить ограничения, выполните следующую команду:

    sudo pcs constraint list --full
    

    Должен появиться следующий результат:

    Location Constraints:
    Ordering Constraints:
      promote ag_cluster-master then start virtualip (kind:Mandatory) (id:order-ag_cluster-master-virtualip-mandatory)
      promote ag_cluster-master then start azure_load_balancer (kind:Mandatory) (id:order-ag_cluster-master-azure_load_balancer-mandatory)
    Colocation Constraints:
      virtualip with ag_cluster-master (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-master-INFINITY)
      azure_load_balancer with ag_cluster-master (score:INFINITY) (with-rsc-role:Master) (id:colocation-azure_load_balancer-ag_cluster-master-INFINITY)
    Ticket Constraints:
    

Создание прослушивателя группы доступности

  1. На основном узле выполните следующую команду в sqlcmd или SSMS. Замените IP-адрес, указанный ниже, на IP-адрес virtualip.

    • SQL Server 2022 и более поздних версий:

      ALTER AVAILABILITY GROUP [ag1]
      ADD LISTENER 'ag1-listener' (
          WITH IP((
              '10.0.0.7',
              '0.0.0.0'
          )),
          PORT = 1433
      );
      GO
      
    • SQL Server 2017 и SQL Server 2019:

      ALTER AVAILABILITY GROUP [ag1]
      ADD LISTENER 'ag1-listener' (
          WITH IP((
              '10.0.0.7',
              '255.255.255.255'
          )),
          PORT = 1433
      );
      GO
      
  2. Войдите на каждый узел виртуальной машины. Используйте следующую команду, чтобы открыть файл hosts и настроить разрешение имен узлов для ag1-listener на каждой машине.

    sudo vi /etc/hosts
    

    В редакторе vi введите i, чтобы вставить текст, а в пустую строку добавьте IP-адрес ag1-listener. Затем рядом с IP-адресом добавьте ag1-listener после пробела.

    <IP of ag1-listener> ag1-listener
    

    Чтобы выйти из редактора vi, сначала нажмите клавишу Esc, а затем введите команду :wq для записи файла и выхода. Выполните это действие в каждом узле.

Тестирование прослушивателя и отработки отказа

В этом разделе рассматриваются вход в прослушиватель группы доступности SQL Server и тестирование отработки отказа.

Проверка входа на SQL Server с помощью прослушивателя группы доступности

  1. Используйте sqlcmd для входа в основной узел SQL Server с помощью имени прослушивателя группы доступности:

    • Используйте созданное ранее имя для входа и замените <YourPassword> правильным паролем. В следующем примере используется sa имя входа, созданное с помощью SQL Server.
    sqlcmd -S ag1-listener -U sa -P <YourPassword>
    
  2. Проверьте имя сервера, к которому вы подключены. Выполните следующую команду в sqlcmd:

    SELECT @@SERVERNAME;
    

    В выходных данных должен отобразиться текущий основной узел. Если вы никогда не тестировали отработку отказа, это должен быть VM1.

    Завершите сеанс SQL Server, введя команду exit.

Тестирование отработки отказа

  1. Выполните следующую команду, чтобы вручную выполнить отработку отказа первичной реплики в <VM2> или другую реплику. Замените <VM2> значением имени вашего сервера.

    sudo pcs resource move ag_cluster-master <VM2> --master
    
  2. Если вы проверите свои ограничения, то увидите, что из-за перехода на другой ресурс вручную было добавлено еще одно ограничение:

    sudo pcs constraint list --full
    

    Вы видите, что добавлено ограничение с идентификатором cli-prefer-ag_cluster-master .

  3. Удалите ограничение c идентификатором cli-prefer-ag_cluster-master, используя следующую команду:

    sudo pcs constraint remove cli-prefer-ag_cluster-master
    
  4. Проверьте кластерные ресурсы с помощью команды sudo pcs resource, теперь основным экземпляром должна быть <VM2>.

    Примечание.

    Эта статья содержит упоминания термина slave (ведомый) . Корпорация Майкрософт больше не использует его. Когда этот термин будет удален из программного обеспечения, мы удалим его из статьи.

    [<username>@<VM1> ~]$ sudo pcs resource
    Master/Slave Set: ag_cluster-master [ag_cluster]
        Masters: [ <VM2> ]
        Slaves: [ <VM1> <VM3> ]
    Resource Group: virtualip_group
        azure_load_balancer        (ocf::heartbeat:azure-lb):      Started <VM2>
        virtualip  (ocf::heartbeat:IPaddr2):       Started <VM2>
    
  5. Используйте sqlcmd для входа в основной реплика с помощью имени прослушивателя:

    • Используйте созданное ранее имя для входа и замените <YourPassword> правильным паролем. В следующем примере используется sa имя входа, созданное с помощью SQL Server.
    sqlcmd -S ag1-listener -U sa -P <YourPassword>
    
  6. Проверьте сервер, к которому вы подключены. Выполните следующую команду в sqlcmd:

    SELECT @@SERVERNAME;
    

    Вы увидите, что вы подключены к виртуальной машине, на которую вы выполнили отработку отказа.

Следующий шаг

Чтобы использовать прослушиватель группы доступности для экземпляров SQL Server, необходимо создать и настроить подсистему балансировки нагрузки.