Les groupes de disponibilité peuvent-ils fournir un basculement transparent (sans échec de requête)?

9

J'ai testé la fonctionnalité Groupes de disponibilité dans SQL Server 2012 et je constate qu'il y a environ 15 secondes de temps d'arrêt lorsque le serveur principal bascule sur le serveur secondaire. Toutes les requêtes SQL exécutées pendant cette période échouent jusqu'à la fin de la transition de basculement.

Existe-t-il un moyen de réduire ce délai à 0 seconde et d'empêcher les requêtes d'échouer pendant la transition de basculement?

En d'autres termes, existe-t-il un moyen d'exécuter des requêtes pendant l'échec pour être redirigé vers le serveur principal au lieu d'échouer ... et existe-t-il un moyen d'obtenir de nouvelles connexions db pour se connecter immédiatement au serveur secondaire au lieu de ne pas échouer se connecter pendant la transition de basculement?

J'ai actuellement 2 serveurs configurés dans le groupe de disponibilité.

John
la source
1
Vérifiez cette question (et les réponses): dba.stackexchange.com/questions/25124/…
Max Vernon
Seul Oracle RAC peut le faire.
Richard Brown
Ou Vous devez utiliser linux loadballancer dans les paramètres appropriés devant le serveur sql, comme HAproxy.
kakaz

Réponses:

9

Non, il n'y a aucun moyen de faire un basculement sans interruption avec AlwaysOn (ou dans SQL Server en général, à ma connaissance). Pour ce faire, le serveur SQL auquel vous êtes connecté devrait effectuer un transfert d'état vers un autre nœud à mi-requête, et comme de nombreux basculements sont inattendus, ce n'est pas possible.

Cependant, vous pouvez activer les "secondaires en lecture seule" dans AlwaysOn, puis vos lecteurs n'auraient aucun temps d'arrêt lorsque le serveur principal bascule - car ils se connectent de toute façon à une copie secondaire pour effectuer leurs requêtes SELECT, ils ne le feraient pas même remarquer le basculement. Il y aurait toujours une interruption pour les utilisateurs avec une connexion "Write" ouverte, mais au moins une partie de votre base d'utilisateurs serait ininterrompue.

SqlRyan
la source
Avec les "secondaires en lecture seule" activés, des demandes de lecture se produisent-elles sur le primaire ou sont-elles toujours effectuées sur les secondaires? Et que se passe-t-il si le serveur secondaire a un défaut dans cette situation?
John
La lecture par rapport à un secondaire ne se produit que si vous configurez le client pour qu'il se connecte au secondaire.
Max Vernon
1
Je vois, donc cela nécessite une application cliente plus intelligente.
John
@JohnHughes: Consultez ce document Microsoft (milieu de la page 5): tinyurl.com/9dtvndv et cet article de blog: tinyurl.com/8cyr9za . Vous n'avez pas nécessairement besoin d'une application plus intelligente - lorsque vous activez la fonctionnalité, vous pouvez spécifier que toute application peut se connecter au secondaire lisible, mais toute tentative de transaction DDL / DML échouera. Si vous utilisez le nouveau client natif, vous pouvez spécifier "ReadIntent", ce qui signifie que le nouveau client lira à partir de votre secondaire, tandis que les anciens clients continueront d'effectuer toutes les transactions par rapport à votre principal. Une option mais une lecture est nécessaire.
SqlRyan
SqlRyan est correct, il n'y a aucun moyen de basculer une instance SQL Server à l'aide de AlwaysOn Availability Groups sans que les clients soient déconnectés.
mrdenny