I gruppi di disponibilità possono fornire failover senza soluzione di continuità (senza errori di query)?


9

Ho testato la funzionalità Gruppi di disponibilità in SQL Server 2012 e sto scoprendo che ci sono circa 15 secondi di inattività quando il server primario esegue il failover sul server secondario. Tutte le query SQL eseguite durante questo periodo non riescono fino al completamento della transizione di failover.

Esiste un modo per ottenere questo fino a 0 secondi e impedire il fallimento delle query durante la transizione di failover?

In altre parole, c'è un modo per far sì che qualsiasi query in esecuzione durante l'errore non venga reindirizzata al server primario invece di fallire ... e c'è un modo per ottenere nuove connessioni db per connettersi immediatamente al server secondario invece di non riuscire a connettersi durante la transizione di failover?

Al momento ho 2 server impostati nel gruppo di disponibilità.


1
Controlla questa domanda (e le risposte): dba.stackexchange.com/questions/25124/…
Max Vernon,

Solo Oracle RAC può farlo.
Richard Brown,

Oppure dovresti usare linux loadballancer con le impostazioni corrette di fronte al server sql, come HAproxy.
Kakaz,

Risposte:


9

No, non c'è modo di eseguire il failover zero-downtime con AlwaysOn (o in SQL Server in generale, per quanto ne so). Per fare ciò, l'SQL Server a cui sei connesso dovrebbe effettuare il trasferimento di stato a un altro nodo durante la query e, poiché molti failover sono imprevisti, non è possibile.

Tuttavia, puoi abilitare i "secondari di sola lettura" in AlwaysOn e quindi i tuoi lettori avrebbero tempi di inattività pari a zero in caso di errore del server primario, poiché si connettono comunque a una copia secondaria per eseguire le loro query SELECT, anche notare il failover. Ci sarebbe ancora un'interruzione per gli utenti con una connessione "Scrivi" aperta, ma almeno una parte della tua base utenti sarebbe ininterrotta.


Con "secondari di sola lettura" abilitati, fare eventuali richieste di lettura si verificano sul primario o sono sempre fatte sui secondari? E cosa succede se il server secondario ha un errore in quella situazione?
Giovanni,

La lettura su un secondario si verifica solo se si configura il client per connettersi al secondario.
Max Vernon,

1
Vedo, quindi ciò richiede un'app client più intelligente.
Giovanni,

@JohnHughes: Dai un'occhiata a questo documento Microsoft (metà pagina 5): tinyurl.com/9dtvndv e questo post sul blog: tinyurl.com/8cyr9za . Non è necessariamente necessaria un'app più intelligente: quando si abilita la funzione, è possibile specificare che qualsiasi applicazione può connettersi al secondario leggibile, ma qualsiasi tentativo di eseguire una transazione DDL / DML fallirà. Se stai utilizzando il client nativo più recente, puoi specificare "ReadIntent", il che significa che il client più recente leggerà dal tuo secondario, mentre i client più vecchi continueranno a fare tutte le transazioni con il tuo primario. Un'opzione ma è necessaria una lettura.
SqlRyan,

SqlRyan è corretto, non è possibile eseguire il failover di un'istanza di SQL Server utilizzando i gruppi di disponibilità AlwaysOn senza disconnettere i client.
mrdenny,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.