Přesměrování připojení pro čtení a zápis ze sekundární na primární repliku (skupiny dostupnosti Always On)

Platí pro: SQL Server 2019 (15.x) a novější

SQL Server 2019 (15.x) zavádí přesměrování připojení pro čtení a zápis ze sekundární do primární repliky pro skupiny dostupnosti Always On. Přesměrování připojení pro čtení a zápis je k dispozici na libovolné platformě operačního systému. Umožňuje přesměrování připojení klientských aplikací na primární repliku bez ohledu na cílový server zadaný v připojovacím řetězci.

Například připojovací řetězec může cílit na sekundární repliku. V závislosti na konfiguraci repliky skupiny dostupnosti a nastavení v připojovacím řetězci je možné připojení automaticky přesměrovat na primární repliku.

Případy použití

Před verzí SQL Server 2019 (15.x) naslouchací proces skupiny dostupnosti a odpovídající prostředek clusteru přesměrovávají uživatelský provoz na primární repliku, aby bylo po převzetí služeb při selhání zajištěno opětovné připojení. SQL Server 2019 (15.x) nadále podporuje funkce naslouchacího procesu AG a přidává přesměrování připojení k replice pro scénáře, ve kterých nelze zahrnout naslouchací proces. Například:

  • Clusterová technologie, se kterou se integrují skupiny dostupnosti SQL Serveru, nenabízí obdobnou funkci, jako je naslouchací bod
  • Konfigurace s více podsítěmi, například v cloudu, nebo plovoucí IP adresa ve více podsítích s nástrojem Pacemaker, kde se konfigurace kvůli zapojení více komponent stává složitou, náchylnou k chybám a obtížně se řeší
  • Typ clusteru pro škálování čtení nebo zotavení po havárii je NONE, protože neexistuje žádný přímočarý mechanismus, který by zajistil transparentní opětovné připojení při ručním převzetí služeb při selhání.

Požadavek

Aby sekundární replika mohla přesměrovávat požadavky na připojení pro čtení i zápis:

  • Sekundární replika musí být online.
  • Specifikace PRIMARY_ROLE repliky musí obsahovat READ_WRITE_ROUTING_URL.
  • Připojovací řetězec musí být ReadWrite, a to buď definováním ApplicationIntent jako ReadWrite, nebo nenastavením ApplicationIntent a ponecháním výchozí hodnoty (ReadWrite).

Nastavit možnost READ_WRITE_ROUTING_URL

Pokud chcete nakonfigurovat přesměrování připojení pro čtení/zápis, nastavte pro primární repliku při vytváření skupiny dostupnosti hodnotu READ_WRITE_ROUTING_URL.

V SQL Serveru 2019 (15.x) READ_WRITE_ROUTING_URL byl přidán do <add_replica_option> specifikace. Viz následující témata:

PRIMARY_ROLE(READ_WRITE_ROUTING_URL) není nastaveno (výchozí)

Ve výchozím nastavení není u repliky nastavené přesměrování připojení pro čtení/zápis. Způsob, jakým sekundární replika zpracovává požadavky na připojení, závisí na tom, jestli je sekundární replika nastavená tak, aby umožňovala připojení a nastavení ApplicationIntent v připojovacím řetězci. Následující tabulka ukazuje, jak sekundární replika zpracovává připojení na základě hodnot SECONDARY_ROLE (ALLOW CONNECTIONS = ) a ApplicationIntent.

ApplicationIntent hodnota SECONDARY_ROLE (ALLOW CONNECTIONS = NO) SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) SECONDARY_ROLE (ALLOW CONNECTIONS = ALL)
ApplicationIntent=ReadWrite
Výchozí
Selhání připojení Selhání připojení Úspěšné připojení
Čtení je úspěšné.
Neúspěšné zápisy
ApplicationIntent=ReadOnly Selhání připojení Úspěšné připojení Úspěšné připojení

Předchozí tabulka ukazuje výchozí chování, které je stejné jako verze SQL Serveru před SQL Serverem 2019 (15.x).

PRIMARY_ROLE(READ_WRITE_ROUTING_URL) je nastaveno

Po nastavení přesměrování připojení pro čtení a zápis se způsob, jakým replika zpracovává požadavky na připojení, změní. Chování připojení stále závisí na nastavení SECONDARY_ROLE (ALLOW CONNECTIONS = ) a ApplicationIntent. Následující tabulka ukazuje, jak sekundární replika s nastavením READ_WRITE_ROUTING zpracovává připojení na základě SECONDARY_ROLE (ALLOW CONNECTIONS = ) a ApplicationIntent.

