Udostępnij za pośrednictwem


Konfiguracja routingu tylko do odczytu dla grupy dostępności Always On

Dotyczy:SQL Server

Aby skonfigurować zawsze włączoną grupę dostępności do obsługi routingu tylko do odczytu w programie SQL Server, możesz użyć Transact-SQL lub programu PowerShell. Routing tylko do odczytu odnosi się do możliwości programu SQL Server do kierowania odpowiednich żądań połączeń tylko do odczytu do dostępnej repliki wtórnej do odczytu (czyli repliki skonfigurowanej do zezwalania na obciążenia tylko do odczytu, gdy jest uruchomiona w roli drugorzędnej). Aby obsługiwać routing tylko do odczytu, grupa dostępności musi mieć nasłuchiwacz grupy dostępności. Klienci z prawami tylko do odczytu muszą kierować swoje żądania połączenia do tego nasłuchiwacza, a ciągi połączenia klienta muszą określać intencję aplikacji jako "tylko do odczytu". Oznacza to, że muszą być żądaniami połączenia z intencją odczytu.

Routing tylko do odczytu jest dostępny w programie SQL Server 2016 (13.x) i nowszych wersjach.

Uwaga / Notatka

Aby uzyskać informacje o sposobie konfigurowania repliki pomocniczej z możliwością odczytu, zobacz Konfigurowanie dostępu Read-Only w replice dostępności (SQL Server).

Wymagania wstępne

Jakie właściwości repliki należy skonfigurować do obsługi routingu Read-Only?

  • Dla każdej repliki pomocniczej z możliwością odczytu, która obsługuje routing tylko do odczytu, należy określić adres URL routingu tylko do odczytu. Ten adres URL ma zastosowanie tylko wtedy, gdy replika lokalna jest uruchomiona w ramach roli pomocniczej. Adres URL routingu tylko do odczytu musi być określony dla każdej repliki z osobna, w zależności od potrzeb. Każdy adres URL tylko do odczytu jest używany do kierowania żądań odczytu do określonej czytelnej repliki pomocniczej. Zazwyczaj każda replika pomocnicza z możliwością odczytu ma przypisany adres URL routingu tylko do odczytu.

    Aby uzyskać informacje na temat obliczania adresu URL routingu tylko do odczytu dla repliki dostępności, zobacz Obliczanie read_only_routing_url dla Always On

  • Dla każdej repliki dostępności, którą chcesz wspierać routowaniem tylko do odczytu, gdy jest repliką podstawową, należy określić listę routingu tylko do odczytu. Dana lista routingu tylko do odczytu ma zastosowanie tylko wtedy, gdy replika lokalna jest uruchomiona w ramach roli podstawowej. Ta lista musi być określona dla każdej repliki osobno, w zależności od potrzeb. Zazwyczaj każda lista routingu tylko do odczytu zawiera każdy adres URL routingu tylko do odczytu z adresem URL repliki lokalnej na końcu listy.

    Uwaga / Notatka

    Żądania połączeń intencji odczytu są kierowane do pierwszego dostępnego wpisu na liście routingu repliki podstawowej działającej w trybie tylko do odczytu. Obsługiwane jest jednak równoważenie obciążenia na replikach tylko do odczytu. Aby uzyskać więcej informacji, zobacz Konfigurowanie równoważenia obciążenia między replikami tylko do odczytu.

Uwaga / Notatka

Aby uzyskać informacje o słuchaczach grup dostępności oraz dodatkowe informacje na temat routingu tylko do odczytu, zobacz Słuchacze grup dostępności, Łączność klienta i Przejście awaryjne aplikacji (SQL Server).

Uprawnienia

Zadanie Uprawnienia
Aby skonfigurować repliki podczas tworzenia grupy dostępności Wymaga członkostwa w sysadmin stałej roli serwera oraz jednego z następujących uprawnień: uprawnienie do utworzenia grupy dostępności, uprawnienie do zmiany dowolnej grupy dostępności lub kontrola serwera.
Aby zmodyfikować replikę dostępności Wymaga uprawnienia ALTER AVAILABILITY GROUP w grupie dostępności, uprawnienia KONTROLI GRUPY DOSTĘPNOŚCI, uprawnienia ALTER ANY AVAILABILITY GROUP lub uprawnienia CONTROL SERVER.

Korzystanie z Transact-SQL

Konfigurowanie listy routingu tylko do odczytu

