Sdílet prostřednictvím


Konfigurace směrování pouze pro čtení pro skupinu dostupnosti Always On

platí pro:SQL Server

Ke konfiguraci skupiny dostupnosti AlwaysOn pro podporu směrování jen pro čtení v SQL Serveru můžete použít Transact-SQL nebo PowerShell. Směrování jen pro čtení odkazuje na schopnost SQL Serveru směrovat požadavky na připojení jen pro čtení do dostupné sekundární repliky, která umožňuje čtení (to znamená repliky nakonfigurované tak, aby podporovala úlohy jen pro čtení, pokud je spuštěna v sekundární roli). Aby skupina dostupnosti podporovala směrování jen pro čtení, musí mít posluchač skupiny dostupnosti. Klienti jen pro čtení musí směrovat své požadavky na připojení k tomuto nasloucháči a připojovací řetězce klienta musí zadat záměr aplikace jako "jen pro čtení." To znamená, že musí být připojovací požadavky s úmyslem pro čtení.

Směrování jen pro čtení je dostupné v SQL Serveru 2016 (13.x) a novějším.

Poznámka:

Informace o tom, jak nakonfigurovat sekundární repliku pro čtení, naleznete v tématu Konfigurace Read-Only Access na replice dostupnosti (SQL Server).

Požadavky

Jaké vlastnosti repliky potřebujete nakonfigurovat tak, aby podporovaly směrování Read-Only?

  • Pro každou čitelné sekundární repliku, která podporuje směrování jen pro čtení, musíte zadat adresu URL směrování jen pro čtení. Tato adresa URL se projeví jenom v případě, že je místní replika spuštěná pod sekundární rolí. Adresa URL směrování jen pro čtení musí být zadána podle potřeby pro jednotlivé repliky. Každá adresa URL pro směrování pouze pro čtení se používá ke směrování žádosti o připojení s úmyslem čtení na konkrétní čitelnou sekundární repliku. Každá čitelná sekundární replika má obvykle přiřazenou adresu URL pro směrování jen pro čtení.

    Informace o výpočtu adresy URL směrování jen pro čtení pro repliku dostupnosti najdete v tématu Výpočet read_only_routing_url pro funkci AlwaysOn.

  • Pro každou repliku dostupnosti, kterou chcete podporovat směrování jen pro čtení, pokud se jedná o primární repliku, musíte zadat seznam směrování jen pro čtení. Daný seznam směrování pouze pro čtení se uplatní pouze když je místní replika spuštěná jako primární replika. Tento seznam musí být podle potřeby určen individuálně pro každou replikaci. Každý seznam směrování jen pro čtení obvykle obsahuje každou adresu URL směrování jen pro čtení s adresou URL místní repliky na konci seznamu.

    Poznámka:

    Požadavky na připojení záměru pro čtení se směrují na první dostupnou položku v seznamu směrování jen pro čtení aktuální primární repliky. Vyrovnávání zatížení mezi replikami jen pro čtení se ale podporuje. Další informace najdete v tématu Konfigurace vyrovnávání zatížení mezi replikami jen pro čtení.

Poznámka:

Informace o naslouchacích procesech skupiny dostupnosti a další informace o směrování jen pro čtení najdete v tématu Naslouchací procesy skupiny dostupnosti, připojení klienta a převzetí služeb při selhání aplikací (SQL Server).

Povolení

Úkol Povolení
Konfigurace replik při vytváření skupiny dostupnosti Vyžaduje členství v pevné roli serveru správce systému a buď oprávnění k vytvoření SKUPINY DOSTUPNOSTI, oprávnění ke změně jakékoli SKUPINY DOSTUPNOSTI nebo oprávnění ke správě SERVERU.
Úprava repliky dostupnosti Vyžaduje oprávnění ALTER AVAILABILITY GROUP pro skupinu dostupnosti, oprávnění CONTROL AVAILABILITY GROUP, oprávnění ALTER ANY AVAILABILITY GROUP nebo oprávnění CONTROL SERVER.

Použití Transact-SQL

Konfigurace seznamu směrování jen pro čtení

