Alta Disponibilidad

Actualización Segura en Always On

Hoy vamos a aprovechar que recientemente se ha liberado SQL 2022 – CU13 para hablar de un proceso a simple vista trivial, pero que requiere de planificación, como es la actualización de SQL Server en los nodos de un grupo de disponibilidad Always On. No es la primera vez que comentamos en el blog la importancia de mantener nuestros SQL Server siempre actualizados para evitar vulnerabilidades graves como la que vimos aquí. En este sentido, nuestros Always On (que además suelen contener la información más crítica) son especialmente delicados. Y es que cualquiera puede ejecutar un parche de actualización y darle a siguiente hasta que termine pero, hacerlo bien, sobre todo en infraestructuras complejas como los Always On, requiere un cariño extra.

¿Qué es un Always On?

Si estás perdido en este punto no te preocupes, vamos a empezar por el principio, los grupos de disponibilidad Always On son una solución de alta disponibilidad que incorpora SQL Server en la que, por medio de un clúster de Windows (WSFC) varios servidores o nodos replican la información de nuestras bases de datos de manera síncrona o asíncrona. Esta es una breve pincelada (más bien un resumen a brocha gorda) de esta complejísima solución, si quieres saber más pásate por el artículo que le dedicamos a este tema.

El proceso de actualización

Cualquier proceso de actualización bien planeado debe constar de 3 fases principales, las pruebas previas (conocidas también como pre-checks), la actualización propiamente dicha y las pruebas finales o post-checks. Cuando hablamos de un Always On esto también va a ser así a grandes rasgos pero va a tener particularidades como pasos previos y posteriores específicos para cada uno de los nodos en función de su rol.

Pasos previos globales para la actualización

Antes de empezar a actualizar nuestros SQL Server del Always On, al igual que en cualquier proceso de actualización, deberemos revisar la documentación de la actualización en busca de errores conocidos o incompatibilidades que puedan hacer que abortemos el proceso antes de iniciarlo.

Una vez que sabemos que la actualización es teóricamente viable, vamos a verificar el entorno, en este punto verificaremos la salud de nuestro Always On (y su quórum) y comprobaremos que hay espacio suficiente en los discos para acometer con éxito el proceso de actualización. 

Con todas las comprobaciones finalizadas llega el momento de preparar el entorno, idealmente estaremos en un momento sin ninguna carga de trabajo aunque, en caso de los entornos críticos que requieren de un Always On, esto suele ser inviable. Igualmente nosotros haremos una copia de seguridad de los datos y deshabilitaremos los jobs no críticos para evitar en la medida de lo posible cualquier interferencia en el proceso. En este sentido, también es recomendable deshabilitar el balanceo automático durante todo el proceso.

Actualización paso a paso

Llega el momento de empezar a actualizar, empezaremos siempre por las réplicas secundarias externas de nuestro Always On (en caso de tenerlas) o por las que tengan replicación asíncrona. Estas réplicas tienen la ventaja de no estar sincronizadas en tiempo real con la réplica principal por lo que si algo sale mal el impacto será menor. Empezaremos validando nuevamente el estado de la sincronización (idealmente verificaremos el failover) y deteniendo la replicación de datos para las bases de datos de la réplica a actualizar. Con la replicación detenida aplicaremos el parche de actualización.Una vez aplicado el parche podremos reanudar la sincronización y verificar que todo ha salido bien. Repetiremos estos pasos por todas las réplicas secundarias. Comprobaremos que todas las réplicas tienen los datos actualizados y están sincronizando al finalizar el proceso.

Con todas las réplicas secundarias actualizadas y verificado que no ha habido ningún problema llega el momento más crítico: actualizar el nodo primario. Empezaremos verificando la replicación para garantizar que no haya pérdida de datos y realizando un failover (balanceo) del rol a otro nodo. En este momento el rol principal ya será uno de los actualizados por lo que podremos proceder en este como en los anteriores. Detendremos la replicación, aplicaremos el parche, reanudaremos la sincronización y verificaremos que todo está correcto. En caso de que sea necesario realizaremos otro failover para devolver el rol al nodo principal inicial.

Pasos posteriores a la actualización

Una vez que ya tenemos todos los nodos actualizados es el momento de las comprobaciones finales. Comprobaremos la versión de SQL y que todos los nodos están sincronizando. MUY IMPORTANTE, volveremos a habilitar los jobs que hayamos deshabilitado al inicio y el balanceo automático . Con esto ya habría finalizado el proceso, recuerda que debes prestar especial atención a que las aplicaciones vuelvan a conectar correctamente y al rendimiento global tras la actualización.

¿Por qué detener la sincronización durante la actualización?

Hemos comentado que cuando aplicas un parche a una réplica, ya sea sincrónica o asincrónica, es recomendable parar la replicación de esa réplica durante el proceso de actualización. Os he dicho que antes de aplicar el proceso de actualización de cada nodo debíamos detener la sincronización para habilitarla de nuevo después, justo al terminar ese nodo y antes de empezar con los siguientes. Esto se debe a que la aplicación de un parche puede causar cambios en la base de datos que podrían interrumpir la replicación si ésta sigue activa. Al parar la replicación, te aseguras de que cualquier cambio realizado por el parche no afecte a las otras réplicas hasta que hayas verificado que el parche se ha aplicado correctamente y que la réplica actualizada está funcionando como se espera.