Wykonaj poniższe kroki, aby skonfigurować routing tylko do odczytu przy użyciu języka Transact-SQL. Aby zapoznać się z przykładem kodu, zobacz Przykład (Transact-SQL), w dalszej części tej sekcji.

  1. Połącz się z instancją serwera hostującą replikę podstawową.

  2. Jeśli określasz replikę dla nowej grupy dostępności, użyj instrukcji CREATE AVAILABILITY GROUP Transact-SQL. Jeśli dodasz lub zmodyfikujesz replikę dla istniejącej grupy dostępności, użyj instrukcji ALTER AVAILABILITY GROUP Transact-SQL.

    • Aby skonfigurować routing tylko do odczytu dla roli pomocniczej, w klauzuli ADD REPLICA lub MODIFY REPLICA WITH określ opcję SECONDARY_ROLE w następujący sposób:

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

      Parametry adresu URL routingu tylko do odczytu są następujące:

      adresów systemowych
      To ciąg, taki jak nazwa systemu, w pełni kwalifikowana nazwa domeny lub adres IP, który jednoznacznie identyfikuje system komputera docelowego.

      port
      Jest numerem portu używanym przez silnik bazy danych wystąpienia SQL Server.

      Przykład: SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433')

      W klauzuli MODIFY REPLICA parametr ALLOW_CONNECTIONS jest opcjonalny, jeśli replika jest już skonfigurowana do zezwalania na połączenia w trybie tylko do odczytu.

      Aby uzyskać więcej informacji, zobacz Obliczanie read_only_routing_url dla funkcji Always On.

    • Aby skonfigurować trasowanie tylko do odczytu dla roli podstawowej, w klauzuli ADD REPLICA lub MODIFY REPLICA WITH określ opcję PRIMARY_ROLE w następujący sposób:

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

      gdzie serwer identyfikuje wystąpienie serwera hostujące replikę pomocniczą tylko do odczytu w grupie dostępności.

      Przykład: PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('Server1','Server2'))

      Uwaga / Notatka

      Przed skonfigurowaniem listy routingu tylko do odczytu należy ustawić adres URL routingu tylko do odczytu.

Konfigurowanie równoważenia obciążenia między replikami w trybie tylko do odczytu

Począwszy od programu SQL Server 2016 (13.x), można skonfigurować równoważenie obciążenia w zestawie replik tylko do odczytu. Wcześniej routing w trybie tylko do odczytu zawsze kierował ruch do pierwszej dostępnej repliki na liście routingu. Aby skorzystać z tej funkcji, użyj jednego poziomu zagnieżdżonych nawiasów wokół wystąpień serwera READ_ONLY_ROUTING_LIST w poleceniach CREATE AVAILABILITY GROUP lub ALTER AVAILABILITY GROUP .

Na przykład poniższa lista routingu równoważy żądania połączeń z intencją odczytu pomiędzy dwie repliki tylko do odczytu, Server1 i Server2. Zagnieżdżone nawiasy otaczające te serwery identyfikują zestaw o zrównoważonym obciążeniu. Jeśli żadna replika nie jest dostępna w tym zestawie, spróbuje sekwencyjnie nawiązać połączenie z innymi replikami Server3 i Server4 na liście routingu tylko do odczytu.

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

Należy pamiętać, że każdy wpis na liście routingu może być zestawem replik do odczytu ze zrównoważonym obciążeniem. W poniższym przykładzie pokazano to.

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

Obsługiwany jest tylko jeden poziom zagnieżdżonych nawiasów.

Przykład (Transact-SQL)

Poniższy przykład modyfikuje dwie repliki dostępności w istniejącej grupie dostępności, aby obsługiwać trasowanie tylko do odczytu, AG1, jeśli jedna z tych replik jest obecnie właścicielem roli głównej. Aby zidentyfikować wystąpienia serwera hostujące replikę dostępności, w tym przykładzie podano nazwy wystąpień —COMPUTER01 i 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  
  

Korzystanie z programu PowerShell

Konfigurowanie listy routingu tylko do odczytu

Wykonaj poniższe kroki, aby skonfigurować routing tylko do odczytu przy użyciu programu PowerShell. Aby zapoznać się z przykładem kodu, zobacz Przykład (PowerShell), w dalszej części tej sekcji.

  1. Ustaw wartość domyślną (cd) dla instancji serwera, która hostuje replikę podstawową.

  2. Podczas dodawania repliki dostępności do grupy dostępności, użyj cmdlet New-SqlAvailabilityReplica. Podczas modyfikowania istniejącej repliki dostępności użyj polecenia cmdlet Set-SqlAvailabilityReplica . Odpowiednie parametry są następujące:

    • Aby skonfigurować routing tylko do odczytu dla roli pomocniczej, określ parametr ReadonlyRoutingConnectionUrl"url".

      gdzie adres URL to w pełni kwalifikowana nazwa domeny (FQDN) i port używany podczas routingu do repliki dla połączeń tylko do odczytu. Przykład: -ReadonlyRoutingConnectionUrl "TCP://DBSERVER8.manufacturing.Adventure-Works.com:7024"

      Aby uzyskać więcej informacji, zobacz Obliczanie read_only_routing_url dla funkcji Always On.

    • Aby skonfigurować dostęp do połączenia dla roli podstawowej, określ wartość ReadonlyRoutingList"server" [ ,... n ], gdzie serwer identyfikuje wystąpienie serwera, które hostuje replikę pomocniczą tylko do odczytu w grupie dostępności. Przykład: -ReadOnlyRoutingList "SecondaryServer","PrimaryServer"

      Uwaga / Notatka

      Przed skonfigurowaniem listy routingu tylko do odczytu należy ustawić adres URL routingu tylko do odczytu repliki.

    Uwaga / Notatka

    Aby wyświetlić składnię cmdletu, użyj cmdletu Get-Help w środowisku PowerShell SQL Server. Aby uzyskać więcej informacji, zobacz Get Help SQL Server PowerShell.

