Supporto del driver JDBC per il ripristino di emergenza a disponibilità elevata

Scaricare il driver JDBC

Questo articolo illustra il supporto di Microsoft JDBC Driver per SQL Server per il ripristino di emergenza e la disponibilità elevata tramite Gruppi di disponibilità Always On. Per altre informazioni sui gruppi di disponibilità Always On, vedere la documentazione online di SQL Server 2012 (11.x).

A partire dalla versione 4.0 di Microsoft JDBC Driver per SQL Server, è possibile specificare il listener del gruppo di disponibilità (disponibilità elevata e ripristino di emergenza) nella proprietà di connessione. Se un'applicazione Microsoft JDBC Driver per SQL Server è connessa a un database Always On che esegue il failover, la connessione originale viene interrotta e l'applicazione deve aprire una nuova connessione per proseguire con l'esecuzione dopo il failover. Le proprietà di connessione seguenti sono state aggiunte in Microsoft JDBC Driver 4.0 per SQL Server:

  • multiSubnetFailover

  • applicationIntent

Specificare multiSubnetFailover=true in caso di connessione al listener di un gruppo di disponibilità o a un'istanza del cluster di failover.

Nota

multiSubnetFailover è false per impostazione predefinita. Usare applicationIntent per dichiarare il tipo di carico di lavoro dell'applicazione. Per altre informazioni, vedere le sezioni seguenti.

A partire dalla versione 6.0 di Microsoft JDBC Driver per SQL Server viene aggiunta una nuova proprietà di connessione transparentNetworkIPResolution (TNIR), per la connessione trasparente ai gruppi di disponibilità Always On o a un server con più indirizzi IP associati. Quando la proprietà transparentNetworkIPResolution è true, il driver tenta di connettersi al primo indirizzo IP disponibile. Se il primo tentativo non riesce, il driver tenta di connettersi a tutti gli indirizzi IP in parallelo fino alla scadenza del timeout, annullando tutti i tentativi di connessione in sospeso quando uno di essi ha esito positivo.

Nota:

  • transparentNetworkIPResolution è true per impostazione predefinita
  • transparentNetworkIPResolution viene ignorata se multiSubnetFailover è true
  • transparentNetworkIPResolution viene ignorata se viene usato il mirroring del database
  • transparentNetworkIPResolution viene ignorata se sono presenti più di 64 indirizzi IP
  • Quando transparentNetworkIPResolution è true, il primo tentativo di connessione usa un valore di timeout di 500 ms. I tentativi di connessione restanti seguono la stessa logica della funzionalità multiSubnetFailover.

Nota

Se si usa Microsoft JDBC Driver 4.2 (o versione precedente) per SQL Server e se multiSubnetFailover è false, Microsoft JDBC Driver per SQL Server cerca di connettersi al primo indirizzo IP. Se Microsoft JDBC Driver per SQL Server non riesce a stabilire una connessione con il primo indirizzo IP, la connessione ha esito negativo. Microsoft JDBC Driver per SQL Server non cercherà di connettersi ad altri indirizzi IP successivi associati al server.

Nota

L'aumento del timeout di connessione e l'implementazione della logica di riesecuzione per le connessioni aumentano le probabilità che un'applicazione si connetta a un gruppo di disponibilità. Inoltre, poiché potrebbe non essere possibile stabilire una connessione a causa del failover di un gruppo di disponibilità, è opportuno implementare la logica di riesecuzione delle connessioni, finché non si ottiene la riconnessione.

Connessione con multiSubnetFailover

Specificare sempre multiSubnetFailover=true in caso di connessione al listener di un gruppo di disponibilità di SQL Server 2012 (11.x) o a un'istanza del cluster di failover di SQL Server 2012 (11.x). multiSubnetFailover consente un failover più rapido per tutti i gruppi di disponibilità e le istanze del cluster di failover in SQL Server 2012 (11.x) e riduce significativamente i tempi di failover per topologie Always On su una o più subnet. Durante un failover su più subnet, verranno tentate connessioni in parallelo da parte del client. Durante un failover della subnet, Microsoft JDBC Driver per SQL Server effettua tentativi ripetuti e frequenti di connessione TCP.

La proprietà di connessione multiSubnetFailover indica che l'applicazione viene distribuita in un gruppo di disponibilità o un'istanza del cluster di failover e che Microsoft JDBC Driver per SQL Server cercherà di connettersi al database nell'istanza di SQL Server primaria eseguendo un tentativo di connessione a tutti gli indirizzi IP. Quando si specifica MultiSubnetFailover=true per una connessione, i ripetuti tentativi di connessione TCP del client vengono eseguiti più rapidamente rispetto agli intervalli di ritrasmissione TCP predefiniti del sistema operativo. Questo comportamento consente una riconnessione più rapida in seguito a un failover di un gruppo di disponibilità Always On o un'istanza del cluster di failover Always On ed è applicabile a istanze del cluster di failover e a gruppi di disponibilità su una o più subnet.

