Reindirizzamento della connessione in lettura/scrittura dalla replica secondaria alla primaria (Gruppi di disponibilità AlwaysOn)
Si applica a: SQL Server 2019 (15.x)
SQL Server 2019 (15.x) CTP 2.0 introduce il reindirizzamento della connessione in lettura/scrittura dalla replica secondaria alla primaria per i Gruppi di disponibilità Always On. Il reindirizzamento della connessione di lettura/scrittura è disponibile in qualsiasi piattaforma del sistema operativo. Consente di orientare le connessioni dell'applicazione client alla replica primaria, indipendentemente dal server di destinazione specificato nella stringa di connessione.
Ad esempio, la stringa di connessione può avere come destinazione una replica secondaria. A seconda della configurazione della replica del gruppo di disponibilità (AG) e delle impostazioni nella stringa di connessione, è possibile reindirizzare automaticamente la connessione alla replica primaria.
Casi d'uso
Nelle versioni precedenti a SQL Server 2019 (15.x) il listener del gruppo di disponibilità e la risorsa cluster corrispondente reindirizzano il traffico utente alla replica primaria per garantire la riconnessione dopo il failover. SQL Server 2019 (15.x) continua a supportare la funzionalità listener del gruppo di disponibilità e aggiunge il reindirizzamento della connessione di replica per gli scenari che non possono includere un listener. Ad esempio:
- La tecnologia cluster con cui si integrano i gruppi di disponibilità SQL Server non offre una funzionalità di tipo listener
- Una configurazione con più subnet come nel cloud o un IP variabile per più subnet, dove le configurazioni diventano complesse, soggette a errori e con una risoluzione dei problemi impegnativa a causa del numero di componenti attivi
- La scalabilità in lettura o il ripristino di emergenza e il tipo di cluster è
NONE
, perché non è presente un meccanismo diretto che garantisce la riconnessione trasparente in caso di failover manuale
Requisito
Affinché una replica secondaria reindirizzi le richieste di connessione in lettura/scrittura:
- La replica secondaria deve essere online.
- La specifica della replica
PRIMARY_ROLE
deve includereREAD_WRITE_ROUTING_URL
. - La stringa di connessione deve essere
ReadWrite
definendoApplicationIntent
comeReadWrite
o non impostandoApplicationIntent
e consentendo l'uso effettivo dell'impostazione predefinita (ReadWrite
).
Impostare l'opzione READ_WRITE_ROUTING_URL
Per configurare il reindirizzamento della connessione di lettura/scrittura, impostare READ_WRITE_ROUTING_URL
per la replica primaria quando si crea il gruppo di disponibilità.
In SQL Server 2019 (15.x) l'elemento READ_WRITE_ROUTING_URL
è stato aggiunto alla specifica <add_replica_option>
. Vedi gli argomenti seguenti:
PRIMARY_ROLE(READ_WRITE_ROUTING_URL) non impostato (impostazione predefinita)
Per impostazione predefinita il reindirizzamento della connessione di replica di lettura/scrittura non è impostato per una replica. Il modo in cui una replica secondaria gestisce le richieste di connessione dipende dal fatto che la replica secondaria sia impostata o meno per consentire le connessioni e dall'impostazione ApplicationIntent
nella stringa di connessione. La tabella seguente illustra come una replica secondaria gestisce le connessioni in base a SECONDARY_ROLE (ALLOW CONNECTIONS = )
e ApplicationIntent
.
Valore ApplicationIntent |
SECONDARY_ROLE (ALLOW CONNECTIONS = NO) |
SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) |
SECONDARY_ROLE (ALLOW CONNECTIONS = ALL) |
---|---|---|---|
ApplicationIntent=ReadWrite Predefiniti |
Le connessioni hanno esito negativo | Le connessioni hanno esito negativo | Le connessioni hanno esito positivo Le operazioni di lettura hanno esito positivo Le operazioni di scrittura hanno esito negativo |
ApplicationIntent=ReadOnly |
Le connessioni hanno esito negativo | Le connessioni hanno esito positivo | Le connessioni hanno esito positivo |
La tabella precedente illustra il comportamento predefinito, analogo a quello delle versioni di SQL Server precedenti a SQL Server 2019 (15.x).
PRIMARY_ROLE(READ_WRITE_ROUTING_URL) impostato
Dopo l'impostazione del reindirizzamento della connessione di lettura/scrittura, la modalità con cui la replica gestisce le richieste di connessione cambia. Il comportamento delle connessioni dipende comunque dalle impostazioni SECONDARY_ROLE (ALLOW CONNECTIONS = )
e ApplicationIntent
. La tabella seguente illustra come una replica secondaria con READ_WRITE_ROUTING
impostato gestisce le connessioni in base a SECONDARY_ROLE (ALLOW CONNECTIONS = )
e ApplicationIntent
.
Valore ApplicationIntent |
SECONDARY_ROLE (ALLOW CONNECTIONS = NO) |
SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) |
SECONDARY_ROLE (ALLOW CONNECTIONS = ALL) |
---|---|---|---|
ApplicationIntent=ReadWrite Predefiniti |
Le connessioni hanno esito negativo | Le connessioni hanno esito negativo | Le connessioni vengono instradate alla replica primaria |
ApplicationIntent=ReadOnly |
Le connessioni hanno esito negativo | Le connessioni hanno esito positivo | Le connessioni hanno esito positivo |
La tabella precedente evidenzia che quando per la replica primaria è impostato READ_WRITE_ROUTING_URL
, la replica secondaria reindirizza le connessioni alla replica primaria se SECONDARY_ROLE (ALLOW CONNECTIONS = ALL)
e la connessione specifica ReadWrite
.
Esempio
In questo esempio un gruppo di disponibilità ha tre repliche:
- Una replica primaria in COMPUTER01
- Una replica secondaria sincrona in COMPUTER02
- Una replica secondaria asincrona in COMPUTER03
L'immagine seguente rappresenta il gruppo di disponibilità.
Lo script Transact-SQL seguente crea questo gruppo di disponibilità. In questo esempio, ogni replica specifica l'elemento 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>
- Dominio e dominio di primo livello del nome di dominio completo. Ad esempio:
corporation.com
.
- Dominio e dominio di primo livello del nome di dominio completo. Ad esempio:
Comportamenti di connessione
Nel diagramma seguente un'applicazione client si connette a COMPUTER02 con ApplicationIntent=ReadWrite
. La connessione viene reindirizzata alla replica primaria.
La replica secondaria reindirizza le chiamate di lettura/scrittura alla replica primaria. Una connessione di lettura/scrittura a una delle repliche determina il reindirizzamento alla replica primaria.
Nel diagramma seguente la replica primaria è stata sottoposta manualmente a failover su COMPUTER02. Un'applicazione client si connette a COMPUTER01 con ApplicationIntent=ReadWrite
. La connessione viene reindirizzata alla replica primaria.
Vedi anche
Panoramica di Gruppi di disponibilità AlwaysOn (SQL Server)
Informazioni sull'accesso alla connessione client per le repliche di disponibilità (SQL Server)
Listener del gruppo di disponibilità, connettività client e failover dell'applicazione (SQL Server)