Pomocí následujících kroků nakonfigurujte směrování jen pro čtení pomocí jazyka Transact-SQL. Příklad kódu najdete v části Příklad (Transact-SQL), dále v této části.

  1. Připojte se k instanci serveru, která je hostitelem primární repliky.

  2. Pokud zadáváte repliku pro novou skupinu dostupnosti, použijte příkaz CREATE AVAILABILITY GROUP Transact-SQL. Pokud přidáváte nebo upravujete repliku pro existující skupinu dostupnosti, použijte příkaz ALTER AVAILABILITY GROUP Transact-SQL.

    • Pokud chcete nakonfigurovat směrování jen pro čtení pro sekundární roli, zadejte v klauzuli ADD REPLICA nebo MODIFY REPLICA WITH možnost SECONDARY_ROLE následujícím způsobem:

      SECONDARY_ROLE ( READ_ONLY_ROUTING_URL ='TCP://system-address:port')

      Parametry adresy URL směrování jen pro čtení jsou následující:

      systémová adresa
      Je řetězec, například název systému, plně kvalifikovaný název domény nebo IP adresa, který jednoznačně identifikuje cílový systém počítače.

      přístav
      Je číslo portu, které používá databázový stroj instance SQL Serveru.

      Příklad: SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433')

      V klauzuli MODIFY REPLICA je ALLOW_CONNECTIONS nepovinný, pokud je replika už nakonfigurovaná tak, aby umožňovala připojení jen pro čtení.

      Další informace naleznete v tématu Výpočet read_only_routing_url pro AlwaysOn.

    • Pokud chcete nakonfigurovat směrování jen pro čtení pro primární roli, zadejte v klauzuli ADD REPLICA nebo MODIFY REPLICA WITH možnost PRIMARY_ROLE následujícím způsobem:

      PRIMARY_ROLE ( READ_ONLY_ROUTING_LIST =('server' [ ;... n ] ))

      kde server identifikuje instanci serveru, která je hostitelem sekundární repliky jen pro čtení ve skupině dostupnosti.

      Příklad: PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('Server1','Server2'))

      Poznámka:

      Před konfigurací seznamu směrování jen pro čtení musíte nastavit adresu URL směrování jen pro čtení.

Konfigurace vyrovnávání zatížení mezi replikami jen pro čtení

Počínaje SQL Serverem 2016 (13.x) můžete nakonfigurovat vyrovnávání zatížení mezi sadou replik jen pro čtení. Dříve směrování jen pro čtení vždy směroval provoz na první dostupnou repliku v seznamu směrování. Pokud chcete tuto funkci využít, použijte jednu úroveň vnořených závorek kolem instancí serveru READ_ONLY_ROUTING_LIST v příkazech CREATE AVAILABILITY GROUP nebo ALTER AVAILABILITY GROUP .

Například následující směrovací seznam rovnoměrně rozkládá zatížení žádostí o připojení s úmyslem čtení mezi dvě read-only repliky Server1 a Server2. Vnořené závorky, které obklopují tyto servery, identifikují sadu pro vyrovnávání zátěže. Pokud v této sadě není k dispozici žádná replika, bude pokračovat pokusem o postupné připojení k ostatním replikám Server3 a Server4v seznamu směrování jen pro čtení.

READ_ONLY_ROUTING_LIST = (('Server1','Server2'), 'Server3', 'Server4')  

Všimněte si, že každá položka v seznamu směrování může být souborem replik pro čtení s vyváženým zatížením. Následující příklad ukazuje toto.

READ_ONLY_ROUTING_LIST = (('Server1','Server2'), ('Server3', 'Server4', 'Server5'), 'Server6')  

Podporuje se pouze jedna úroveň vnořených závorek.

Příklad (Transact-SQL)

Následující příklad upraví dvě repliky dostupnosti existující skupiny dostupnosti, aby podporovaly směrování jen pro čtení, AG1 pokud jedna z těchto replik aktuálně vlastní primární roli. Chcete-li identifikovat instance serveru, které hostují repliku dostupnosti, tento příklad určuje názvyCOMPUTER01 instancí a COMPUTER02.

ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER01' WITH   
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));  
ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER01' WITH   
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433'));  
  
ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER02' WITH   
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));  
ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER02' WITH   
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER02.contoso.com:1433'));  
  
ALTER AVAILABILITY GROUP [AG1]   
MODIFY REPLICA ON  
N'COMPUTER01' WITH   
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER02','COMPUTER01')));  
  
ALTER AVAILABILITY GROUP [AG1]   
MODIFY REPLICA ON  
N'COMPUTER02' WITH   
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER01','COMPUTER02')));  
GO  
  

Použití PowerShellu

Konfigurace seznamu směrování jen pro čtení