Per altre informazioni sulle parole chiave delle stringhe di connessione in Microsoft JDBC Driver per SQL Server, vedere Impostazione delle proprietà di connessione.

Non è possibile specificare multiSubnetFailover=true durante la connessione a un oggetto diverso da un listener del gruppo di disponibilità o dall'istanza del cluster di failover in quanto ciò può avere un impatto negativo sulle prestazioni.

Se lo strumento di gestione della sicurezza non è installato, Java Virtual Machine memorizza nella cache gli indirizzi IP virtuali (VIP) per un periodo di tempo limitato definito, per impostazione predefinita, dall'implementazione di JDK e dalle proprietà Java networkaddress.cache.ttl e networkaddress.cache.negative.ttl. Se lo strumento di gestione della sicurezza JDK è installato, Java Virtual Machine memorizza nella cache gli indirizzi IP virtuali e per impostazione predefinita non aggiorna la cache. È consigliabile impostare "time-to-live" (networkaddress.cache.ttl) su un giorno per la cache di Java Virtual Machine. Se non si imposta il valore predefinito su un giorno (o un valore simile), il valore precedente non verrà eliminato dalla cache di Java Virtual Machine quando viene aggiunto o aggiornato un indirizzo IP virtuale. Per altre informazioni su networkaddress.cache.ttl e networkaddress.cache.negative.ttl, vedere https://download.oracle.com/javase/6/docs/technotes/guides/net/properties.html.

Utilizzare le linee guida seguenti per connettersi a un server in un gruppo di disponibilità o nell'istanza del cluster di failover:

  • Il driver genera un errore se la proprietà di connessione instanceName viene usata nella stessa stringa di connessione della proprietà di connessione multiSubnetFailover. Questo errore riflette il fatto che SQL Browser non viene usato in un gruppo di disponibilità. Se tuttavia si specifica anche la proprietà di connessione portNumber, la proprietà instanceName viene ignorata dal driver e viene usata la proprietà portNumber.

  • Usare la proprietà di connessione multiSubnetFailover in caso di connessione a una singola subnet o a più subnet, in modo da migliorare le prestazioni.

  • Per eseguire la connessione a un gruppo di disponibilità, specificare il listener del gruppo di disponibilità come server nella stringa di connessione. Ad esempio, jdbc:sqlserver://VNN1.

  • La connessione a un'istanza di SQL Server configurata con più di 64 indirizzi IP determinerà un errore di connessione.

  • Il comportamento di un'applicazione che usa la proprietà di connessione multiSubnetFailover non è influenzato dal tipo di autenticazione, che può essere autenticazione di SQL Server, autenticazione Kerberos o autenticazione di Windows.

  • Aumentare il valore di loginTimeout per adattarlo alla durata del failover e ridurre il numero di nuovi tentativi di connessione dell'applicazione.

Se il routing di sola lettura non è attivo, non è possibile stabilire una connessione a un percorso di replica secondaria in un gruppo di disponibilità nelle situazioni seguenti:

  • Se il percorso di replica secondaria non è configurato per accettare le connessioni.

  • Se un'applicazione usa applicationIntent=ReadWrite (vedere di seguito) e il percorso di replica secondaria è configurato per l'accesso in sola lettura.

Una connessione non riesce se una replica primaria è configurata per rifiutare i carichi di lavoro in sola lettura e la stringa di connessione contiene ApplicationIntent=ReadOnly.

Aggiornamento per l'uso di cluster su più subnet dal mirroring del database

Se si aggiorna un'applicazione Microsoft JDBC Driver per SQL Server che usa il mirroring del database in uno scenario su più subnet, è necessario rimuovere la proprietà di connessione failoverPartner e sostituirla con la proprietà multiSubnetFailover impostata su true, nonché sostituire il nome del server nella stringa di connessione con un listener del gruppo di disponibilità. Se in una stringa di connessione vengono usati failoverPartner e multiSubnetFailover=true il driver genererà un errore. Se tuttavia in una stringa di connessione vengono usati failoverPartner e multiSubnetFailover=false (o ApplicationIntent=ReadWrite), l'applicazione userà il mirroring del database.

Il driver restituirà un errore se il mirroring del database viene usato nel database primario nel gruppo di disponibilità e se multiSubnetFailover=true viene usato nella stringa di connessione a un database primario anziché a un listener del gruppo di disponibilità.

