¿Por qué usar scale out?

Lo primero es saber que debemos esperar de Scale Out, cuando se habla de Scale Out estamos hablando de la capacidad de un sistema o proceso para manejar una cantidad creciente de trabajo, y el potencial que tiene, es su capacidad de adaptarse para asumir el crecimiento del sistema o proceso.

¿Cuándo plantearse usar Scale Out?

Paquetes lentos, procesos costosos, cuando aumentamos el número de usuarios, añadimos nuevas funcionalidades, vamos a un sistema global de información en la compañía, dar respuesta a los cambios de las cargas, nuevos y mejores componentes que van saliendo en el mercado.

Este último punto, me da pie a explicar que no todos los Workers tienen que ser “clones” entre sí en cuanto al hardware que los compone. Por ejemplo, podemos tener un Worker con una RAM más elevada que el resto, y podemos decirle desde el Master que ejecute los paquetes que requieren de más memoria, por tanto, los Workers pueden estar especializados según sus características, y las necesidades del ETL.

Esto ya sabéis que, si usamos máquinas de Azure, que es donde se ve mejor el ejemplo, nos estaremos ahorrando dinero, al no tener que poner todas las maquinas con las mismas capacidades, ya que son proporcionales al precio. Pudiendo tener una maquina E8 v3 V2 para trabajos más pesados, y el resto una E4 v3 para trabajos más ligeros.

¿Dónde hacer Scale Out?

Podemos montar Scale Out tanto en máquinas On Premise, como en máquinas en Cloud a partir de SQL Server 2017

¿Qué es escalabilidad Vertical VS Horizontal?

Vertical, es cuando tenemos un problema de rendimiento en el servidor y añadimos más capacidad de Hardware. Por ejemplo, un incremento en memoria RAM.

Horizontal, es cuando aumentamos el número de servidores para poder dividir la carga de trabajo entre el total de servidores, es ilimitado y se puede disminuir el número de servidores cuando no se necesiten todos.

¿Puedo ponerlo en alta disponibilidad?

Si, lo que se hace en estos casos es poner la base de datos SSISDB, que se encuentra en la máquina Master, en un clúster Always-on, para que en caso de fallo en el nodo primario, se pase a las réplicas hasta solventar la incidencia y continuar dando servicio de manera normal.

 

Licenciamiento

Hay que tener en cuenta las siguientes consideraciones. Para la máquina donde se instale el Master, debemos tener un SQL Server Enterprise. En las máquinas donde instalemos los Workers, hemos de comprobar si los componentes de SSIS incluidos en los paquetes son únicamente válidos para versiones Enterprise (para revisar la lista de componentes Enterprise pincha aquí). Si en los Worker tenemos componentes soportados solo en versiones Enterprise, deberemos usar un SQL Server Enterprise, y si, por el contrario, no tenemos ninguno de estos componentes, podemos instalar la versión de SQL Server Estándar.

Diferencias principales entre Master y Workers

Masters

  • Conoce la lista de los Workers activos
  • Recibe las instrucciones del cliente
  • Tiene el estado y resumen de los trabajos
  • Conoce el estado actual del proceso

Por tanto, todas las ejecuciones de los Workers se centralizan en el Master haciendo más fácil su administración

Workers

  • Ejecuta las tareas que el Master le solicita
  • Trabaja sobre tareas especificas
  • Devuelve el resultado de la tarea al Master en un informe

Requisitos para la configuración

  • Abrir puertos 1433 y 8391 en el firewall
  • La cuenta de SSMS debe tener permisos de admin en las maquinas Workers y Master
  • Asegurar que el SQL está configurado y corriendo en modo acceso remoto

Arquitectura

Guía de instalación de Scale Out

Lo primero, es revisar las opciones del instalador de SQL Server que debemos instalar en las máquinas. En los siguientes puntos, ahondaremos en la instalación de cada tipo de máquina, separando las características exclusivas del Master y de los Workers

