Завжди в групі доступності, завжди переспрямовуйте користувача, щоб читати лише екземпляр


9

У нас є група «Завжди увімкнено» з первинною та включеною для читання вторинною. У нас є користувач із групи реалізацій, яка використовує базу даних, щоб перевірити правильність даних, які вони мають намір внести до бази даних.

Користувачі мають право читати лише з бази даних, але коли вони підключаються (через SSMS) через АР Слухача, вони завжди підключаються до активного вузла.

Я намагався змусити їх отримати прямий доступ до екземпляра лише для читання, але вони застрягли в дорозі, і через день-два вони знову повернулися на активний вузол.

Чи існує спосіб для SQL Server сказати, що цей користувач завжди буде з наміром читатись і перенаправляти їх туди?

ПРИМІТКА. Я намагався встановити "ApplicationIntent = ReadOnly" в додаткових параметрах з'єднання, але це, здається, не перенаправляє на вторинний вузол, і не є ідеальним рішенням, оскільки вони неминуче забудуть встановити його для нових початківців.

SQL Server 2012 Enterprise, група доступності 1 первинна, 1 читабельний вторинний із синхронним комітом.

Я не збираюся, щоб користувач підключався до пов'язаного сервера або через будь-який інший сервер. Користувачі підключаються безпосередньо до бази даних через SSMS (жодна інша програма), і я хотів би, щоб слухач AG (або щось там навколо) мав змогу направляти цього користувача на вторинний вузол, якщо такий є в наявності (оскільки він лише має доступ для читання там не має сенсу отримувати доступ до основного) без того, щоб користувач нічого робив, оскільки він рухається навколо машин і забуде додати наміри програми. Також я можу додати, що додаткові параметри з'єднання не завжди спрямовують вас на вторинний вузол.


крім коментарів нижче, вам потрібно вказати базу даних в АГ, до якої ви підключаєтесь.
swasheck

Відповіді:


4

У мене немає відповіді на все ваше запитання (хоча я сьогодні відповів на подібне запитання https://dba.stackexchange.com/a/137844/36812 ), але ви згадали, що використання ApplicationIntent = ReadOnly не працює належним чином.

Ви налаштували лише маршрутизовані URL-адреси для читання? Тому що це не зроблено з поля, і якщо ви цього не зробите, ці налаштування і цей прапор не працюватимуть. Я думаю, якби ти працював тоді, ти можеш почати переоцінювати свої вимоги.

Інструкції щодо MSDN https://msdn.microsoft.com/en-us/library/hh710054.aspx та найпростіші дії в PowerShell.

Set-Location SQLSERVER:\SQL\PrimaryServer\default\AvailabilityGroups\MyAg
$primaryReplica = Get-Item "AvailabilityReplicas\PrimaryServer"
$secondaryReplica = Get-Item "AvailabilityReplicas\SecondaryServer"

Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://PrimaryServer.domain.com:1433" -InputObject $primaryReplica
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://SecondaryServer.domain.com:1433" -InputObject $secondaryReplica
Set-SqlAvailabilityReplica -ReadOnlyRoutingList "SecondaryServer","PrimaryServer" -InputObject $primaryReplica

1

Отож, те, що ви хочете, - це рішення десь із пункту та натискання або налаштування десь. На жаль, жодне з них наразі не існує у формі "поза поличкою". Було б дійсно приємно, якби Microsoft включила це до налаштувань підключення до зареєстрованого сервера, щоб його можна було зберегти, але, на жаль, вони цього не роблять.

Це дає вам один з двох варіантів:

  • Напишіть щось собі
  • Змінення поведінки користувачів

Я наткнувся на завантаження Microsoft для SNAC - SQL Native Access Client, шукаючи щось, що може відповідати вашим вимогам. Це дозволить вам написати невеликий шматочок коду, щоб надати користувачам кнопку доступу безпосередньо до вторинного лише для читання. https://blogs.msdn.microsoft.com/alwaysonpro/2013/08/02/connect-to-sql-server-using-application-intent-read-only/

Інша можливість - змусити користувачів заповнити діалог параметрів з'єднання під час підключення через SSMS. Щоб змусити цю поведінку, вам потрібно буде змінити входи на первинному та вторинному серверах, забороняючи підключатися до основного та дозволяючи підключатися до вторинних. Ви можете використовувати завдання SQL Agent, щоб перевірити стан сервера та встановити вхід відповідно.

Щоправда, я не намагався зробити останнє, але теоретично це має працювати.


-2

Схоже, це тепер є функцією в SQL Server 2019.

З вторинної на первинну репліку перенаправлення з'єднання для читання / запису (Завжди в групах доступності) в офіційній документації:

Програма попереднього перегляду SQL Server 2019 CTP 2.0 вводить вторинну до первинної переадресації з'єднання для читання / запису репліки для груп "Завжди в наявності". Перенаправлення з'єднання для читання / запису доступне на будь-якій платформі операційної системи. Це дозволяє підключення клієнтських додатків до первинної репліки незалежно від цільового сервера, зазначеного в рядку з'єднання.

Наприклад, рядок з'єднання може орієнтуватися на вторинну репліку. Залежно від конфігурації репліки групи доступності (AG) та налаштувань у рядку з'єднання, з'єднання може бути автоматично переспрямоване на первинну репліку.


Я не впевнений, що я бачу, наскільки ця нова функція актуальна тут. Сценарій ОП, схоже, відрізняється від того, для якого призначена ця функція. ОП хоче переспрямувати з'єднання лише для читання на вторинний (лише для читання) вузол, тоді як у документації на цю нову функцію йдеться про те, що вона призначена для перенаправлення з'єднань читання / запису на первинний вузол. Чи можете ви, будь ласка, детальніше розглянути питання про те, як нова функціональність може бути використана для вирішення проблеми?
Андрій М
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.