Esto también tiene un punto negativo, cuando detienes la replicación de una base de datos, el nodo principal sigue acumulando los cambios en sus ficheros de log de transacciones por lo que asegúrate de tener suficiente espacio y mantén vigilado en todo momento el crecimiento de los ficheros.

Conclusión

Aplicar un parche de actualización a nuestros servidores siempre es una tarea delicada pero, con una buena planificación y siguiendo los pasos correctos podremos hacerlo sin mayor problema. Recuerda que lo que hemos comentado en este post son una guia de recomendaciones para una actualización perfecta en un entorno ideal, la vida real no siempre es tan idílica y puede que tengamos que prescindir de alguno de los pasos. Sin embargo hay que conocerlos y entender bien el por qué están en esta guía para poder valorar el riesgo de no acometerlos. Y si tienes tus SQL en la nube como bases de datos o instancias administradas de Azure, enhorabuena, te has ahorrado para siempre todos estos pasos.

Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Alta Disponibilidad, SQL Server, 2 comentarios

Recrear logins para Always On

Cuando movemos bases de datos entre entornos o, a la hora de tener un Always On moviendo bases de datos entre distintos servidores SQL Server, es común encontrarse con un problema de usuarios huérfanos ya que los sid de los logins pueden diferir entre los distintos servidores. Para evitar este problema vamos a usar el procedimiento almacenado sp_help_revlogin y así crear los logins con el mismo sid y contraseña.

Ahora ya sabes como recrear tus logins para no tener problemas de usuarios huerfanos en un grupo de alta disponibilidad Always On o cuando mueves bases de datos entre servidores. Recuerda también que tenemos un artículo explicando «como prevenir usuarios huérfanos» en el que explicamos otros métodos para evitar este problema.

Banner-Telegram

Espero que te haya gustado el video, si es así por favor, deja tu me gusta y suscríbete al canal que nos ayuda mucho. Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram al que te puede unir. En este grupo estamos creando una comunidad de usuarios y administradores de SQL Server donde cualquiera pueda preguntar sus dudas y compartir sus casos prácticos para que todos seamos mejores profesionales. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Alta Disponibilidad, Cloud, SQL Server, Videos, 0 comentarios

SQL o Azure ¿Qué solución es mejor para mi?

Si estás pensando desplegar un nuevo servidor, quizá por un proceso de migración, uno de los aspectos clave es elegir qué edición de SQL Server se adapta mejor a tus necesidades. Hoy en día, Microsoft ofrece una gran variedad de soluciones que, si bien están pensadas para satisfacer las necesidades de todas las empresas, puede ser un poco lioso para usuarios o administradores no iniciados en el tema del licenciamiento de SQL Server. Hoy, vamos a explorar las diferencias entre las ediciones de SQL Server 2022 (Express, Standard y Enterprise), las Bases de Datos de Azure y las Instancias Gestionadas de Azure.

Nube o local

Lo primero que tenemos que tener claro es si necesitamos desplegar un servidor en la nube o en local. En ocasiones, por regulación o por necesidades del proyecto ya podemos descartar varias de las opciones y, por tanto, lo tendremos bastante más fácil.
Un servidor local puede ser la elección correcta si tu empresa tiene requisitos de seguridad o cumplimiento muy específicos que requieren un control total sobre los datos. También puede ser beneficioso si ya tienes una infraestructura de sistemas robusta y el personal con experiencia en la gestión de servidores locales. En este caso no lo dudes y amortiza tu infraestructura local, ya habrá tiempo de replantearse la solución. 

Por otro lado, una solución en la nube es ideal si necesitas flexibilidad, escalabilidad y ahorro de coste en el despliegue. Las soluciones en la nube, como Azure, pueden ofrecer, además, alta disponibilidad y copias de seguridad y actualizaciones de seguridad automáticas, liberando de carga de trabajo a los equipos de IT. Esta solución es también recomendable en escenarios descentralizados donde, de otra manera, tendríamos que tener en nuestra infraestructura local (y gestionar) servidores expuestos en internet. Sin embargo, a largo plazo el modelo de pago por uso puede derivar en grandes costes, sobre todo si no tienes personal con la formación adecuada para dimensionar y optimizar tanto la propia infraestructura en la nube como las aplicaciones que hacen uso de ella.

Soluciones locales

Microsoft nos ofrece varios “sabores” de SQL Server 2022, en concreto tenemos a nuestra disposición las ediciones Express, Standard, Enterprise y Development. Cada una de ellas con un coste y unas características. En este artículo nos vamos a centrar solo en las tres primeras pues son las destinadas a entornos de producción, de la edición Development solo comentaré que tiene todas las características de la  edición Enterprise pero de manera gratuita a cambio de no poder usarse en entornos de producción. 

SQL Server 2022 Express

La edición Express es una versión gratuita de SQL Server, diseñada para aplicaciones de pequeña escala. Aunque es gratuita y ofrece toda la robustez del sistema de gestión de bases de datos de Microsoft, tiene muchas limitaciones en términos de tamaño de las bases de datos y capacidades de procesamiento.

