Configurare il routing di sola lettura per un gruppo di disponibilità Always On
Si applica a: SQL Server
Per configurare un gruppo di disponibilità Always On per il supporto del routing di sola lettura in SQL Server, è possibile usare Transact-SQL o PowerShell. Con routing di sola lettura si intende la capacità di SQL Server di instradare le richieste di connessione in sola lettura valide a una replica secondaria leggibile Always On, ovvero una replica configurata per consentire carichi di lavoro di sola lettura quando viene eseguita nel ruolo secondario. Per supportare il routing di sola lettura, il gruppo di disponibilità deve possedere un listener del gruppo di disponibilità. I client in sola lettura devono indirizzare le richieste di connessione al listener e le stringhe di connessione del client devono specificare la finalità dell'applicazione come in sola lettura, ovvero devono essere richieste di connessione con finalità di lettura.
Il routing di sola lettura è disponibile in SQL Server 2016 (13.x) e versioni successive.
Nota
Per informazioni su come configurare una replica secondaria leggibile, vedere Configurare l'accesso in sola lettura in una replica di disponibilità (SQL Server).
Prerequisiti
È necessario che il gruppo di disponibilità disponga di un listener del gruppo di disponibilità. Per altre informazioni, vedere Creare o configurare un listener del gruppo di disponibilità (SQL Server).
È necessario che una o più repliche di disponibilità siano configurate per accettare il routing di sola lettura nel ruolo secondario (cioè devono essere repliche secondarie leggibili). Per altre informazioni, vedere Configurare l'accesso in sola lettura in una replica di disponibilità (SQL Server).
È necessario essere connessi all'istanza del server che ospita la replica primaria corrente.
Se si usa un account di accesso SQL, assicurarsi che l'account sia configurato correttamente. Per altre informazioni, vedere Gestione di account di accesso e processi per i database di un gruppo di disponibilità (SQL Server).
Proprietà della replica da configurare per il supporto del routing di sola lettura
Per ogni replica secondaria leggibile che deve supportare il routing di sola lettura, è necessario specificare un URL di routing di sola lettura. L'URL viene usato solo quando la replica locale viene eseguita nel ruolo secondario. L'URL di routing di sola lettura deve essere specificato per ogni singola replica in base alle esigenze. Ogni URL di routing di sola lettura viene usato per il routing delle richieste di connessione con finalità di lettura a una replica secondaria leggibile specifica. In genere, a ogni replica secondaria leggibile viene assegnato un URL di routing di sola lettura.
Per informazioni sul calcolo dell'URL di routing di sola lettura per una replica di disponibilità, vedere Calcolo di read_only_routing_url per Always On
Per ogni replica di disponibilità che deve supportare il routing di sola lettura quando viene eseguita come replica primaria, è necessario specificare un elenco di routing di sola lettura. L'elenco di routing di sola lettura viene usato solo quando la replica locale viene eseguita nel ruolo primario. L'elenco deve essere specificato per ogni singola replica in base alle esigenze. In genere, ciascun elenco di routing di sola lettura deve contenere tutti gli URL di routing di sola lettura, con l'URL della replica locale alla fine dell'elenco.
Nota
Le richieste di connessione con finalità di lettura vengono instradate alla prima voce leggibile disponibile nell'elenco di routing di sola lettura della replica primaria corrente. Tuttavia è supportato il bilanciamento del carico tra le repliche di sola lettura. Per altre informazioni, vedere Configurare il bilanciamento del carico tra le repliche di sola lettura.
Nota
Per informazioni sui listener del gruppo di disponibilità e altre informazioni sul routing di sola lettura, vedere Listener del gruppo di disponibilità, connettività client e failover dell'applicazione (SQL Server).
Autorizzazioni
Attività | Autorizzazioni |
---|---|
Per configurare le repliche durante la creazione di un gruppo di disponibilità | Sono necessarie l'appartenenza al ruolo predefinito del server sysadmin e l'autorizzazione server CREATE AVAILABILITY GROUP oppure l'autorizzazione ALTER ANY AVAILABILITY GROUP o CONTROL SERVER. |
Per modificare una replica di disponibilità | Sono necessarie l'autorizzazione ALTER AVAILABILITY GROUP nel gruppo di disponibilità, l'autorizzazione CONTROL AVAILABILITY GROUP permission, l'autorizzazione ALTER ANY AVAILABILITY GROUP o l'autorizzazione CONTROL SERVER. |
Utilizzo di Transact-SQL
Configurare un elenco di routing di sola lettura
Usare la procedura seguente per configurare il routing di sola lettura con Transact-SQL. Per un esempio di codice, vedere Esempio (Transact-SQL), più avanti in questa sezione.
Connettersi all'istanza del server che ospita la replica primaria.
Se si specifica una replica per un nuovo gruppo di disponibilità, usare l'istruzione CREATE AVAILABILITY GROUP di Transact-SQL. Se si aggiunge o si modifica una replica per un gruppo di disponibilità esistente, usare l'istruzione ALTER AVAILABILITY GROUP di Transact-SQL.
Per configurare il routing di sola lettura per il ruolo secondario, nella clausola ADD REPLICA o MODIFY REPLICA WITH specificare l'opzione SECONDARY_ROLE, come segue:
SECONDARY_ROLE ( READ_ONLY_ROUTING_URL ='TCP://indirizzo-sistema:porta')
I parametri dell'URL del routing di sola lettura sono i seguenti:
system-address
Stringa, ad esempio un nome di sistema, un nome di dominio completo o un indirizzo IP, che identifica in modo univoco il computer di destinazione.port
Numero di porta usato dal motore di database dell'istanza di SQL Server.Ad esempio:
SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433')
In una clausola MODIFY REPLICA l'argomento ALLOW_CONNECTIONS è facoltativo se la replica è già configurata per consentire connessioni in sola lettura.
Per altre informazioni, vedere Calcolo di Read_only_routing_url per Always On.
Per configurare il routing di sola lettura per il ruolo primario, nella clausola ADD REPLICA o MODIFY REPLICA WITH specificare l'opzione PRIMARY_ROLE, come segue:
PRIMARY_ROLE ( READ_ONLY_ROUTING_LIST =('server' [ ,...n ] ))
dove server identifica un'istanza del server in cui viene ospitata una replica secondaria di sola lettura nel gruppo di disponibilità.
Ad esempio:
PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('Server1','Server2'))
Nota
È necessario impostare l'URL del routing di sola lettura prima di configurare l'elenco di routing di sola lettura.
Configurare il bilanciamento del carico tra le repliche di sola lettura
A partire da SQL Server 2016 (13.x), è possibile configurare il bilanciamento del carico in un set di repliche di sola lettura. In precedenza, il routing di sola lettura indirizzava sempre il traffico alla prima replica disponibile nell'elenco di routing. Per sfruttare i vantaggi di questa funzionalità, usare un livello di parentesi nidificate per racchiudere le istanze del server READ_ONLY_ROUTING_LIST nei comandi CREATE AVAILABILITY GROUP o ALTER AVAILABILITY GROUP .
Ad esempio, l'elenco di routing seguente bilancia il carico della richiesta di connessione con finalità di lettura tra due repliche di sola lettura, Server1
e Server2
. Le parentesi nidificate che racchiudono questi server identificano il set con carico bilanciato. Se nessuna replica è disponibile in tale set, verrà eseguito il tentativo di connettersi in modo sequenziale alle altre repliche, Server3
e Server4
, nell'elenco di routing di sola lettura.
READ_ONLY_ROUTING_LIST = (('Server1','Server2'), 'Server3', 'Server4')
Si noti che ogni voce nell'elenco di routing può essere un set di repliche di sola lettura con carico bilanciato. L'esempio seguente illustra questa operazione.
READ_ONLY_ROUTING_LIST = (('Server1','Server2'), ('Server3', 'Server4', 'Server5'), 'Server6')
È supportato solo un livello di parentesi nidificate.
Esempio (Transact-SQL)
Nell'esempio seguente vengono modificate due repliche di disponibilità di un gruppo di disponibilità esistente, AG1
, per supportare il routing di sola lettura se a una di queste repliche è attualmente assegnato il ruolo primario. Per identificare le istanze del server che ospitano la replica di disponibilità, in questo esempio vengono specificati i nomi delle istanze, COMPUTER01
e 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
Con PowerShell
Configurare un elenco di routing di sola lettura
Usare la procedura seguente per configurare il routing di sola lettura con PowerShell. Per un esempio di codice, vedere Esempio (PowerShell), più avanti in questa sezione.
Impostare il valore predefinito (cd) sull'istanza del server che ospita la replica primaria.
Quando si aggiunge una replica di disponibilità a un gruppo di disponibilità, usare il cmdlet New-SqlAvailabilityReplica . Quando si modifica una replica di disponibilità esistente, usare il cmdlet Set-SqlAvailabilityReplica . I parametri pertinenti sono i seguenti:
Per configurare il routing di sola lettura per il ruolo secondario, specificare il parametro ReadonlyRoutingConnectionUrl"url",
dove url è il nome di dominio completo (FQDN) e la porta di connettività da usare in caso di routing alla replica per le connessioni di sola lettura. Ad esempio:
-ReadonlyRoutingConnectionUrl "TCP://DBSERVER8.manufacturing.Adventure-Works.com:7024"
Per altre informazioni, vedere Calcolo di Read_only_routing_url per Always On.
Per configurare l'accesso alla connessione per il ruolo primario, specificare ReadonlyRoutingList"server" [ ,...n ], dove server identifica un'istanza del server che ospita una replica secondaria di sola lettura nel gruppo di disponibilità. Ad esempio:
-ReadOnlyRoutingList "SecondaryServer","PrimaryServer"
Nota
È necessario impostare l'URL del routing di sola lettura di una replica prima di configurare il relativo elenco di routing di sola lettura.
Nota
Per visualizzare la sintassi di un cmdlet, usare il cmdlet Get-Help nell'ambiente SQL Server PowerShell. Per altre informazioni, vedere Get Help SQL Server PowerShell.
Impostare e usare il provider PowerShell per SQL Server
Esempio (PowerShell)
Nell'esempio seguente vengono configurate la replica primaria e una replica secondaria in un gruppo di disponibilità per il routing di sola lettura. Innanzi tutto, nell'esempio viene assegnato un URL di routing di sola lettura a ciascuna replica. L'elenco di routing di sola lettura viene quindi impostato sulla replica primaria. Le connessioni la cui proprietà "ReadOnly" è impostata nella stringa di connessione verranno reindirizzate alla replica secondaria. Se la replica secondaria non è leggibile (in base all'impostazione ConnectionModeInSecondaryRole ), la connessione verrà nuovamente indirizzata alla replica primaria.
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
Completamento: Dopo la configurazione del routing di sola lettura
Una volta configurate la replica primaria corrente e le repliche secondarie leggibili per supportare il routing di sola lettura in entrambi i ruoli, le repliche secondarie leggibili potranno ricevere richieste di connessione con finalità di lettura dai client che si connettono tramite il listener del gruppo di disponibilità.
Suggerimento
Quando si usa bcp Utility o sqlcmd Utility, è possibile specificare l'accesso in sola lettura a qualsiasi replica secondaria abilitata per l'accesso in sola lettura specificando l'opzione -K ReadOnly .
Requisiti e indicazioni per le stringhe di connessione del client
Per consentire a un'applicazione client di utilizzare il routing di sola lettura, è necessario che la relativa stringa di connessione soddisfi i requisiti seguenti:
Utilizzare il protocollo TCP.
Impostare la proprietà o l'attributo della finalità dell'applicazione su readonly.
Fare riferimento al listener di un gruppo di disponibilità configurato per supportare il routing di sola lettura.
Fare riferimento a un database in tale gruppo di disponibilità.
È inoltre consigliabile che le stringhe di connessione consentano il failover su più subnet, che supporta un thread client parallelo per ogni replica in ogni subnet. In questo modo di riduce al minimo il tempo di riconnessione del client dopo un failover.
La sintassi per una stringa di connessione dipende dal provider SQL Server utilizzato da un'applicazione. Nella stringa di connessione di esempio seguente per il Provider di dati .NET Framework 4.0.2 per SQL Server sono illustrate le parti di una stringa di connessione necessarie e consigliate per il funzionamento del routing di sola lettura.
Server=tcp:MyAgListener,1433;Database=Db1;IntegratedSecurity=SSPI;ApplicationIntent=ReadOnly;MultiSubnetFailover=True
Per altre informazioni sulla finalità dell'applicazione di sola lettura e sul routing di sola lettura, vedere Listener del gruppo di disponibilità, connettività client e failover dell'applicazione (SQL Server).
Se il routing di sola lettura non funziona correttamente
Per informazioni sulla risoluzione dei problemi di una configurazione di routing di sola lettura, vedere Il routing di sola lettura non funziona correttamente.
Passaggi successivi
Per visualizzare le configurazioni del routing di sola lettura
sys.availability_replicas (Transact-SQL) (colonna read_only_routing_url)
Per configurare l'accesso alla connessione client
Creare o configurare un listener del gruppo di disponibilità (SQL Server)
Configurare l'accesso in sola lettura in una replica di disponibilità (SQL Server)
Per utilizzare stringhe di connessione nelle applicazioni
Supporto di SQL Server Native Client per il ripristino di emergenza a disponibilità elevata
Utilizzo delle parole chiave delle stringhe di connessione con SQL Server Native Client
Blog:
SQL Server AlwaysOn Team Blog: blog ufficiale del team di SQL Server AlwaysOn
Pagina relativa ai blog del Servizio Supporto Tecnico Clienti per gli ingegneri di SQL Server
White paper:
Contenuto aggiuntivo