ApplicationIntent hodnota SECONDARY_ROLE (ALLOW CONNECTIONS = NO) SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) SECONDARY_ROLE (ALLOW CONNECTIONS = ALL)
ApplicationIntent=ReadWrite
Výchozí
Selhání připojení Selhání připojení Trasa připojení k primárnímu
ApplicationIntent=ReadOnly Selhání připojení Úspěšné připojení Úspěšné připojení

Předchozí tabulka ukazuje, že pokud má primární replika nastaveno READ_WRITE_ROUTING_URL, sekundární replika přesměruje připojení na primární repliku, pokud SECONDARY_ROLE (ALLOW CONNECTIONS = ALL) a připojení určuje ReadWrite.

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 jazyka Transact-SQL.

Příklad

V tomto příkladu má skupina dostupnosti tři repliky:

  • Primární replika na COMPUTER01
  • Synchronní sekundární replika na COMPUTER02
  • Asynchronní sekundární replika na COMPUTER03

Následující obrázek představuje skupinu dostupnosti.

Skupina dostupnosti s primární replikou, sekundární replikou a asynchronní sekundární replikou

Následující skript jazyka Transact-SQL vytvoří tuto skupinu dostupnosti (AG). V tomto příkladu každá replika READ_WRITE_ROUTING_URLurčuje .

CREATE AVAILABILITY GROUP MyAg   
     WITH ( CLUSTER_TYPE =  NONE )  
   FOR   
     DATABASE  [<Database1>]   
   REPLICA ON   
      'COMPUTER01' WITH   
         (  
         ENDPOINT_URL = 'TCP://COMPUTER01.<domain>.<tld>:5022',  
         AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,  
         FAILOVER_MODE = MANUAL,  
         SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL,   
            READ_ONLY_ROUTING_URL = 'TCP://COMPUTER01.<domain>.<tld>:1433' ),
         PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,   
            READ_ONLY_ROUTING_LIST = ('COMPUTER02', 'COMPUTER03'),
            READ_WRITE_ROUTING_URL = 'TCP://COMPUTER01.<domain>.<tld>:1433' ),   
         SESSION_TIMEOUT = 10  
         ),   
      'COMPUTER02' WITH   
         (  
         ENDPOINT_URL = 'TCP://COMPUTER02.<domain>.<tld>:5022',  
         AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,  
         FAILOVER_MODE = MANUAL, 
         SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL,   
            READ_ONLY_ROUTING_URL = 'TCP://COMPUTER02.<domain>.<tld>:1433' ),  
         PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,   
            READ_ONLY_ROUTING_LIST = ('COMPUTER01', 'COMPUTER03'),  
            READ_WRITE_ROUTING_URL = 'TCP://COMPUTER02.<domain>.<tld>:1433' ),
         SESSION_TIMEOUT = 10  
         ),   
      'COMPUTER03' WITH   
         (  
         ENDPOINT_URL = 'TCP://COMPUTER03.<domain>.<tld>:5022',  
         AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,  
         FAILOVER_MODE = MANUAL,  
         SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL,   
            READ_ONLY_ROUTING_URL = 'TCP://COMPUTER03.<domain>.<tld>:1433' ),  
         PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,   
            READ_ONLY_ROUTING_LIST = ('COMPUTER01', 'COMPUTER02'),  
            READ_WRITE_ROUTING_URL = 'TCP://COMPUTER03.<domain>.<tld>:1433' ),
         SESSION_TIMEOUT = 10  
         );
GO  
  • <domain>.<tld>
    • Doména a doména nejvyšší úrovně plně kvalifikovaného názvu domény. Například: corporation.com.

Chování připojení

V následujícím diagramu se klientská aplikace připojí k COMPUTER02 s ApplicationIntent=ReadWrite. Připojení je přesměrováno na primární repliku.

Připojení k počítači 2 se znovu směruje na primární repliku.

Sekundární replika přesměruje volání čtení a zápisu na primární repliku. Připojení pro čtení i zápis ke kterékoli z replik bude přesměrováno na primární repliku.

V následujícím diagramu došlo k ručnímu převzetí služeb při selhání primární repliky COMPUTER02. Klientská aplikace se připojuje k COMPUTER01 pomocí ApplicationIntent=ReadWrite. Připojení je přesměrováno na primární repliku.

Připojení přesměrováno na novou primární repliku v počítači 2

Viz také

přehled skupin dostupnosti AlwaysOn (SQL Server)

O přístupu klientského připojení k replikám dostupnosti (SQL Server)

Naslouchací služby Skupiny dostupnosti, Připojení klientů a Přepnutí služeb při selhání aplikací (SQL Server)