Es una solución ideal para pequeñas empresas que están iniciando un proyecto que necesita una base de datos. Sin embargo, pronto se puede quedar corta debido a sus limitaciones de tamaño de máximo 10 Gb por base de datos (incluyendo datos y log de transacciones), 1 Gb de memoria RAM y solo un procesador (físico o virtual) del que además solo se aprovecharán 4 núcleos (físicos o virtuales). A estas limitaciones hay que sumarle que no dispone de agente de SQL Server por lo que no podremos utilizar esas funcionalidades. En cuanto a funcionalidades también encontraremos limitaciones como la imposibilidad de comprimir los backups o de reconstruir índices online.

SQL Server 2022 Standard

La edición Standard es una solución de gestión de datos y BI (Business Intelligence) completa que ofrece más capacidades que la edición Express. Es ideal para las medianas empresas que necesitan características avanzadas, pero no todas las capacidades de alto rendimiento de la edición Enterprise. Por ejemplo, solo dispone de una solución Always On simple para una sola base de datos y con únicamente un nodo secundario. Tampoco nos ofrece por ejemplo la posibilidad de reconstruir índices online. Esto hace que no sea una solución adecuada para entornos críticos donde necesitemos una disponibilidad 24×7. 

SQL Server 2022 Enterprise

La edición Enterprise es la más completa y potente que ofrece Microsoft hasta la fecha. Ofrece todas las capacidades de SQL Server para las empresas que necesitan el más alto nivel de escalabilidad, disponibilidad y seguridad eso sí, a un coste muy elevado (unas 5x veces la licencia Standard). Si optamos por asumir el alto coste por licencia de una edición Enterprise a cambio nos llevaremos ventajas como la posibilidad de usar todas las funciones de Always On, la reconstrucción de índices online, mayores opciones en la replicación o la posibilidad de usar Resource Governor, por ejemplo.

Soluciones en la nube

Desde hace ya más de una década (madre mía cómo pasa el tiempo) Microsoft dispone de Azure, su nube con soluciones SQL Server entre otras. Centrándonos en SQL Server tenemos a nuestra disposición también varias opciones y para todos los gustos, tanto SaaS como IaaS. SaaS hace referencia al software como servicio (Software As A Service) mientras que IaaS es la infraestructura en la nube (Infraestructure As A Service). Esto quiere decir que en las soluciones SaaS solo dispondremos de una base de datos o una instancia de SQL como un servicio en la nube mientras que en las soluciones IaaS dispondremos de un servidor completo en la nube donde instalar cualquier aplicación como hacemos en los servidores locales.

Bases de Datos de Azure SQL

Las Bases de Datos de Azure son soluciones SaaS de bases de datos completamente administradas. Como características principales podemos destacar que nos proporcionan una buena protección de los datos y gran escalabilidad sin la necesidad de administrar la infraestructura subyacente ni la instancia SQL Server. Esto es también su mayor limitación dado que no dispondremos de todas las características propias de una instancia como el Agente de SQL Server. También hay que mencionar que, aunque dispone de características de alta disponibilidad estas no son tan completas como las de las instancias gestionadas. En cuanto a costes son muy variables ya que usan el método de pago por uso y podremos definir un escalado bajo demanda para reducir el presupuesto. Os recomiendo utilizar la calculadora de costes de Azure Database si estáis pensando en implementar esta solución.

Instancias SQL Gestionadas de Azure

Las Instancias Gestionadas de Azure son una opción para cuando necesitemos la flexibilidad y el control total de una instancia de SQL Server, pero con la comodidad de un servicio gestionado. Ofrecen casi el 100% de compatibilidad con SQL Server Enterprise sin renunciar a las ventajas propias de la nube como actualizaciones automáticas. Es reseñable para esta solución el 99,99% de disponibilidad que anuncia Microsoft para cada base de datos individual alojada en una instancia gestionada pero, si eso os parece poco, aún dispone de opciones de alta disponibilidad para acercar esa cifra aún más al 100%. También dispone de su propia calculadora de precios que os recomiendo consultar antes de cualquier implementación.

Otras soluciones SQL Server en la nube

Además de las soluciones propias de Microsoft podemos encontrar las instancias gestionadas de Amazon AWS llamadas RDS. Aunque no es una solución tan completa como la de Microsoft, puede ser una opción a tener en cuenta si vuestra infraestructura cloud está en esta plataforma. 

Para finalizar con este resumen de soluciones en la nube, encontramos la posibilidad de desplegar un servidor IaaS sobre cualquier nube comercial (Azure, AWS, GCP, etc…) e instalar sobre él un SQL Server licenciado de igual manera que con las soluciones locales. De esta manera, tenemos ciertas ventajas de la nube sin renunciar a las características propias de una solución local.

Conclusión

Microsoft ofrece una variedad de soluciones de bases de datos para satisfacer las necesidades de las empresas de todos los tamaños. Desde la edición Express de SQL Server 2022 para las necesidades de pequeñas aplicaciones, hasta las Instancias Gestionadas de Azure para las empresas que buscan la máxima flexibilidad y control, hay una solución para cada situación. Además no son excluyentes y en la mayoría de los casos nos encontraremos con escenarios híbridos que combinan varias de estas soluciones tanto locales como en la nube.

La elección depende de las necesidades específicas de tu empresa y espero que, tras leer este artículo, estés más preparado para tomar la decisión. Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de LinkedIn y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, SQL Server, 1 comentario

Controlando el balanceo de nuestro AlwaysOn

