Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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_ROLErepliki musi zawierać wartośćREAD_WRITE_ROUTING_URL. - Ciąg połączenia musi być
ReadWritealbo definiowanyApplicationIntentjakoReadWrite, albo poprzez nieustawienieApplicationIntenti 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=ReadWriteWartość 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=ReadWriteWartość 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.
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.
- Domena i domena najwyższego poziomu w pełni kwalifikowanej nazwy domenowej. Na przykład
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.
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.
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)