10.9.24

Как добавить несколько прослушивателей в одну группу доступности AlwaysOn

Автор: Goden Yao, Program Manager SQL Server Engine High Availability
How to create multiple listeners for same Availability Group

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

Сценарий 1:

Используются устаревшие клиентские приложения/сервисы/программы, и невозможно изменить для них строку подключения. Кроме того, бывает, что эти устаревшие клиенты используют 3 разных варианта написания имени экземпляра для подключения к базам данных. Если использовать прослушивателя группы доступности AlwaysOn, и при этом не менять указанные в конфигурациях клиентов строки подключения к серверу, смогут подключиться только те клиенты, у которых будет нужное имя, т.е. один тип строки из трёх сможет использовать возможности AlwaysOn.

Для такого кейса, мы рассмотрели два возможных решения: CNAME или несколько прослушивателей. Последний вариант — наш «секрет», который я просто обожаю, поскольку, согласно документации, для SQL Server можно создать только одного прослушивателя на группу доступности. Можно создавать прослушиватели или добавлять прослушиватель к уже имеющимся.

Давайте рассмотрим оба этих решения.

Несколько прослушивателей в группе доступности

Плюсы:

  • Администратор баз данных может настраивать каждого прослушивателя отдельно (например, назначать разные IP-адреса, правила брандмауэра, включать/выключать некоторые из них и т. д.).
  • Более нагляден для администратора баз данных с точки зрения мониторинга, управления и настройки.
  • Администратор баз данных может обратиться к sys.dm_tcp_listener_states для проверки клиентского соединения в реальном времени всех прослушивателей.

Минусы:

  • Увеличение точек отказа и соответствующих этому рисков: любой из трёх прослушивателей может выйти из строя, после чего некоторые из устаревших клиентов перестанут подключаться к базам (мы предполагаем, что CNAME тут менее рискован).
  • Возможно, что в случае отказа, время переключения для старых версий SQL Server будет дольше (на пару секунд): отказоустойчивому кластеру Windows потребуется выполнить переключение всех прослушивателей вместо одного.

DNS (CNAME)

Плюсы:

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

Минусы:

  • Необходимы дополнительные права для управления CNAME — обычно, администратор баз данных не имеет права на прямую манипуляцию записями DNS.

Сценарий 2:

Многие клиенты устанавливают SQL Server на системы с поддержкой NUMA. Это позволяет настроить SQL Server на прослушивание нескольких портов, и в зависимости от выбранного порта система выделит клиенту ресурсы того узла NUMA, к которому подключен соответствующий порт.

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

Реализация

1. Настройте группу доступности AlwaysOn (agsc4), пропустив создание прослушивателя в мастере или в сценарии T-SQL.

2. Откройте оснастку Failover Cluster Manager и для роли группы доступности в меню выберите добавление ресурса, а там пункт: «Client Access Point». Там можно создать несколько точек (существует ограничение по квоте на количество компьютерных объектов, которые вы можете создать в одном кластере — по умолчанию это 20).

3. Результат будет похож на скриншот ниже. Там создано 3 прослушивателя и для каждого из них назначен IP-адрес.



4. Убедитесь, что все прослушиватели, которые нужно создать, находятся в состоянии
Online, и ассоциируйте их с ресурсом нужной группы доступности. Обязательно используйте в зависимостях «OR». Это означает что, пока хотя бы один прослушиватель в Online, ваша группа доступности считается работоспособной и доступной для подключения клиентов.



Мы рекомендуем использовать для IP-адресов зависимости “OR” для каждого прослушивателя, но при необходимости можно использовать “AND” (например, если в сети нужны IPv4 и IPv6, и чтобы каждый прослушиватель был всегда доступен).

Примечание переводчика: Не забудьте дать права в AD на серверное имя прослушивателя для имени кластера, серверных имён компьютеров экземпляров MSSQL в кластере, доменным учёткам служб этих экземпляров и, возможно, учтётке DBA, чтобы мог управлять всем этим.

5. Теперь, если вы выполните запрос к sys.availability_group_listeners – вы сможете их увидеть. Обратите внимание, на скриншоте ниже видно, что все порты имеют значение «NULL».



6. Пока ещё невозможно использовать эти прослушиватели. Нужно с помощью сценария T-SQL назначить порт для каждого из них.

В нашем примере для прослушивателей используется порт SQL Server по умолчанию - 1433, но вы конечно же можете назначить им другой порт (как подразумевается в Сценарии 2).

 

alter availability group [agsc4]

modify listener 'agsc4_listener1'

(port = 1433)

 

alter availability group [agsc4]

modify listener 'agsc4_listener2'

(port = 1433)

 

alter availability group [agsc4]

modify listener 'agsc4_listener3'

(port = 1433)

7. Если запросить sys.availability_group_listeners еще раз, вы должны увидеть, что появились порты и SQL Server их прослушивает.


8. Теперь, подключившись к любому из созданных вами прослушивателей, вы должны попасть на тот же экземпляр, на котором размещена первичная реплика группы доступности:

Отличия прослушивателей созданных в SSMS или в Cluster Manager

Как вы видели выше (и учитывая то, что в SQL Server 2012 CTP0/CTP1 это был единственный способ) можно создать прослушиватель и через Cluster Manager.

Так в чем же разница и для чего может понадобится это сделать?

Вот сравнение между прослушивателями, созданными с помощью средств SQL Server и в Cluster Manager:


 

Прослушиватель, созданный через SQL Server

Прослушиватель, созданный в Failover Cluster Manager

Можно ли использовать немедленно?

Да

Нет.

Прежде чем использовать порт, необходимо скриптом T-SQL назначить его прослушивателю.

IP-зависимости прослушивателей

«OR»

Только «OR» для всех IP-адресов прослушивателя.

«OR» или «AND»

Вы можете настроить «OR» или «AND» для IP-адресов прослушивателя в соответствии со своими потребностями

(например, если вы хотите, чтобы один адрес был IPv4, а другой IPv6 и оба были в онлайн).

RegisterAllProvidersIP = 1

Да

SQL Server устанавливает это свойство в 1 (true), для проверки, что в DNS зарегистрированы все IP-адреса прослушивателя.

Это необходимо для того, чтобы в случае сбоя вашему клиенту не пришлось разрешать новые IP-адреса из другой подсети (если используется сценарий с несколькими подсетями).

Нет

Если вам нужны возможности, указанные в ячейке слева, вам необходимо с помощью командлета PowerShell включить их самостоятельно.

Можно управлять средствами SQL Server

Да

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

Есть варианты

Вам необходимо в sys.availability_group_listeners проверить значение «is_conformant» для прослушивателей, созданных вне SQL Server.

Это свойство покажет вам, сможете ли вы управлять им в SQL Server или нет.

Если его значение не подтверждает возможность управления через SQL Server, единственное, что вы можете сделать сценарием T-SQL, это изменить порт. Вы не сможете удалить его или добавить IP-адреса – это нужно будет делать через Failover Cluster Manager.

И последнее, но не менее важное: используйте sys.dm_tcp_listener_states для проверки текущего состояния прослушивателей. Этот DMV очень полезен для устранения проблем, связанных с подключением.

Комментариев нет:

Отправить комментарий