En este artículo vamos a hablar de dos configuraciones importantes para el funcionamiento óptimo de un grupo de disponibilidad AlwaysOn en SQL Server: el session timeout y el health check. Estas configuraciones nos permiten controlar cómo y cuándo se produce un balanceo (failover) automático entre los nodos del grupo, y cómo se determina el estado de salud de cada réplica. Si quieres saber más sobre qué es un AlwaysOn y cómo configurarlo, te recomendamos que leas nuestro artículo sobre ello aquí.

Consideraciones de salud de nuestro AlwaysOn

SQL Server pone a nuestra disposición distintas configuraciones sobre el balanceo de nuestro AlwaysOn. Por un lado podemos definir el tiempo que una transacción puede tardar en replicarse antes de considerar que hay un problema con esa réplica y por otro podremos definir el tiempo que tiene que pasar una réplica en un estado crítico para sacarla del grupo de disponibilidad y balancear o detener la replicación. Además podremos definir varios niveles de criticidad admisibles para considerar este escenario.

¿Qué es el session timeout de AlwaysOn?

El session timeout o tiempo de espera de sesión es el tiempo máximo que una sesión puede estar inactiva antes de que nuestro AlwaysOn determine que esa réplica no está accesible. Esto puede ocurrir cuando hay una interrupción en la comunicación entre el cliente y el servidor, o cuando el servidor está muy ocupado y no puede atender las solicitudes del cliente. Esta propiedad se define por cada réplica y representa el tiempo que puede esperar un ping entre ella misma y el nodo principal del clúster.

El valor por defecto del session timeout para un AlwaysOn es de 10 segundos, pero se puede modificar mediante la propiedad “Connection Timeout” de la cadena de conexión, o mediante la propiedad “SessionTimeout” del grupo de disponibilidad (Availability Group) en PowerShell. El valor mínimo es de 5 segundos, y el máximo es de 65535 segundos. Microsoft no recomienda un tiempo inferior a 10 segundos ya que podríamos sufrir falsos positivos cuando un sistema saturado no devuelva el ping a tiempo. Por otra parte, un tiempo muy alto puede provocarnos errores de inconsistencia de datos ya que aunque la réplica secundaria no esté respondiendo, si estamos dentro de ese umbral definido, SQL no va a actuar como si hubiera un error y va a seguir intentando insertar datos.

¿Qué es el health check de AlwaysOn?

El health check es el proceso por el cual el WSFC comprueba el estado de salud de cada réplica del grupo de disponibilidad. El health check se basa en una serie de criterios que evalúan el rendimiento y la disponibilidad de cada réplica, tales como:

  • El tiempo de respuesta del servidor
  • El tiempo de recuperación de la base de datos
  • El número de errores graves
  • El tamaño del registro de transacciones
  • El tiempo de sincronización entre las réplicas

Cada criterio tiene un umbral asociado que determina si la réplica está en un estado saludable, advertencia o crítico. Si una réplica primaria pasa a un estado crítico, se produce un failover automático a la réplica secundaria con mayor prioridad. Si una réplica secundaria pasa a un estado crítico, se excluye del grupo de disponibilidad hasta que se recupere.

Mecanismo Is-Alive

Por defecto se hará un chequeo de la salud de las réplicas cada 5 segundos. Sin embargo, el health check tiene un timeout de 15 segundos por defecto. Esto es porque durante ese tiempo se realizan 3 comprobaciones y si no se obtiene una respuesta positiva antes de 3 erróneas se considera a esa réplica en estado crítico. Nosotros, podremos modificar el tiempo máximo de timeout mediante la propiedad “HealthCheckTimeout” del grupo de disponibilidad (Availability Group) en PowerShell. El valor mínimo es de 3 segundos, y el máximo es de 9999 segundos. Durante este tiempo se harán varios chequeos de salud de las réplicas y solo se notificará el error si no se recupera antes del tiempo de espera establecido.

Niveles de error admisibles

Como hemos comentado al principio, WSFC contempla hasta 5 niveles de error que podemos configurar siendo uno el más permisivo y 5 el más “paranoico”. En nuestro caso, nuestro AlwaysOn solo considerará una réplica en fallo si cumple con los criterios del nivel establecido o los de los niveles anteriores. 

  1. OnServerDown: El nivel uno de error solo considera una réplica en fallo en caso de caída del sistema operativo. No se comprueba nada más.
  2. OnServerUnresponsive: Este segundo nivel, considera un estado crítico en caso de que no se produzca una respuesta al procedimiento de chequeo de salud sp_server_diagnostics.
  3. OnCriticalServerError: Este tercer nivel es el por defecto cuando creamos un clúster y considera un estado crítico, además de los dos anteriores, si uno de los componentes del servidor está reportando un error. Por ejemplo un error de sector defectuoso en un disco.
  4. OnModerateServerError: Este nivel considera una réplica en estado crítico si uno de los componentes de registro del servidor tiene un error. Por ejemplo varios DUMP de memoria consecutivos.
  5. OnAnyQualifiedFailureConitions: Este es el nivel más paranoico y considera una réplica en estado crítico ante cualquier error de SQL Server como podría ser un deadlock. 

Conclusión

