Udostępnij przez


Przekierowanie połączenia odczytu/zapisu z repliki pomocniczej do repliki podstawowej (Always On Availability Groups)

Dotyczy: SQL Server 2019 (15.x) i nowsze

Program SQL Server 2019 (15.x) wprowadza przekierowanie połączenia odczytu/zapisu z repliki wtórnej do repliki podstawowej dla zawsze włączonych grup dostępności. Przekierowywanie połączeń odczytu/zapisu jest dostępne na dowolnej platformie systemu operacyjnego. Umożliwia ona przekierowywanie połączeń aplikacji klienckich do repliki podstawowej niezależnie od serwera docelowego określonego w parametrach połączeń.

Na przykład łańcuch połączenia może być przeznaczony dla repliki pomocniczej. W zależności od konfiguracji repliki grupy dostępności i ustawień w parametrach połączenia połączenie może zostać automatycznie przekierowane do repliki podstawowej.

Przypadki użycia

Przed programem SQL Server 2019 (15.x) odbiornik grupy dostępności i odpowiedni zasób klastra przekierowuje ruch użytkowników do repliki podstawowej, aby zapewnić ponowne połączenie po przejściu w tryb failover. Program SQL Server 2019 (15.x) nadal obsługuje funkcję odbiornika grupy dostępności i dodaje przekierowanie połączenia repliki dla scenariuszy, które nie mogą zawierać odbiornika. Przykład:

  • Technologia klastra, którą integrują grupy dostępności SQL Server, nie oferuje funkcji podobnej do odbiornika.
  • Konfiguracja z wieloma podsieciami, na przykład w chmurze, oraz wirtualnym adresie IP (tzw. "floating IP") z wieloma podsieciami za pomocą Pacemaker, gdzie konfiguracje stają się złożone, podatne na błędy i trudne do zdiagnozowania z powodu licznych zaangażowanych komponentów.
  • Skalowanie poziome odczytu lub odzyskiwanie po awarii, a także typ klastra: NONE, ponieważ nie istnieje prosty mechanizm zapewniający przezroczyste ponowne nawiązywanie połączenia po ręcznym przełączeniu awaryjnym.

Wymaganie

Aby replika pomocnicza przekierowywała żądania połączenia odczytu/zapisu:

  • Replika zastępcza musi być dostępna online.
  • Specyfikacja PRIMARY_ROLE repliki musi zawierać wartość READ_WRITE_ROUTING_URL.
  • Ciąg połączenia musi być ReadWrite albo definiowany ApplicationIntent jako ReadWrite, albo poprzez nieustawienie ApplicationIntent i zezwolenie na zastosowanie wartości domyślnej (ReadWrite).

Ustaw opcję READ_WRITE_ROUTING_URL

Aby skonfigurować przekierowanie połączenia odczytu/zapisu, ustaw READ_WRITE_ROUTING_URL dla repliki podstawowej, tworząc Grupę dostępności.

W programie SQL Server 2019 (15.x) READ_WRITE_ROUTING_URL dodano do specyfikacji <add_replica_option> . Sprawdź następujące tematy:

PRIMARY_ROLE (READ_WRITE_ROUTING_URL) nie ustawiono (ustawienie domyślne)

Domyślnie przekierowanie połączenia repliki do odczytu/zapisu nie jest ustawione dla repliki. Sposób, w jaki replika pomocnicza obsługuje żądania połączeń, zależy od tego, czy jest ustawiona na zezwalanie połączenia, oraz ustawienia ApplicationIntent w parametrach połączenia. W poniższej tabeli pokazano, jak replika pomocnicza obsługuje połączenia na podstawie SECONDARY_ROLE (ALLOW CONNECTIONS = ) i ApplicationIntent.

ApplicationIntent wartość SECONDARY_ROLE (ALLOW CONNECTIONS = NO) SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) SECONDARY_ROLE (ALLOW CONNECTIONS = ALL)
ApplicationIntent=ReadWrite
Wartość domyślna
Połączenia kończą się niepowodzeniem Połączenia kończą się niepowodzeniem Połączenia kończą się powodzeniem
Operacje odczytu są udane
Zapisy kończą się niepowodzeniem
ApplicationIntent=ReadOnly Połączenia kończą się niepowodzeniem Połączenia kończą się powodzeniem Połączenia kończą się powodzeniem