La instalación del Maestro debe tener seleccionados Database Engine Service, Integration Services y la opción Scale Out Master. En la instalación del/los Workers debe tener Integration Services y la opción Scale Out Worker. Una vez aclarado esto pasamos a detallar las configuraciones para cada uno de ellos.

Instalación del Scale Out Master

Podemos seguir la referencia de instalación de Microsoft Install Scale Out Master

 

Instalación de los Workers

Podemos seguir la referencia de instalación de Microsoft Install Scale Out Worker

 

Puertos del firewall y configuración TCP/IP

En el equipo que contiene Scale Out Master, abra el puerto especificado durante la instalación del Scale Out Master (en este ejemplo de instalación el 8391) y el puerto para SQL Server (1433 por defecto) en el Firewall de Windows.

* Después de abrir los puertos del firewall, deberá reiniciar el servicio de Scale Out Worker.

Debemos habilitar que la Configuración del TCP/IP del servidor Maestro, para que los Workers puedan comunicarse con la instancia SQL del maestro.

Para ello, abrimos la herramienta SQL Server Configuration Manager, seleccionamos la opción “SQL Server Network Configuration”, y a continuación la opción “Protocols from <nombre de la instancia>”. En el panel derecho elegimos la opción “TCP/IP” y en la ventana que se abre, en la pestaña “IP Adresses” Elegimos “TCP Port” donde indicaremos el puerto de SQL Server que vamos a usar, en este caso 1433

Para abrir la herramienta de SQL Server Configuration Manager en 2017, diríjase a la siguiente ruta: C:\Windows\SysWOW64\SQLServerManager14.msc

Para comprobar que la comunicación está correctamente establecida, podemos desde los servidores Workers desde SSMS, logarnos en la instancia del Master, introduciéndolo en Server Name

Iniciar los servicios de Master y Worker