En este artículo hemos visto qué son el session timeout y el health check, y cómo influyen en el comportamiento de un grupo de disponibilidad AlwaysOn en SQL Server. Hemos aprendido cómo modificar estas configuraciones según nuestras necesidades, y cómo afectan al failover automático y a la continuidad del servicio. Esperamos que te haya resultado útil e interesante, y te invitamos a que nos sigas leyendo en nuestro blog www.soydba.es, donde encontrarás más artículos sobre SQL Server y otros temas relacionados con la administración de bases de datos.

Espero que este artículo te haya sido útil. Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de LinkedIn y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Alta Disponibilidad, SQL Server, 0 comentarios

Escalado vertical y horizontal en SQL Server y Azure

¿Qué es el escalado en SQL Server y por qué es importante? En este artículo vamos a explicar los conceptos de escalado vertical y horizontal, las diferencias entre ellos y las ventajas y desventajas de cada uno. También veremos cómo aplicar estas técnicas en SQL Server, tanto en la versión On Premise como en la nube de Azure.

¿Qué es el escalado vertical y horizontal?

El escalado es la capacidad de aumentar o disminuir los recursos de un sistema para adaptarse a las necesidades de rendimiento y disponibilidad. Existen dos tipos de escalado: vertical y horizontal.

– El escalado vertical consiste en incrementar o reducir la potencia de un único servidor, ya sea añadiendo o quitando memoria, CPU, disco o cualquier otro componente. Por ejemplo, si tenemos un servidor con 8 GB de RAM y lo ampliamos a 16 GB, estamos haciendo un escalado vertical.

– El escalado horizontal consiste en agregar o eliminar servidores al sistema, de forma que se distribuya la carga entre ellos. Por ejemplo, si tenemos un servidor con 8 GB de RAM y le añadimos otro igual, estamos haciendo un escalado horizontal.

Ventajas y desventajas del escalado vertical y horizontal

Cada tipo de escalado tiene sus pros y sus contras, que debemos tener en cuenta a la hora de elegir la mejor opción para nuestro sistema.

Escalado vertical

– Ventajas: Es más sencillo de implementar, ya que no requiere cambios en la arquitectura ni en el código de la aplicación. Además, al tener un único servidor, se evitan problemas de sincronización, consistencia y latencia entre los nodos.

– Desventajas: Tiene un límite físico, ya que no podemos aumentar indefinidamente los recursos de un servidor. También implica un mayor coste, ya que los componentes más potentes suelen ser más caros. Además, al tener un único punto de fallo (SPOF), se reduce la disponibilidad del sistema.

Escalado horizontal

– Ventajas: Permite un mayor crecimiento, ya que podemos agregar tantos servidores como necesitemos. También implica un menor coste, ya que podemos aprovechar servidores más económicos y estándar. Además, al tener varios nodos, se aumenta la disponibilidad y la tolerancia a fallos del sistema.

– Desventajas: Es más complejo de implementar, ya que requiere cambios en la arquitectura y en el código de la aplicación. Además, al tener varios servidores, se generan problemas de sincronización, consistencia y latencia entre los nodos.

¿Cómo escalar SQL Server On Premise?

Para escalar SQL Server On Premise tenemos varias opciones, dependiendo del tipo de escalado que queramos realizar.

Escalado vertical On Premise

Para hacer un escalado vertical On Premise debemos modificar el hardware del servidor donde está instalado SQL Server. Esto, en algunos casos, implica detener el servicio, cambiar los componentes y reiniciar el servidor. Estos problemas desaparecen, en gran medida, cuando hablamos de servidores virtuales. Algunas recomendaciones para hacer un buen escalado vertical son:

  • Elegir componentes compatibles con el servidor y con SQL Server. 
  • Prestar atención al licenciamiento, algunas ediciones y modos de licenciamiento de SQL Server tienen limitaciones en cuanto a CPU y RAM y si los superamos deberemos adquirir otra licencia.
  • Ajustar los parámetros de configuración de SQL Server según los nuevos recursos.
  • Realizar pruebas de rendimiento antes y después del cambio para verificar la mejora.

Escalado horizontal On Premise

Para hacer un escalado horizontal On Premise debemos agregar más servidores al sistema y distribuir la carga entre ellos. Esto implica crear una arquitectura distribuida, como un clúster, una réplica o una partición. Algunas recomendaciones para hacer un buen escalado horizontal son:

  • Elegir servidores con características similares al existente.
  • Configurar correctamente la redirección del tráfico entre los nodos.
  • Mantener la sincronización y la consistencia de los datos entre los nodos.

Las réplicas de solo lectura de los grupos de disponibilidad Always On son un ejemplo de este tipo de escalado. Añadiendo una réplica de solo lectura a nuestro grupo de disponibilidad podremos redirigir a ella las operaciones de lectura descargando de trabajo el nodo principal.

¿Cómo escalar SQL Server en Azure?

Para escalar SQL Server en Azure tenemos varias opciones, dependiendo del tipo de servicio que estemos usando.

Escalado vertical en Azure

Para hacer un escalado vertical en Azure debemos modificar el tamaño del servicio donde está alojado SQL Server. Esto implica cambiar el nivel de servicio o el plan de tarifa, lo que puede implicar un cambio de precio. Algunas ventajas de hacer un escalado vertical en Azure son:

  • No requiere detener el servicio ni reiniciar el servidor.
  • Se puede hacer desde el portal de Azure o mediante scripts.
  • Se puede automatizar según las métricas de rendimiento.
  • Valorar el apagado de los servicios cuando no están en uso para un menor coste. Esto es especialmente útil cuando hablamos de entornos de desarrollo y pruebas.