W poprzedniej tabeli przedstawiono zachowanie domyślne, które jest takie samo jak wersje programu SQL Server przed programem SQL Server 2019 (15.x).

zestaw PRIMARY_ROLE(READ_WRITE_ROUTING_URL)

Po ustawieniu przekierowania połączenia odczytu/zapisu sposób, w jaki replika obsługuje żądania połączeń zachowuje się inaczej. Zachowanie połączenia nadal zależy od ustawienia SECONDARY_ROLE (ALLOW CONNECTIONS = ) i ApplicationIntent. W poniższej tabeli pokazano, w jaki sposób replika pomocnicza z ustawionym READ_WRITE_ROUTING obsługuje połączenia na podstawie SECONDARY_ROLE (ALLOW CONNECTIONS = ) i ApplicationIntent.

ApplicationIntent wartość SECONDARY_ROLE (ALLOW CONNECTIONS = NO) SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) SECONDARY_ROLE (ALLOW CONNECTIONS = ALL)
ApplicationIntent=ReadWrite
Wartość domyślna
Połączenia kończą się niepowodzeniem Połączenia kończą się niepowodzeniem Trasy połączeń do głównego celu
ApplicationIntent=ReadOnly Połączenia kończą się niepowodzeniem Połączenia kończą się powodzeniem Połączenia kończą się powodzeniem

Z poprzedniej tabeli wynika, że kiedy READ_WRITE_ROUTING_URL jest ustawione dla repliki podstawowej, replika pomocnicza przekierowuje połączenia do repliki podstawowej, gdy występuje SECONDARY_ROLE (ALLOW CONNECTIONS = ALL), a połączenie określa ReadWrite.

Przywróć domyślne zachowanie routingu

Począwszy od SQL Server 2025 (17.x), można określić NONE jako cel READ_WRITE_ROUTING_URL lub cel READ_ONLY_ROUTING_URL , aby przywrócić określony routing dla repliki dostępności i kierować ruch zgodnie z domyślnymi ustawieniami. Aby dowiedzieć się więcej, zapoznaj się z poleceniem ALTER AVAILABILITY GROUP Transact-SQL.

Przykład

W tym przykładzie grupa dostępności ma trzy repliki:

  • Replika podstawowa na COMPUTER01
  • Synchroniczna replika pomocnicza w COMPUTER02
  • Asynchroniczna replika pomocnicza w COMPUTER03

Na poniższej ilustracji przedstawiono grupę dostępności.

Grupa dostępności z podstawową, pomocniczą i asynchroniczną pomocniczą

Poniższy skrypt Transact-SQL tworzy ten AG. W tym przykładzie każda replika określa wartość READ_WRITE_ROUTING_URL.

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>
    • Domena i domena najwyższego poziomu w pełni kwalifikowanej nazwy domenowej. Na przykład corporation.com.

Zachowania połączeń

Na poniższym diagramie aplikacja kliencka łączy się z COMPUTER02 za pomocą polecenia ApplicationIntent=ReadWrite. Połączenie jest przekierowywane do repliki podstawowej.

Połączenie z komputerem 2 jest ponownie kierowane do repliki podstawowej

Replika pomocnicza przekierowuje wywołania odczytu/zapisu do repliki podstawowej. Połączenie odczytu i zapisu z każdą z replik zostanie przekierowane do repliki podstawowej.

Na poniższym diagramie replika podstawowa została ręcznie przełączona na COMPUTER02. Aplikacja kliencka łączy się z COMPUTER01 za pomocą polecenia ApplicationIntent=ReadWrite. Połączenie jest przekierowywane do repliki podstawowej.

Połączenie przekierowane do nowej repliki podstawowej na komputerze2

Zobacz też

Omówienie grup dostępności Always On (SQL Server)

Informacje o dostępie do połączenia klienta z replikami dostępności (SQL Server)

Nasłuchiwacze Grupy Dostępności, Łączność Klienta i Przełączanie Awaryjne Aplikacji (SQL Server)