Konfigurowanie i używanie dostawcy PowerShell SQL Server

Przykład (PowerShell)

Poniższy przykład konfiguruje replikę podstawową i jedną replikę pomocniczą w grupie dostępności na potrzeby routingu tylko do odczytu. Najpierw przykład przypisuje adres URL routingu tylko do odczytu do każdej repliki. Następnie ustawia listę routingu tylko do odczytu w repliki podstawowej. Połączenia z właściwością "ReadOnly" ustawioną w parametrach połączenia zostaną przekierowane do repliki pomocniczej. Jeśli ta replika pomocnicza nie jest czytelna (zgodnie z ustawieniem ConnectionModeInSecondaryRole ), połączenie zostanie przekierowane z powrotem do repliki podstawowej.

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  

Kontynuacja: Po skonfigurowaniu routingu Read-Only

Gdy bieżąca replika podstawowa i repliki pomocnicze z możliwością odczytu są skonfigurowane do obsługi routingu tylko do odczytu w obu rolach, repliki pomocnicze z możliwością odczytu mogą odbierać żądania połączenia odczytu intencji od klientów łączących się za pośrednictwem odbiornika grupy dostępności.

Wskazówka

W przypadku korzystania z narzędzia bcp lub narzędzia sqlcmd można określić dostęp tylko do odczytu do dowolnej repliki pomocniczej, która jest włączona dla dostępu tylko do odczytu, określając przełącznik -K ReadOnly .

Wymagania i zalecenia dotyczące klienta Connection-Strings

Aby aplikacja kliencka korzystała z routingu tylko do odczytu, jego parametry połączenia muszą spełniać następujące wymagania:

  • Użyj protokołu TCP.

  • Ustaw atrybut/właściwość intencji aplikacji na wartość readonly.

  • Skorzystaj z odbiornika grupy dostępności skonfigurowanej do obsługi routingu tylko do odczytu.

  • Odwołaj się do bazy danych w tej grupie dostępności.

Ponadto zalecamy, aby ciągi połączeń włączały przełączanie awaryjne dla wielu podsieci, co wspiera równoległy wątek klienta dla każdej repliki w każdej podsieci. Minimalizuje to czas ponownego nawiązywania połączenia klienta po przejściu w tryb failover.

Składnia parametrów połączenia zależy od dostawcy programu SQL Server używanej przez aplikację. Poniższe przykładowe parametry połączenia dla dostawcy danych programu .NET Framework 4.0.2 dla programu SQL Server ilustrują części parametrów połączenia, które są wymagane i zalecane do pracy w przypadku routingu tylko do odczytu.

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

Aby uzyskać więcej informacji na temat trybu aplikacji tylko do odczytu i trasowania tylko do odczytu, zobacz Odbiorniki grupy dostępności, łączność klienta i tryb failover aplikacji (SQL Server).

Jeśli routing Read-Only nie działa poprawnie

Aby uzyskać informacje na temat rozwiązywania problemów z konfiguracją routingu tylko do odczytu, zobacz Read-Only Routing nie działa poprawnie.

Przywróć domyślne zachowanie routingu

Począwszy od programu SQL Server 2025 (17.x) (wersja zapoznawcza), można określić NONE jako lokalizację docelową READ_WRITE_ROUTING_URL lub READ_ONLY_ROUTING_URL , aby cofnąć określony routing dla repliki dostępności i kierować ruch na podstawie domyślnego zachowania. Aby dowiedzieć się więcej, zapoznaj się z poleceniem ALTER AVAILABILITY GROUP Transact-SQL.

Dalsze kroki

Aby wyświetlić konfiguracje routingu tylko do odczytu

Aby skonfigurować dostęp do połączenia klienta

Aby używać parametrów połączenia w aplikacjach

Blogi :

Oficjalne dokumenty:

  • Oficjalne opracowania Zespołu Doradczego Klientów SQL Server

Dodatkowa zawartość