Mención especial en este apartado para las bases de datos de Azure en modo de licenciamiento sin servidor donde podremos adaptar los recursos según la carga de trabajo. Aumentando en horas punta y disminuyendo la cantidad de recursos en momentos de menos carga.

Otra opción muy interesante que se nos plantea en Azure son los grupos de recursos, podremos asignar un extra de recursos a un grupo con varios servicios para que los usen en caso de ser necesario. Esto nos permite no tener que sobredimensionar todos y cada uno de los servicios por separado y reducir costes. Si, por ejemplo, nuestra base de datos transaccional tiene su pico de trabajo por el día y la informacional por la noche podrán compartir un grupo de recursos.

Escalado horizontal en Azure

Para hacer un escalado horizontal en Azure debemos agregar más instancias al servicio donde está alojado SQL Server. Esto implica crear un balanceador de carga o un grupo de escalado, lo que puede implicar un cambio de precio. Además, en Azure podemos aprovechar las bases de datos elásticas, que son un tipo de servicio que permite escalar horizontalmente una base de datos SQL sin tener que gestionar los servidores ni la distribución de los datos. Las bases de datos elásticas se componen de un grupo de bases de datos que comparten recursos y se balancean automáticamente según la demanda. d.

Conclusión

El escalado es una técnica fundamental para optimizar el rendimiento y la disponibilidad de SQL Server, tanto en la versión On Premise como en la nube de Azure. Dependiendo de las necesidades y los recursos disponibles, podemos optar por un escalado vertical o horizontal, cada uno con sus ventajas y desventajas. Tienes que tener en cuenta que estos modos no son excluyentes, nuestra aplicación puede hacer uso de una base de datos de Azure por cliente, escalando horizontalmente con cada nuevo cliente y, a la vez, escalar verticalmente una base de datos cuando el volumen de datos o transacciones de un cliente lo requiera. Lo importante es elegir la opción más adecuada para nuestro sistema y realizar las pruebas necesarias para verificar la mejora.

Espero que este artículo te haya sido útil y que te ayude a optimizar el rendimiento de tus consultas en SQL Server. Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de LinkedIn y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, Rendimiento, SQL Server, 2 comentarios

DRP ¿Cómo sobrevivir a una caída total de las bases de datos?

Hoy nos sumergimos en las profundidades del Plan de Recuperación ante Desastres (DRP) en el mundo de las bases de datos. Los DRP son algo imprescindible para todos los que trabajamos con entornos de producción con cierta criticidad. Puede parecer algo lejano y muy avanzado si estás empezando en este mundo, pero no te preocupes, vamos a intentar aclarar el mar de acrónimos y jerga técnica que rodea este tema. 

¿Qué es un DRP?

Lo primero de todo sería aclarar que el DRP forma parte del BCP (plan de continuidad de negocio). En ocasiones se pueden llegar a confundir pero no son lo mismo. Mientras que un DRP es un plan técnico que se centra en recuperar la infraestructura, el BCP incluye mucha más información como los pasos necesarios para mitigar pérdidas y recuperar toda la organización. 

¿Para qué sirve el DRP?

Vale, ya hemos dicho que el DRP es un plan puramente técnico que recoge de la manera más detallada posible las acciones a realizar ante un incidente. Pero, ¿para qué sirve? Puede parecernos que algunas cosas son demasiado obvias para ponerlas en un documento y que nosotros como buenos DBAs sabemos que hay que hacer en caso de incidente. Sin embargo, tenéis que pensar que en caso de crisis, con la presión que vamos a tener encima, lo mejor es tener todo documentado y seguir un guion. El futuro de nuestra empresa estará en esa intervención y tendremos que estar a la altura.
Los beneficios de tener un DRP previamente pensado y documentado son varios, entre ellos podemos destacar:

  1. Reduce el tiempo de inactividad al máximo lo que se traduce en un mejor servicio para nuestros clientes y proveedores.
  2. Minimiza las pérdidas por inactividad al conseguir un mejor tiempo de respuesta.
  3. Reduce el estrés de la toma de decisiones. En un momento crítico, es de vital importancia que todo el mundo sepa cómo actuar y no pierda los nervios.
  4. Asegura que todo el mundo podrá volver a acceder a su información. 
  5. Nos ayuda a cumplir con la legislación vigente en entornos regulados.

Los 4+1 pasos para el éxito de nuestro DRP

Genial, necesitamos un DRP pero, ¿por dónde empezamos?. No te asustes que no es tan difícil. En tan solo 5 pasos vas a poder tenerlo todo atado ya verás.

1 Definiciones

Todo DRP debe empezar definiendo las necesidades de alcance y los objetivos del propio plan. Podríamos definir tres apartados dentro de este paso, el primero es el alcance es decir, qué servicios queremos tener cubiertos por el plan de recuperación.
Una vez que hemos definido el alcance o perímetro de nuestro DRP el siguiente apartado sería saber de que nos queremos proteger, pregúntate: ¿Qué podría pasar? ¿un apagón? ¿Un incendio? ¿Un ataque de ransomware? ¿O tal vez una ardilla se coma los cables del servidor? (Sí, eso también pasa. ¿Verdad compañeros?). 