Si no ha configurado el tipo de inicio de los servicios como Automático durante la instalación, inicie los siguientes servicios:

  • SQL Server Integration Services Scale Out Master 14.0 (SSISScaleOutMaster140S
  • SQL Server Integration Services Scale Out Worker 14.0 (SSISScaleOutWorker140)

 

Habilitar el Scale Out Master

A la hora de crear el SSISDB en SQL, se debe seleccionar la opción de «Habilitar este servidor como servicio principal de Scale Out de SSIS» dentro de la opción de Crear catálogo.

También, tenemos que marcar que las ejecuciones en el servidor Master sean de tipo Scale Out

Para ello, abrimos las propiedades del catálogo de SSISDB, y en la sección «General», opción «Server-wide default execution mode» y seleccionar Scale Out

Habilitar el Scale Out Worker

Puede habilitar el Scale Out Worker con Scale Out Manager, que proporciona una interfaz de usuario gráfica, y se explicarán los detalles en el siguiente punto del documento, además también, es posible mediante un procedimiento almacenado.

Para habilitar el Scale Out Worker mediante un procedimiento almacenado, ejecute el procedimiento almacenado [catalog].[enable_worker_agent] con WorkerAgentId como parámetro.

Obtendrá el valor WorkerAgentId de la vista [catalog].[worker_agents] en SSISDB, cuando el Scale Out Worker se haya registrado en el Scale Out Master. El registro tardará varios minutos, una vez iniciados los servicios del Scale Out Master y Scale Out Workers.

Descripción de propiedades de los ficheros de configuración

Configuración del Servicio Master Scale Out

Configure el Servicio principal de escalabilidad horizontal con el archivo <drive>:\Program Files\Microsoft SQL Server\140\DTS\Binn\MasterSettings.config. Deberá reiniciar el servicio después de actualizar el archivo de configuración.

  • PortNumber: Número de puerto de red usado para comunicarse con un Scale Out Worker.
    • Valor predeterminado: 8391
  • SSLCertThumbprint: Huella digital del certificado SSL usado para proteger la comunicación con un Scale Out Worker.
    • Valor predeterminado: Huella digital del certificado SSL especificado durante la instalación del Scale Out Master
  • SQLServerName: Es el nombre de SQL ServerSQL Server que contiene el catálogo SSISDB. Por ejemplo, NombreServidor\NombreInstancia.
    • Valor predeterminado: Es el nombre del servidor de SQL Server que se instala con el Scale Out Master.
  • CleanupCompletedJobsIntervalInMs: Intervalo de limpieza de los trabajos de ejecución terminados en milisegundos.
    • Valor predeterminado: 43200000
  • DealWithExpiredTasksIntervalInMs: Intervalo para tratar con los trabajos de ejecución terminados en milisegundos.
    • Valor predeterminado: 300000
  • MasterHeartbeatIntervalInMs: Intervalo de latido del patrón de escalado horizontal en milisegundos. Esta propiedad especifica el intervalo según el que el Servicio principal de escalabilidad horizontal actualiza su estado de conexión en el catálogo SSISDB.
    • Valor predeterminado: 30000
  • SqlConnectionTimeoutInSecs: Es el tiempo de espera de la conexión de SQL (en segundos) al conectarse a SSISDB.
    • Valor predeterminado: 15

 

Imagen con el contenido del fichero .config de Master

 

Configuración del Servicio Worker Scale Out

Puede configurar el servicio de Scale Out Worker mediante el archivo \<drive\>:\Program Files\Microsoft SQL Server\140\DTS\Binn\WorkerSettings.config. Deberá reiniciar el servicio después de actualizar el archivo de configuración.

  • DisplayName: Nombre para mostrar del Scale Out Worker. No está en uso en SQL ServerSQL Server 2017.
    • Valor predeterminado: Nombre de equipo
  • Description: Descripción del Scale Out Worker. No está en uso en SQL ServerSQL Server 2017.
    • Valor predeterminado: Vacía
  • MasterEndpoint: Punto de conexión para conectarse al Scale Out Master.
    • Valor predeterminado: Punto de conexión establecido durante la instalación del Scale Out Worker
  • MasterHttpsCertThumbprint: Huella digital del certificado SSL de cliente usado para autenticar el Scale Out Master.
    • Valor predeterminado: Huella digital del certificado de cliente especificado durante la instalación del Scale Out Worker.
  • WorkerHttpsCertThumbprint: Huella digital del certificado del patrón de escalado horizontal usado para autenticar el Scale Out Worker.
    • Valor predeterminado: Huella digital de un certificado creado e instalado automáticamente durante la instalación del Scale Out Worker
  • StoreLocation: Ubicación del almacén del certificado del trabajador.
    • Valor predeterminado: LocalMachine
  • StoreName: Nombre del almacén en el que está el certificado de ese Worker.
    • Valor predeterminado: My
  • AgentHeartbeatInterval: Intervalo del latido del Scale Out Worker.
    • Valor predeterminado: 00:01:00
  • TaskHeartbeatInterval: Intervalo del estado de la tarea de generación de informes del Scale Out Worker.
    • Valor predeterminado: 00:00:10
  • TaskRequestMaxCPU: Límite superior de CPU del Scale Out Worker para solicitar tareas.
    • Valor predeterminado: 70.0
  • TaskRequestMinMemory: Límite inferior de memoria en MB del Scale Out Worker para solicitar tareas.
    • Valor predeterminado: 100.0
  • MaxTaskCount: Número máximo de tareas que puede contener el Scale Out Worker.
    • Valor predeterminado: 10
  • LeaseInterval: Intervalo de concesión de una tarea por parte del Scale Out Worker.
    • Valor predeterminado: 00:01:00
  • TasksRootFolder: Carpeta de registros de tareas. Si el valor está vacío, se usará la ruta de acceso de carpeta \<drive\>:\Users\[account]\AppData\Local\SSIS\Cluster\Tasks.[account] es la cuenta que ejecuta el servicio de Scale Out Worker. De forma predeterminada, la cuenta es SSISScaleOutWorker140.
    • Valor predeterminado: Vacía
  • TaskLogLevel: Nivel de registro de tarea del Scale Out Worker. (Verbose 0x01, Information 0x02, Warning 0x04, Error 0x08, Progress 0x10, CriticalError 0x20, Audit 0x40).
    • Valor predeterminado: 126 (Information, Warning, Error, Progress, CriticalError, Audit)
  • TaskLogSegment: Intervalo de tiempo de un archivo de registro de tarea.
    • Valor predeterminado: 00:00:00
  • TaskLogEnabled: Especifica si el registro de tarea está habilitado.
    • Valor predeterminado: true
  • ExecutionLogCacheFolder: Carpeta que se usa para almacenar en caché el registro de ejecución del paquete. Si el valor está vacío, se usará la ruta de acceso de carpeta \<drive\>:\Users\[account]\AppData\Local\SSIS\Cluster\Agent\ELogCache. [account] es la cuenta que ejecuta el servicio de Scale Out Worker. De forma predeterminada, la cuenta es SSISScaleOutWorker140.
    • Valor predeterminado: Vacía
  • ExecutionLogMaxBufferLogCount: Número máximo de registros de ejecución en caché en un búfer en memoria.
    • Valor predeterminado: 10000
  • ExecutionLogMaxInMemoryBufferCount: Número máximo de búferes de registro de ejecución en memoria.
    • Valor predeterminado: 10
  • ExecutionLogRetryCount: Número de reintentos si se produce un error en el registro de ejecución.
    • Valor predeterminado:3
  • ExecutionLogRetryTimeout: Tiempo de expiración de reintentos si se produce un error en el registro de ejecución. i\ExecutionLogRetryCount se omite si se alcanza ExecutionLogRetryTimeout.
    • Valor predeterminado: 7.00:00:00 (7 días)
  • AgentId: de agente del Scale Out Worker.
    • Valor predeterminado: Se genera automáticamente

 

Imagen con el contenido del fichero .config de Worker

 

Administrador de escalabilidad horizontal

Primero de todo, debemos abrir el Scale Out Manager desde SQL Server Management Studio de la máquina donde esté instalado como Master, nos dirigiremos a la carpeta de Integration Services Catalog, lo expandimos y sobre BBDD de SSISDB hacemos clic derecho y seleccionamos Manage Scale Out.

Hay una segunda opción para acceder a la herramienta de administración que es:

Localizar el fichero ManagementTool.exe, en la carpeta %SystemDrive%\Program Files (x86)\Microsoft SQL Server\150\DTS\Binn\Management. Hacer clic con el botón derecho y Ejecutar como Administrador

Se abre la herramienta de administración, y debemos introducir el nombre de la instancia Scale Out Master para conectarnos a ella en la siguiente pantalla. Cuando se abra, escriba el nombre de la instancia de SQL Server del Servicio principal de Scale Out, y conéctese para administrar el entorno.

 

Habilitar la escalabilidad horizontal

Después de conectarse a SQL Server, si la escalabilidad horizontal no está habilitada, puede hacer clic en Habilitar.

Ver estado del Scale Out Master

El estado del Scale Out Master se muestra en la página Dashboard.

Añadir Scale Out Workers

Para añadir un servidor Scale Out Worker al Master, iremos a la página Workers, y pincharemos en el botón add. Aparecerá la siguiente pantalla

Introducimos el nombre o IP de la máquina Worker, y pulsamos el botón Validar. Una vez pulsado, el Administrador de escalabilidad horizontal comprobará si el usuario actual tiene acceso a los almacenes de certificados del Servicio Scale Out Master y a los equipos Scale Out Workers.

Ver estado del Scale Out Worker

El estado del Scale Out Worker se muestra en la página Administrador del trabajo (pestaña Workers). Puede seleccionar cada worker para ver su estado de forma individual.

En la pestaña Dashboard, podemos ver un resumen de estado y número de Workers que tenemos funcionando.

Dentro de la pestaña Workers, podemos tener adjuntos al Master, Workers que no están habilitados, para habilitarlos/deshabilitarlos deberemos dar a la opción Enable/Disable respectivamente.

Eliminar del trabajo de escalabilidad horizontal

Para eliminar un Worker, selecciónelo y haga clic en -, en la parte inferior de la lista del trabajo en cuestión.

Habilitar o deshabilitar un trabajo de escalabilidad horizontal

Para habilitar o deshabilitar un Worker, selecciónelo, y haga clic en Habilitar Worker o Deshabilitar Worker. Si el Worker dispone de conexión, el estado que aparece en el Administrador de escalabilidad horizontal cambiará según corresponda.

Ejecución y monitorización

Para ejecutar paquetes en modo Scale Out tenemos varias posibilidades.

Una de ellas, es con la ejecución a partir de una sentencia SQL con los objetos que nos da la base de datos SSISDB

Declare @execution_id bigint

EXEC [SSISDB].[catalog].[create_execution] @package_name=N’Copy DimCustomers.dtsx’, @execution_id=@execution_id OUTPUT, @folder_name=N’SSIS_ScaleOut_Test’, @project_name=N’SSIS_ScaleOut_Test’, @use32bitruntime=False, @reference_id=1, @useanyworker=False, @runinscaleout=True

Select @execution_id

DECLARE @var0 smallint = 1

EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N’LOGGING_LEVEL’, @parameter_value=@var0

EXEC [SSISDB].[catalog].[add_execution_worker] @execution_id, @workeragent_id=N’aebac19f-c69b-4240-b6ce-3e926090ebe7′

EXEC [SSISDB].[catalog].[start_execution] @execution_id, @retry_count=0

GO

 

Otra será, la que podemos hacer con botón derecho desde SQL Server Management Studio

Otra será con la herramienta dtexec

Ejecución del ssis 64 bits:

Aquí tenemos un ejemplo de cómo será el comando de ejecución para 64-bit

Para ello debemos asegurarnos que la versión de DTExec.exe que vamos a ejecutar se encuentre en la carpeta Program Files

 

“c:\Program Files\Microsoft SQL Server\140\DTS\Binn\DTExec.exe” /ISSERVER «\SSISDB\Aplicaciones\AA\Package.dtsx» /SERVER «.» /Env IDEnvronment

 

 

Ejecución del ssis 32bits:

Aquí tenemos un ejemplo de cómo será el comando de ejecución para 32-bit

Para ello debemos asegurarnos que la versión de DTExec.exe que vamos a ejecutar se encuentre en la carpeta Program Files (x86)

 

“c:\Program Files (x86)\Microsoft SQL Server\140\DTS\Binn\DTExec.exe” /ISSERVER «\SSISDB\Aplicaciones\AA\Package.dtsx» /SERVER «.» /Env IDEnvronment

 

 

Y otra, podrá ser mediante llamadas desde un Job llamando a paquetes de Integration Services, y siempre apuntaremos el catálogo de SSIS a la instancia Master.

A la hora de monitorizar las ejecuciones, la arquitectura nos da la ventaja de que tenemos las peticiones centralizadas en el catálogo de Integration Services de la instancia Master. Por ello, todas las ejecuciones, independientemente del Worker que haya realizado la ejecución, se encuentran juntas.

Como se observa en la imagen siguiente, disponemos de la columna Machine en la que nos indica que Worker ha sido el ejecutor de la tarea.

 

 

Experiencias

  • Hay que tener en cuenta que en un entorno Scale Out las llamadas a los paquetes se hacen en periodos de 10 segundos en el Worker. Es decir, que si lanzamos 10 paquetes en modo Scale Out cada Worker atenderá las peticiones cada 10 segundos, si el paquete tarda más de 10 segundos habrá paralelismo y si tarda menos se ejecutaran cada 10 segundos.

En la siguiente captura vemos ejecuciones cada 10 segundos y un ejemplo de paralelismo de tres paquetes

  • Error a la hora de añadir Worker

Si obtenemos el siguiente mensaje a la hora de incluir un Worker al servicio master en el Scale Out Manager, Deberemos revisar que la instalación de los certificados está correctamente hecha. Si aun así no se consigue, volver a realizar la instalación del Worker y asegurar que se incluye el .cer del master correctamente

Latest posts by Mercedes De Pedro Juan (see all)