Los nodos perdidos y hide instance



Normalmente los errores de conexión son algo fácil de diagnosticar (no te estoy viendo NTLM), pero el día de hoy pase un par de horas con un bastante peculiar, todos conocemos los clásicos errores de conexión que aparecen en el Managment Studio cuando no podemos conectarnos, algo como:


Aunque el error de hoy apuntaba hacia TCP, pues empezó el diagnostico normal, revisando el log de eventos, los de errores por indicios de que pudiera estar mal.

"Microsoft.LiveServer.DLExpansion.AbWebServiceBackendException: Failed to connect to backend ---> System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)"

Luego de indagar un poco más llegamos a esto:

"[sqsrvres] OnlineThread: Could not connect to server but server is considered up."

Lo que me causaba ruido era el hecho de que los logins parecian estar llevandose acabo en el error log pero no nos dejaba entrar, se empezo a probar con cada conexión (Shared memory, named pipes, tcp) sin mayor exito, intente hace un failover pero el problema persistió en ambos nodos. Pudimos conectarnos al nodo por su ip y puerto, se verifico que el Browser estuviera redireccionando, no hubiera firewall, pero aunque todo funcionaba no lográbamos conectarnos de equipos remotos por el nombre de la instancia o el nombre del cluster. Al cabo de varias horas y ya sin idea de como continuar y usando el plan mas agresivo que era usar el process monitor con netmon para ver que pasaba dimos una ultima revisión y encontramos el culpable "Hide instance".

Esta pequeña configuración nos permite ocultar una instancia cuando no queremos que sea expuesta, recordé haber leido esto hace tiempo para hardening más no sabia que esto hacia que el cluster no la pudiera localizar (aunque tiene sentido). Ahora bien la pregunta como poder solventar este inconveniente, no es tan difícil realmente.

En los nodos crearemos alias para estas instancias con el mismo nombre que tendría y haremos el redireccionamiento, esto claro dentro del SQL Server Configuration Manager.


En mi caso en mi laboratorio son instancias por defecto:

  • En los alias tanto de x64 como de x86 lleno los datos.
  • En todos los nodos apunto a si mismo.
  • Cambiamos la propiedad a "hide instance" a verdadero.
  • Reiniciamos el SQL Browser (opcional).

Una vez hecho esto no tendremos problemas para levantar las instancias mientras ocultamos los nodos (recuerden si es hardening no usar los puertos default).

Más información:

Hide Instance:
https://msdn.microsoft.com/en-us/library/ms179327.aspx
 

Comentarios