Por último, sabiendo que queremos proteger y de que lo siguiente sería definir lo que se conoce como BIA (Business Impact Analysis) o análisis de impacto de negocio. Aquí, tendremos que colaborar con otras áreas de la empresa para conocer el impacto de una crisis en su actividad y la de nuestros clientes.

2 Diseñar las estrategias de recuperación

Ahora que sabemos qué y de qué nos tenemos que proteger llega el momento del cómo. Diseñaremos una estrategia de recuperación para cada uno de los incidentes previamente descritos. Por ejemplo, esta es una lista de los escenarios más comunes y alternativas para su recuperación.

INCIDENTEEstrategia de RECUPERACIÓN
Borrado accidental de datosRestaurar copia de seguridad
Indisponibilidad de una base de datos
  1. Restaurar copia de seguridad
  2. Balanceo a otro nodo del cluster
Indisponibilidad de un servidor
  1. Balanceo a otro nodo del cluster.
  2. Reinstalación + restaurar copias.
Indisponibilidad de un centro de datos (CPD)
  1. Balanceo a otra ubicación geográfica.
  2. Reinstalación en otra ubicación y restaurar copias

3 Procedimentar las estrategias de recuperación

Como hemos dicho, no tenemos que dar nada por sentado y tenemos que detallar todos los pasos por lo que es el momento de explicar paso a paso como realizar todas y cada una de las acciones descritas en el paso anterior. Cuanto más detalle mejor, no olvidéis detallar la ubicación de las copias de seguridad o las direcciones IP y nombre de los servidores de respaldo, por ejemplo.

Podemos partir de la tabla anterior y añadir otra columna con los pasos, como en este ejemplo:

INCIDENTEEstrategia de RECUPERACIÓNProcedimiento de ACTUACIÓN
Borrado accidental de datosRestaurar copia de seguridad
  1. Identificar el problema.
  2. Avisar a todos los usuarios afectados.
  3. Intentar reparar el problema.
  4. Restaurar copia de seguridad de las bases de datos desde \\NuestroNAS\Copias\NuestroServer\NuestraBD
    4.1 Verificar que hay espacio disponible y solucionarlo en caso que sea necesario.
    4.2 Restaurar la base de datos.
  5. Probar que todo funciona.
  6. Avisar a los usuarios de que se ha resuelto la incidencia
  7. Monitorizar el correcto funcionamiento

4 Estimación de tiempos e impacto

Ya hemos visto todo lo que hay que hacer y como, es el momento de documentar cuánto tiempo vamos a tardar en cada uno de los escenarios y cual va a ser el impacto en los sistemas. Esto es lo que técnicamente se conoce como RPO y RTO que son las siglas en inglés de punto de recuperación objetivo y tiempo de recuperación objetivo.

El RPO hace referencia al máximo tiempo de pérdida de datos admisible, por ejemplo si tenemos una copia de seguridad diaria, en caso de fallo del servidor principal podremos tener hasta 24 horas de pérdida de datos.

El RTO es un poco más difícil de calcular, y seguramente tendremos que hacer pruebas para saberlo con exactitud, y hace referencia al tiempo que tardaremos en tener el servicio operativo nuevamente. Si en este punto hemos hecho todo bien, los RPO y RTO de las estrategias de recuperación estarán dentro de los márgenes admisibles que definimos en el paso número 2. 

5 Paso EXTRA: Revisión y pruebas

Aunque con los 4 pasos anteriores teóricamente habríamos completado nuestro DRP es importante que lo pongamos en práctica y que comprobemos que realmente funciona como habíamos pensado. Esto no hay que hacerlo solo una vez y olvidarnos, nuestras bases de datos son sistemas vivos que van cambiando día a día por lo que al menos una vez al año deberíamos hacer el ejercicio de probar el DRP y en caso de que sea necesario modificarlo para que se adapte a la situación actual de los sistemas. Este paso es el más importante y, en ocasiones, habrá entidades reguladoras que nos exijan evidencias de éxito de estos DRP Test.

Conclusión

Los DRP son imprescindibles para cualquier empresa que tenga sistemas en producción. Ya sea porque un regulador lo establece, porque estás tratando de adecuarte a la ISO 27001 o porque has pensado que este tipo de planes son importantes para ti, espero que este post te haya ayudado a resolver las dudas que tenías antes de empezar a leer. Si tienes alguna duda o comentario, no dudes en contactarnos en Twitter o por mail o dejarnos un mensaje en los comentarios de aquí abajo. Y recuerda que también tenemos un grupo de LinkedIn al que te puedes unir.

Publicado por Roberto Carrancio en Alta Disponibilidad, SQL Server, 1 comentario

Combinando soluciones de Alta Disponibilidad (HA Parte 7)

Bienvenidos a otra entrada mas de esta serie sobre Alta Disponibilidad en SQL Server, ya la última. Durante estos últimos días hemos podido ver una a una las soluciones que nos propone SQL Server para garantizar la continuidad de nuestro servicio y replicar los datos en segundas ubicaciones. Cada una de las soluciones que hemos visto tenía sus ventajas y sus inconvenientes y en ocasiones vamos a necesitar combinar varias de estas soluciones para cubrir los requisitos de nuestros clientes. 

Esto es justo en lo que nos vamos a centrar hoy, combinaciones de soluciones de alta disponibilidad para, en la medida de lo posible, limitar los inconvenientes que nos podamos encontrar y garantizar la mayor disponibilidad posible.

