Published on

October 13, 2019

Улучшение подключаемости к группе доступности SQL Server

Недавно я столкнулся с клиентом, у которого возникли проблемы с подключаемостью к группе доступности SQL Server с тремя подсетями. После исследования проблемы с поддержкой Microsoft было обнаружено, что сторонние приложения, подключающиеся к группе доступности, не указывали “MultiSubNetFailover = True” в своих строках подключения.

Это упущение вызывало случайную высокую задержку при подключении, так как DNS-запросы с клиентской стороны имели 66% шанс возвращать неправильный IP-адрес от слушателя. Чтобы решить эту проблему, клиент отключил “RegisterAllProvidersIP” в кластере, что временно исправило проблему задержки подключения. Однако, это решение не без своих недостатков.

Отключение “RegisterAllProvidersIP” ограничивает доступность IP-адресов для слушателя только IP-адресом слушателя в подсети основной реплики. С другой стороны, включение “RegisterAllProvidersIP” позволяет одновременно перечислять все IP-адреса сайта для слушателя. Это особенно полезно при использовании строк подключения с “MultiSubnetFailover = True”, так как это обеспечивает более быстрое переключение и гарантирует наиболее быструю возможную переход после сбоя группы доступности.

Однако, важно отметить, что включение “RegisterAllProvidersIP” может вызывать проблемы с подключением для любых строк подключения, которые не используют или не могут использовать “MultiSubnetFailover”. Поэтому рекомендуется включать “RegisterAllProvidersIP” только тогда, когда “MultiSubnetFailover = True” может быть использовано во всех строках подключения приложения.

Еще одним важным моментом является настройка “HostrecordTTL”, которая определяет интервал времени, в течение которого клиентская ОС запрашивает DNS для получения новой информации. По умолчанию “HostrecordTTL” установлен на 20 минут. Уменьшение “HostrecordTTL” до 120 секунд (2 минуты) может сократить время простоя после сбоя группы доступности. Однако, это изменение также увеличивает трафик и нагрузку на DNS-серверы.

Хотя рекомендация Microsoft отключить “RegisterAllProvidersIP” и уменьшить “HostrecordTTL” может служить быстрым решением, это не масштабируемое решение. Настоящая причина проблемы заключается в строках подключения приложения. Идеальным решением было бы обновление строк подключения сторонних приложений для включения “MultiSubnetFailover = True”. Эта функция доступна с 2012 года и должна поддерживаться современными поставщиками данных.

Если стороннее приложение все еще использует OLEDB, есть новый поставщик данных под названием MSOLEDBSQL, выпущенный в 2018 году, который работает со всеми предыдущими реализациями MS OLE DB. Для тех, кто использует ODBC, новый ODBC Driver 17 поддерживает “MultiSubnetFailover”. Если приложения поставщиков используют устаревшие поставщики, такие как SQLNCLI10 или не-Microsoft поставщики, рекомендуется проверить наличие более новых версий или альтернатив.

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

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.