Gruppo di disponibilità Always On, reindirizza sempre l'utente alla sola lettura dell'istanza


9

Abbiamo un gruppo di disponibilità Always On con un primario e un secondario abilitato alla lettura. Abbiamo un utente per il team di implementazione che utilizza il database per verificare la correttezza dei dati che intendono inserire nel database.

Gli utenti dispongono solo dei diritti di lettura dal database ma quando si connettono (tramite SSMS) tramite AG Listener si connettono sempre al nodo attivo.

Ho provato a convincerli ad accedere direttamente all'istanza di sola lettura ma sono bloccati nei loro modi e dopo un giorno o due sono di nuovo tutti sul nodo attivo.

Esiste un modo per SQL Server di dire che questo utente sarà sempre con l'intento in sola lettura e li reindirizzerà lì?

NOTA: ho provato a impostare 'ApplicationIntent = ReadOnly' nei parametri di connessione aggiuntivi, ma questo non sembra reindirizzare al nodo secondario e non è la soluzione ideale in quanto si dimenticheranno inevitabilmente di configurarlo per i nuovi avviatori.

SQL Server 2012 Enterprise, gruppo di disponibilità 1 primario, 1 secondario leggibile con commit sincrono.

Non intendo che un utente si connetta a un server collegato o tramite qualsiasi altro server. Gli utenti si collegano direttamente al database tramite SSMS (nessun'altra applicazione) e vorrei che il listener AG (o qualcosa lì intorno) fosse in grado di indirizzare quell'utente a un nodo secondario se disponibile (in quanto ha solo accesso in lettura lì non ha senso accedere a primario) senza che l'utente debba fare nulla, poiché si spostano tra le macchine e dimenticano di aggiungere l'intento dell'applicazione. Inoltre trovo che aggiungendo che ai parametri di connessione aggiuntivi non sempre si indirizza al nodo secondario.


oltre ai commenti seguenti, è necessario specificare il database nell'AG a cui ci si sta connettendo.
cambio

Risposte:


4

Non ho una risposta a tutta la tua domanda (anche se oggi ho dato una risposta a una domanda simile https://dba.stackexchange.com/a/137844/36812 ) ma hai menzionato che l'utilizzo di ApplicationIntent = ReadOnly non funziona propriamente.

Hai impostato URL di routing di sola lettura? Perché non è pronto all'uso e se non lo fai, queste impostazioni e quel flag non funzioneranno. Penso che se riuscissi a farlo, potresti iniziare a rivalutare le tue esigenze.

Istruzioni su MSDN https://msdn.microsoft.com/en-us/library/hh710054.aspx e più facilmente eseguite in PowerShell.

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

1

Ste, quello che vuoi è una soluzione punta e clicca o un'impostazione da qualche parte. Sfortunatamente, nessuno di questi esiste attualmente in forma "standard". Sarebbe davvero bello se Microsoft lo includesse nelle impostazioni di connessione per un server registrato in modo che possa essere salvato, ma purtroppo non lo fanno.

Questo ti lascia con una delle due opzioni:

  • Scrivi qualcosa da te
  • Cambia comportamento utente

Mi sono imbattuto in un download Microsoft per SNAC - SQL Native Access Client, alla ricerca di qualcosa che potesse soddisfare i tuoi requisiti. Ciò consentirebbe di scrivere un po 'di codice per dare agli utenti un pulsante per accedere direttamente al secondario di sola lettura. https://blogs.msdn.microsoft.com/alwaysonpro/2013/08/02/connect-to-sql-server-using-application-intent-read-only/

L'altra possibilità è forzare gli utenti a compilare la finestra di dialogo dei parametri di connessione durante la connessione tramite SSMS. Per forzare questo comportamento, dovrai modificare gli accessi sui server primario e secondario, negando la connessione al primario e consentendo la connessione ai secondari. È possibile utilizzare un processo di SQL Agent per verificare lo stato del server e impostare gli accessi di conseguenza.

Certo, non ho tentato di fare quest'ultimo, ma in teoria dovrebbe funzionare.


-2

Sembra che questa sia ora una funzionalità di SQL Server 2019.

Dal reindirizzamento della connessione di lettura / scrittura della replica secondaria a primaria (gruppi di disponibilità Always On) nella documentazione ufficiale:

Anteprima di SQL Server 2019 CTP 2.0 introduce il reindirizzamento della connessione di lettura / scrittura della replica da secondaria a primaria per i gruppi di disponibilità Always On. Il reindirizzamento della connessione di lettura / scrittura è disponibile su qualsiasi piattaforma del sistema operativo. Consente alle connessioni dell'applicazione client di essere dirette alla replica primaria indipendentemente dal server di destinazione specificato nella stringa delle connessioni.

Ad esempio, la stringa di connessione può essere indirizzata a una replica secondaria. A seconda della configurazione della replica del gruppo di disponibilità (AG) e delle impostazioni nella stringa di connessione, la connessione può essere reindirizzata automaticamente alla replica primaria.


Non sono sicuro di poter vedere come questa nuova funzionalità sia pertinente qui. Lo scenario del PO sembra essere diverso da quello a cui questa funzionalità è destinata. L'OP vuole reindirizzare le connessioni di sola lettura a un nodo secondario (sola lettura), mentre la documentazione per questa nuova funzionalità afferma che è per il reindirizzamento delle connessioni di lettura / scrittura al nodo primario. Potresti per favore approfondire come utilizzare la nuova funzionalità per risolvere il problema in questione?
Andriy M
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.