Specificare la finalità dell'applicazione

È possibile specificare la parola chiave ApplicationIntent nella stringa di connessione. I valori assegnabili sono ReadWrite (impostazione predefinita) e ReadOnly.

Quando si imposta il valore ApplicationIntent=ReadOnly, il client richiede un carico di lavoro di lettura durante la connessione. Il server applica l'intento al momento della connessione e durante un'istruzione di database USE.

La parola chiave ApplicationIntent non funziona con i database legacy di sola lettura.

Destinazioni di ReadOnly

Quando una connessione sceglie ReadOnly, la connessione viene assegnata a una delle configurazioni speciali seguenti che potrebbero essere disponibili per il database:

  • Sempre attivo. Un database può consentire o impedire carichi di lavoro di lettura nel database del gruppo di disponibilità di destinazione. Questa scelta viene controllata usando la clausola ALLOW_CONNECTIONS delle istruzioni Transact-SQL PRIMARY_ROLE e SECONDARY_ROLE.

  • Replica geografica

  • Read scale-out (Scalabilità in lettura)

Se nessuna di queste destinazioni speciali è disponibile, viene letto il database normale.

La parola chiave ApplicationIntent è utilizzata per abilitare il routing di sola lettura.

Routing di sola lettura

Il routing di sola lettura è una funzionalità che può garantire la disponibilità di una replica di sola lettura di un database. Per abilitare il routing di sola lettura, si applicano tutte le condizioni seguenti:

  • È necessario connettersi a un listener del gruppo di disponibilità Always On.

  • La parola chiave della stringa di connessione ApplicationIntent deve essere impostata su ReadOnly.

  • L'amministratore del database deve configurare il gruppo di disponibilità in modo da abilitare il routing di sola lettura.

Più connessioni che usano il routing di sola lettura potrebbero non connettersi tutte alla stessa replica di sola lettura. Le modifiche nella sincronizzazione del database o nella configurazione di routing del server possono comportare connessioni client a repliche di sola lettura diverse.

Per assicurare la connessione di tutte le richieste di sola lettura alla stessa replica di sola lettura, non passare un listener del gruppo di disponibilità alla parola chiave della stringa di connessione Server. Specificare invece il nome dell'istanza di sola lettura.

Il routing di sola lettura potrebbe richiedere più tempo rispetto alla connessione alla replica primaria. Ciò dipende dal fatto che il routing di sola lettura si connette prima alla replica primaria e quindi cerca la migliore replica secondaria leggibile disponibile. A causa di questi passaggi aggiuntivi, è consigliabile aumentare il timeout di login ad almeno 30 secondi.

Pool di connessioni

Quando si usa Microsoft JDBC Driver per SQL Server in combinazione con la libreria di un pool di connessioni, è necessario considerare quanto segue:

  • Se è stato configurato il routing di sola lettura e un pool di server di sola lettura su cui si vuole distribuire il carico, il pool di connessioni ridurrà il numero di opportunità per la distribuzione di nuove connessioni tra i server di destinazione.
  • Per evitare un carico più elevato su un singolo server in un pool, scegliere le opzioni per il pool che assicurano una distribuzione uniforme delle connessioni nel pool.
  • Verificare che il pool di connessioni sia configurato con una durata di connessione. Nel caso in cui una replica di sola lettura non sia disponibile quando viene effettuata una connessione di sola lettura, la configurazione deve garantire che la connessione venga chiusa e ristabilita in una replica di sola lettura quando ne diventa nuovamente disponibile una.

Nuovi metodi che supportano multiSubnetFailover e applicationIntent

I metodi seguenti consentono di accedere a livello di codice alle parole chiave della stringa di connessione multiSubnetFailover, applicationIntent e transparentNetworkIPResolution:

Vengono aggiunti anche i metodi getMultiSubnetFailover, setMultiSubnetFailover, getApplicationIntent, setApplicationIntent, getTransparentNetworkIPResolution e setTransparentNetworkIPResolution alle classi SQLServerDataSource, SQLServerConnectionPoolDataSource e SQLServerXADataSource.

Convalida del certificato TLS/SSL

Un gruppo di disponibilità è costituito da più server fisici. In Microsoft JDBC Driver 4.0 per SQL Server stato aggiunto il supporto per il nome alternativo soggetto nei certificati TLS/SSL, in modo che più host possano essere associati allo stesso certificato. Per altre informazioni su TLS, vedere Informazioni sul supporto della crittografia.

Vedi anche

Connessione a SQL Server con il driver JDBC
Impostazione delle proprietà delle connessioni