Като администратори на база данни обикновено се натъкваме на нашите клиенти, които се оплакват, че текущият производствен сървър не е в състояние да задържи натоварването на сървъра и дали натоварването може да бъде балансирано с вторичния сървър. Това е възможно с база данни в DR сървър с база данни само за четене в доставка на регистрационни файлове и вторични реплики на SQL Server в групата за винаги на разположение. Най-голямото предимство на Always On Groups е, че ни позволява да настроим HA на ниво група за произволен брой бази данни и можем да създадем до четири вторични реплики и това е комбинация от клъстериране, доставка на журнали и огледално копиране на база данни, където е предаването на данни по-гъвкави и функционални.
Always On Readable Secondary Replica има функция за обработка на определени заявки за връзка само за четене, наречени маршрутизиране само за четене. По принцип по подразбиране и четенето, и намерението за четене се насочват към първичната реплика и нищо не е предназначено за вторичните реплики. Сега вторичните реплики могат да се използват не само за целите на архивиране, DBCC и отчитане, но също така могат да бъдат заявени в бъдеще, като се използва „Само за четене“ като тяхно намерение на приложението в низа за свързване на приложението.
Имаме три реплики SQL1, SQL2 и SQL3 в клъстера за отказване на Windows. Всеки възел има самостоятелен екземпляр на SQL Server 2012, инсталиран и конфигуриран с Always On AG. Ние винаги сме в AG Group, наречена “CODEAG” с името на слушателя “CODELIS”
На следващата екранна снимка SQL1 е първична реплика, SQL2 е вторична реплика, SQL3 е вторична реплика.
Как да конфигурирам списък за маршрутизиране само за четене в групи за винаги наличност
Стъпка 1:
Връзките се осъществяват към групата за наличност с помощта на името на слушателя или IP. Сега, за да създадете множество слушатели за една група наличност, моля, следвайте процедурата по-долу.
За ръчно създаване или конфигуриране на слушател за група за наличност
- Под Object Explorer се свържете с екземпляра, който държи основната реплика на групата за достъпност.
- Разгънете групата AON и щракнете върху групата наличност, за която се опитваме ръчно да конфигурираме слушателя и продължете.
- Щракнете с десния бутон върху възела на слушателите на групата наличност и изберете Нова команда за слушател. Това отваря нов диалогов прозорец за конфигуриране на слушател.
- Номерът на порта на съществуващ слушател може да бъде променен чрез разширяване на възела на слушателите на групата наличност, последвано от щракване с десния бутон върху слушателите и избор на свойствата.
- Сега въведете новия номер на порта и щракнете върху OK.
Идентифицирайте името на слушателя, конфигурирано за Always On репликация, като потърсите DMV, както е посочено по-долу.
ИЗБЕРЕТЕ AV.name КАТО AVGName, AVGLis.dns_name КАТО ListenerName, AVGLis.ip_configuration_string_from_cluster AS ListenerIPFROM sys.availability_group_listeners AVGLisINNER JOIN sys.prevailability_groups AV_ на AVgroup_ID.>На следващата екранна снимка името на групата на AG е CODEAG, а IP-адресът на слушателя на AG е CODELIS.
Стъпка 2:
За да конфигурираме маршрутизиране само за четене, трябва да конфигурираме репликите само за четене, за да позволим връзки само за четене към вторични реплики.
- Свържете се с екземпляра, който държи основната реплика.
- Разгънете възела за висока достъпност AON, след това възела на групата AG.
- Щракнете върху групата AG, чиято реплика трябва да бъде променена.
- Щракнете с десния бутон върху репликата и изберете свойства, за да промените достъпа до връзката за първичната и вторичната роля, както следва.
Вторичната роля има нова стойност от четливия вторичен списък.
Само за четене
Тази опция позволява достъп за четене на вторичните бази данни на тази реплика. Разрешени са само връзки само за четене.
Да
Тази опция позволява само достъп за четене, но всички връзки са разрешени за вторичната реплика.
Не
Това спира всички потребителски връзки към вторичната реплика и дори не ви позволява да четете.
Задайте четливите вторични свойства на Само за четене.
На следващата екранна снимка четливите вторични свойства на всяка вторична реплика са зададени на само с намерение за четене.
Стъпка 3:
На всяка четлива вторична реплика може да бъде присвоен маршрутизиращ URL адрес само за четене, който ще се използва за насочване на заявки за връзка с намерение за четене към конкретна четлива вторична реплика.
Използвайте T-SQL, за да посочите URL адрес за маршрутизиране само за четене за всички реплики в нашата група за наличност.
ПРОМЕНЯНЕ НА ГРУПАТА НА НАЛИЧНОСТ [CODEAG]МОДИФИЦИРАНЕ НА РЕПЛИКА ONN'SQL1' С(ВТОРИЧНА_РОЛЯ (ALLOW_CONNECTIONS =ЧЕТЕНЕ_САМО)); ПРОМЕНЯНЕ НА ГРУПАТА НА НАЛИЧНОСТ [CODEAG]МОДИФИЦИРАНЕ НА РЕПЛИКА ONN'SQL1' WITH(SECONDARY_ROLE) .abc.com:17999')); ПРОМЕНИ ГРУПАТА НА НАЛИЧНОСТ [CODEAG]МОДИФИЦИРАНЕ НА РЕПЛИКА ONN'SQL2' WITH(SECONDARY_ROLE (ALLOW_CONNECTIONS =READ_ONLY)); ПРОМЕНИ ГРУПАТА НА НАЛИЧНОСТ [CODEAG]MODIFY РЕПЛИКА ONN'SQL2' WITH(SECONDARY_ROLE (ALLOW_CONNECTIONS =READ_ONLY)); ПРОМЕНИ ГРУПАТА НА НАЛИЧНОСТ [CODEAG]MODIFY'MODIFY'SQL2SQL2' WITH(SECONDARY_ROLE (ALLOW_CONNECTIONS =READ_ONLY));ALTER AVAILABILITY GROUP [CODEAG]MODIFY'REPLICA ONN'SQL2' WIWI N'TCP://SQL2.abc.com:17999')); ПРОМЕНЯНЕ НА ГРУПАТА НА НАЛИЧНОСТ [CODEAG]МОДИФИЦИРАНЕ НА РЕПЛИКА ONN'SQL3' С(ВТОРИЧНА_РОЛЯ (ALLOW_CONNECTIONS =ЧЕТЕНЕ)); ПРОМЕНЯНЕ НА ГРУПАТА НА НАЛИЧНОСТ ODINN'SQL3' СЪС(SECONDARY_ROLE (ALLOW_CONNECTIONS =READ_ONLY)); ПРОМЕНЯНЕ НА НАЛИЧНОСТТА НА ГРУПАТА ODINN'SQL3' ' WITH(SECONDARY_ROLE (READ_ONLY_ROUTING_URL =N'TCP://SQL3.abc.com:17999'));Стъпка 4:
За репликата, която маркираме като маршрутизиране само за четене, когато е основна реплика, има нужда да посочите списък с маршрути само за четене и това се осъществява само когато локалната реплика се изпълнява под основната роля.
ПРОМЕНЯ ГРУПАТА НА НАЛИЧНОСТ [CODEAG]МОДИФИЦИРАНЕ НА РЕПЛИКА ONN'SQL1' С(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQL2','SQL3'))); ПРОМЕНЯНЕ НА ГРУПАТА НА НАЛИЧНОСТ [CODEAG]МОДИФИЦИРАНЕ НА РЕПЛИКАЦИЯ НА РЕПЛИКАЦИЯ ONN'SQL1' (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQL2','SQL3'))); ПРОМЕНЯВАНЕ НА ГРУПАТА НА НАЛИЧНОСТ [CODEAG]МОДИФИЦИРАНЕ НА РЕПЛИКА НА РЕПЛИКАЦИЯ 3. =('SQL2','SQL1'))); ПРОМЕНИ ГРУПАТА НА НАЛИЧНОСТ [CODEAG]МОДИФИЦИРАНЕ НА РЕПЛИКА ONN'SQL2' С(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQL3','SQL1')));В горния скрипт, примерът, когато SQL1 е основната реплика, работното натоварване само с намерение за четене ще бъде пренасочено към четените вторични реплики; SQL2 и SQL3 съответно:по подобен начин, ако SQL3 е основната реплика, работното натоварване само с намерение за четене ще бъде пренасочено към четените вторични реплики; SQL2 и SQL1 съответно.
Насоченият трафик само за четене ще бъде насочен към първата налична реплика, докато и освен ако не е достъпна, ще насочи трафика към следващата налична реплика в списъка с маршрути. Когато имате повече от една реплика, не е възможно да се споделя натоварването между репликите до SQL Server 2012 и 2014. Но SQL сървър 2016 ви позволява да балансирате натоварването между репликите само за четене.
Пример:
ПРОМЕНЯТЕ ГРУПАТА НА НАЛИЧНОСТ [CODEAG]МОДИФИЦИРАНЕ НА РЕПЛИКА ONN'SQL2' С(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQL3','SQL1'), 'SQL2')));Това поведение на маршрутизиращия списък „балансира натоварването“ връзки само за четене между SQL3 и SQL1. По-горе имаме два вградени списъка в списъка за маршрутизиране:
Списък 1:„SQL3“, „SQL1“
Списък 2:„SQL2“
Пътувайте до репликите в първия списък. SQL3 и SQL1 са достъпни за връзки само за четене. Първата входяща връзка само за четене ще бъде насочена към SQL3, втората връзка само за четене ще бъде насочена към SQL1, третата връзка само за четене ще бъде насочена към SQL3, четвъртата връзка само за четене ще бъде насочена към SQL1 и и така нататък, с кръгово разпределение на връзки само за четене между двете реплики в първия списък.
Ако някои реплики станат недостъпни, маршрутизирането ще продължи с останалите реплики в първия списък. Ако SQL3 или SQL1 станат недостъпни за връзки само за четене, тогава връзките само за четене ще бъдат насочени само към достъпните реплики само за четене в първия списък. Например, ако SQL3 е в несинхронизирано състояние или ALLOW_CONNECTIONS е настроен на NO, тогава всички връзки само за четене ще бъдат насочени към SQL1. Докато един от сървърите е наличен за връзки само за четене, НЯМА да се насочват към SQL2 НЯМА връзки само за четене.
Ако всички реплики в първия списък са недостъпни, насочване към реплики в следващия списък. Ако SQL3 и SQL1 станат недостъпни за връзки само за четене, тогава всички връзки само за четене ще бъдат насочени само към следващия списък с реплики, който в този случай е SQL2.
Продължете маршрутизирането към първия списък, ако има налични копия. Тъй като вторичните реплики, които имат по-висок приоритет в списъка, стават достъпни за връзки само за четене, бъдещите връзки само за четене ще се свързват с тях според случая.
В SQL Server 2016 можете да конфигурирате балансиране на натоварването в набор от реплики само за четене.
Стъпка 5:
sys.availability_read_only_routing_lists DMV, който връща списъка с маршрути само за четене на всяка реплика на групата наличност в групата за винаги наличност.
SELECT AVGSrc.replica_server_name AS SourceReplica , AVGRepl.replica_server_name AS ReadOnlyReplica, AVGRepl.read_only_routing_url AS RoutingURL, AVGRL.routing_priority AS RoutingPriorityFROM sys.availability_read_only_routing_lists AVGRLINNER JOIN sys.availability_replicas AVGSrc ON AVGRL.replica_id =AVGSrc.replica_idINNER JOIN sys.availability_replicas AVGRepl ON AVGRL.read_only_replica_id =AVGRepl.replica_idINNER JOIN sys.availability_groups AV ON AV.group_id =AVGSrc.group_idORDER BY SourceReplicaНа следващата екранна снимка резултатът показва URL адрес за маршрутизиране и приоритет на маршрутизиране.
Стъпка 6:
За да тествате маршрутизирането само за четене с помощта на SQLCMD, използвайте параметър –K ReadOnly, който показва вторичната реплика, получаваща връзки за четене съгласно списъка с маршрути.
На следващата екранна снимка вторичната реплика приема връзките за четене, т.е.... SQL2.
Стъпка 7:
Преминаване при отказ на групата за достъпност и тестване на маршрутизиране само за четене.
- В Object Explorer се свържете със сървърен екземпляр, който хоства вторична реплика на групата за наличност, която трябва да бъде преодоляна при отказ. Разгънете дървото на сървъра.
- Разгънете възела AlwaysOn High Availability и възела Availability Groups.
- Щракнете с десния бутон върху групата наличност, за да бъде преодоляна грешка, и изберете Failover.
Сега SQL2 става основна реплика и връзките се обработват от SQL1.
Синтаксисът на низа на връзката, който приложението трябва да използва, ще зависи от доставчика на SQL сървър.
Ако това е .Net Framework Data Provider 4.0.2 за SQL Server, синтаксисът ще бъде както следва:
Server=tcp:MyAgListener,portnumber;Database=SQL1;IntegratedSecurity=SSPI;ApplicationIntent=Само за четене;MultiSubnetFailover=Вярно
Заключение:
За да намалите натоварванията, това маршрутизиране само за четене остава най-добрият вариант. Приложение, включващо услугите за отчети на SQL Server, хоствани в SharePoint или инсталирането на Report Server в собствен режим, може да използва намерение само за четене, което избягва типичното блокиране, използване на паметта и процесора на първични възли.