Pomocí následujícího postupu nakonfigurujte směrování jen pro čtení pomocí PowerShellu. Příklad kódu najdete v části Příklad (PowerShell) dále v této části.

  1. Nastavte výchozí (cd) na instanci serveru, která je hostitelem primární repliky.

  2. Při přidávání repliky dostupnosti do skupiny dostupnosti použijte rutinu New-SqlAvailabilityReplica . Při úpravě existující repliky dostupnosti použijte rutinu Set-SqlAvailabilityReplica . Relevantní parametry jsou následující:

    • Pokud chcete nakonfigurovat směrování jen pro čtení pro sekundární roli, zadejte parametrUrl pro ReadonlyRoutingConnectionUrl.

      kde je adresa URL plně kvalifikovaným názvem domény (FQDN) a portem připojení, které se mají použít při směrování na repliku pro připojení jen pro čtení. Příklad: -ReadonlyRoutingConnectionUrl "TCP://DBSERVER8.manufacturing.Adventure-Works.com:7024"

      Další informace naleznete v tématu Výpočet read_only_routing_url pro AlwaysOn.

    • Pokud chcete nakonfigurovat přístup k připojení pro primární roli, zadejte server ReadonlyRoutingList[,... n ], kde server identifikuje instanci serveru, která je hostitelem sekundární repliky jen pro čtení ve skupině dostupnosti. Příklad: -ReadOnlyRoutingList "SecondaryServer","PrimaryServer"

      Poznámka:

      Před konfigurací seznamu směrování jen pro čtení musíte nastavit adresu URL směrování jen pro čtení repliky.

    Poznámka:

    Pokud chcete zobrazit syntaxi rutiny, použijte rutinu Get-Help v prostředí SQL Server PowerShell. Další informace najdete v tématu Získání nápovědy k SQL Serveru PowerShell.

Nastavení a použití zprostředkovatele PowerShellu pro SQL Server

Příklad (PowerShell)

Následující příklad nakonfiguruje primární repliku a jednu sekundární repliku ve skupině dostupnosti pro směrování jen pro čtení. Nejprve příklad přiřadí každé replice URL adresu pro směrování pouze pro čtení. Potom nastaví seznam směrování pouze pro čtení na primární replice. Připojení s vlastností ReadOnly nastavenou v připojovacím řetězci budou přesměrována na sekundární repliku. Pokud tato sekundární replika není čitelná (podle nastavení ConnectionModeInSecondaryRole ), připojení se přesměruje zpět na primární repliku.

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  

Sledovat: Po dokončení konfigurace směrování Read-Only

Jakmile jsou aktuální primární a čitelné sekundární repliky nakonfigurovány tak, aby podporovaly směrování jen pro čtení v obou rolích, mohou čitelné sekundární repliky přijímat žádosti o připojení s úmyslem čtení od klientů, kteří se připojují prostřednictvím naslouchadla skupiny dostupnosti.

Návod

Při použití nástroje bcp nebo nástroje sqlcmd můžete zadat přístup jen pro čtení k jakékoli sekundární replice, která je povolena pro přístup jen pro čtení, zadáním přepínače -K Jen pro čtení.

Požadavky a doporučení pro klientské Connection-Strings

Aby klientská aplikace používala směrování jen pro čtení, musí její připojovací řetězec splňovat následující požadavky:

  • Použijte protokol TCP.

  • Nastavte atribut nebo vlastnost záměru aplikace na jen pro čtení.

  • Odkazujte na posluchače skupiny dostupnosti, která je nakonfigurována tak, aby podporovala směrování pouze pro čtení.

  • Odkázat na databázi v této skupině dostupnosti.

Kromě toho doporučujeme, aby připojovací řetězce umožnily převzetí služeb při selhání v prostředí s více podsítěmi, která podporují paralelní klientská vlákna pro každou repliku na každé podsíti. Tím se minimalizuje doba opětovného připojení klienta po převzetí služeb.

Syntaxe připojovacího řetězce závisí na poskytovateli SQL Serveru, který aplikace používá. Následující příklad připojovacího řetězce pro poskytovatele dat rozhraní .NET Framework 4.0.2 pro SQL Server znázorňuje části připojovacího řetězce, které jsou nezbytné a doporučené pro efektivní směrování jen pro čtení.

Server=tcp:MyAgListener,1433;Database=Db1;IntegratedSecurity=SSPI;ApplicationIntent=ReadOnly;MultiSubnetFailover=True  

Další informace o záměru aplikace jen pro čtení a směrování jen pro čtení najdete v tématu Naslouchací procesy skupiny dostupnosti, připojení klienta a převzetí služeb při selhání aplikací (SQL Server).

Pokud směrování Read-Only nefunguje správně

Informace o řešení potíží s konfigurací směrování jen pro čtení naleznete v tématu Read-Only Směrování nefunguje správně.

Návrat k výchozímu chování směrování

Počínaje SQL Serverem 2025 (17.x) můžete zadat NONE jako READ_WRITE_ROUTING_URL nebo READ_ONLY_ROUTING_URL cíl k vrácení zadaného směrování pro repliky dostupnosti a vykonávat směrování provozu na základě výchozího chování. Další informace najdete v příkazu ALTER AVAILABILITY GROUP Transact-SQL.

Další kroky

Zobrazit konfigurace směrování jen pro čtení

Konfigurace přístupu k připojení klienta

Použití připojovacích řetězců v aplikacích

blogy:

Další obsah