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 их прослушивает.
Отличия прослушивателей созданных в 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 и оба были в онлайн). |
Да 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 очень полезен для устранения проблем, связанных с подключением.
Комментариев нет:
Отправить комментарий