Always On distribuidos

Como empezamos esta serie hablando de los Always On, hoy también vamos a empezar por esta solución. No es en sí una combinación de distintas soluciones de alta disponibilidad sino más bien una misma solución anidada como vamos a ver.

Gracias a los Always On distribuidos vamos a poder tener dos o más grupos de disponibilidad (AG) replicados entre sí, de forma que cada AG actúa como una réplica secundaria del otro. Podemos usar Always On distribuidos para escenarios de recuperación ante desastres, ya que podemos tener los AG en diferentes centros de datos o regiones geográficas.

Combinaciones con Instancias de conmutación por error

Cuando hablamos de las FCI vimos que era una solución que nos garantiza alta disponibilidad con un único punto de conexión (el nombre del servidor SQL no varía aunque balancee el servicio). Sin embargo, uno de sus grandes inconvenientes es que no nos permite acceso de solo lectura a las réplicas. También, tiene un gran SPO en el almacenamiento compartido lo que puede hacer que no encaje en todos los escenarios. Para solucionar estos inconvenientes podemos optar por combinar esta solución de alta disponibilidad con otras.

FCI + Always On

Esta es quizá una de mis soluciones preferidas de alta disponibilidad ya que nos permite tener un clúster de conmutación por error (FCI) con dos o más nodos que comparten un almacenamiento compartido y nos brindan alta disponibilidad a bajo coste. Este FCI será, a su vez, uno de los nodos de un Always On con otro servidor o FCI. Además es escalable añadiendo al Always On más nodos o FCI en cualquier momento. 

De esta forma, podemos tener alta disponibilidad a nivel de instancia gracias al FCI y a nivel de base de datos gracias al Always On. También  nos beneficiamos de las características de los Always On como el acceso de solo lectura a los datos o la duplicidad de los datos en varias ubicaciones. 

El FCI nos garantiza el failover automático en caso de que uno de los nodos falle, y el AG nos permite tener copias sincrónicas o asíncronas de las bases de datos, con la posibilidad de leer desde las réplicas secundarias. Esta solución es ideal para entornos locales o híbridos, donde tenemos control sobre el almacenamiento compartido.

FCI + Database Mirroring

Es una combinación similar a la anterior, pero en lugar de usar grupos de disponibilidad, usamos el espejo de bases de datos (Mirroring). El Database Mirroring es una característica que nos permite tener una copia sincrónica o asíncrona de una base de datos en otra instancia de SQL Server, con la opción de tener un testigo que facilite el failover automático. Al combinar estas dos soluciones, podemos tener alta disponibilidad tanto a nivel de instancia como a nivel de base de datos, pero con algunas limitaciones respecto a los Always On, como la ausencia de compresión y cifrado de los datos, y la imposibilidad de leer desde la réplica secundaria. Esta solución es adecuada para versiones anteriores a SQL Server 2012, donde los Always On no estaban disponibles.

FCI + Log Shipping

Es otra combinación que nos permite tener FCI con dos o más nodos que comparten un almacenamiento compartido, y enviar los logs de transacciones a una o más instancias secundarias. De esta forma, podemos tener copias casi en tiempo real de las bases de datos, y usarlas para fines de consulta o reporte. El FCI nos garantiza el failover automático en caso de que uno de los nodos falle, y el Log Shipping nos permite restaurar manualmente las bases de datos en caso de que la instancia primaria falle. Esta solución es útil para entornos donde queremos tener copias adicionales de las bases de datos para solo lectura y de paso, tener una copia actualizada de los datos para una recuperación rápida.

Otras soluciones no oficiales

Cuando hablamos de Log Shipping os comenté que, aunque no es una solución oficial, se puede combinar con Always On. Es un procedimiento que requiere modificar manualmente los jobs del Log Shipping y recrearlos en el nodo secundario con un paso extra para validar si es o no servidor primario antes de ejecutarse. Al igual que las soluciones anteriores, nos permite expandir las posibilidades de estas soluciones de alta disponibilidad. En concreto podríamos usar esta solución para tener copias de solo lectura de nuestras bases de datos en un servidor fuera del cluster de Always On sin tener que pagar el extra de licenciamiento para hacer accesible el nodo secundario del AG. En este caso el Always On nos daría la capacidad de balanceo automático mientras que el Log Shipping nos dará copias casi en tiempo real de las bases de datos para usarlas para fines de consulta o reporte.

Es importante, no usar este tipo de soluciones en entornos de producción o críticos ya que, como hemos comentado, es una solución no soportada por Microsoft por lo que no tendremos soporte en caso de incidente.

Conclusión

Como hemos podido ver, existen variedad de soluciones de alta disponibilidad en SQL Server, y cada una tiene sus ventajas e inconvenientes. Además podemos combinarlas entre ellas para agregar funcionalidades extra o suplir alguno de sus inconvenientes. Lo importante es analizar las necesidades y los requisitos de nuestro sistema, y elegir la solución que mejor se adapte a nuestro caso. 

Espero que esta serie os haya resultado útil e interesante. Ya sabéis que podéis dejarme aquí abajo vuestras dudas o comentarios y que también tenemos a vuestra disposición nuestro Twitter o mi mail.¡Hasta la próxima!

Publicado por Roberto Carrancio en Alta Disponibilidad, SQL Server, 0 comentarios