Network Load Balancer (NLB) de Alibaba Cloud ofrece un balanceo de carga inteligente para los nodos SSH de DataWorks. Esta función evita los puntos únicos de falla y simplifica la configuración y el mantenimiento de las tareas.
Contexto
En DataWorks, un origen de datos SSH se configura normalmente con la dirección de host de una instancia ECS fija. Si dicho host presenta problemas de salud (por ejemplo, debido a un fallo del sistema o al agotamiento de recursos), los nodos SSH pueden fallar. Para solucionar esto, agregue varias instancias ECS a un server group de una instancia de Network Load Balancer (NLB). NLB utiliza su algoritmo interno para distribuir las solicitudes de tareas entre las instancias ECS disponibles y verifica continuamente su estado de salud. Si una instancia ECS falla, NLB redirige automáticamente las solicitudes a otras instancias saludables. Esto evita que el fallo de una sola instancia interrumpa las tareas y garantiza la alta disponibilidad.
Como se muestra en la figura anterior:
Sin balanceo de carga: Las tareas del nodo SSH de DataWorks solo se ejecutan en la instancia ECS conectada. Si dicha instancia se sobrecarga o falla, las tareas se retrasan o se interrumpen.
Con balanceo de carga: Las tareas del nodo SSH de DataWorks se enrutan automáticamente a una instancia ECS del grupo de servidores según la directiva de NLB. Además, NLB realiza comprobaciones de estado en el grupo de servidores. Si detecta una instancia ECS no saludable, redirige automáticamente las tareas a otras instancias saludables, lo que garantiza la continuidad y la alta disponibilidad.
Esta solución mitiga el agotamiento de recursos y los puntos únicos de falla, mejorando así la fiabilidad de las tareas.
Requisitos previos
-
El usuario RAM que desea utilizar está agregado a su espacio de trabajo.
Si desea usar un usuario RAM para desarrollar tareas, debe agregarlo como miembro a su espacio de trabajo y asignarle el rol Develop o Workspace Administrator. El rol Workspace Administrator otorga más permisos de los necesarios, por lo que debe tener precaución al asignarlo. Para obtener más información sobre cómo agregar un miembro y asignarle roles, consulte Add members to a workspace.
Su espacio de trabajo tiene asociado un resource group serverless. Para obtener más información, consulte los temas del directorio Use serverless resource groups.
Limitaciones
El código en un nodo SSH no puede superar los
128 KB.El resource group de DataWorks, las instancias ECS y la instancia NLB deben estar en la misma VPC y región.
Preparar el entorno
Para habilitar el balanceo de carga y la alta disponibilidad en los nodos SSH, cree como mínimo dos instancias ECS y agregue datos de muestra únicos a cada una para fines de verificación.
Crear instancias ECS
Cree las instancias ECS de la siguiente manera.
-
Adquiera instancias ECS.
Vaya a la página de compra de instancias ECS, seleccione la pestaña Custom Launch y configure los siguientes parámetros para crear las instancias ECS. Para obtener detalles sobre otros parámetros, consulte Create an instance on the Custom Launch tab.
Parámetro
Descripción
Region
Seleccione la región donde reside su espacio de trabajo de DataWorks.
Network and zone
Seleccione la misma Virtual Private Cloud (VPC) y vSwitch que utiliza el resource group serverless.
Security Group
Seleccione el security group vinculado al vSwitch del resource group serverless.
Other parameters
Configure otros parámetros según sus requisitos empresariales.
-
Establezca la cantidad.
En el lado derecho de la página de compra de instancias ECS, busque la opción Quantity e introduzca el número de instancias ECS que necesita. Este tutorial utiliza dos instancias.
Haga clic en Create Order para completar la creación y compra de las instancias ECS.
Preparar datos de muestra
Escriba datos de muestra únicos en cada instancia ECS para poder distinguir los resultados posteriormente.
-
Inicie sesión en las instancias ECS.
Vaya a la consola de ECS, cambie a la región donde residen las instancias ECS y localice las dos instancias que creó.
En la columna Operation de una instancia, haga clic en Remote connection. En el cuadro de diálogo Remote connection, seleccione Sign in now.
En la página Instance Login, configure la información de autenticación y complete el inicio de sesión.
-
Cree los datos de muestra.
-
En la instancia ECS 1, ejecute el siguiente comando:
echo "I am the first server" > /tmp/a.txt -
En la instancia ECS 2, ejecute el siguiente comando:
echo "I am the second server" > /tmp/a.txt
-
Configurar la instancia NLB
Cree una instancia NLB, agregue dos instancias ECS a un grupo de servidores backend y configure un listener para habilitar el balanceo de carga.
Crear una instancia NLB
Cree una instancia NLB como se describe a continuación. Para obtener más información, consulte Prerequisites for creating an NLB instance y Create and manage an NLB instance.
-
Vaya a la página de compra de instancias NLB.
Inicie sesión en la consola de Network Load Balancer. En la barra de navegación superior, seleccione la región. En la página Instances, haga clic en Create NLB para ir a la Cloud Service Buy Page.
ImportanteSeleccione la misma región que su espacio de trabajo de DataWorks. Si selecciona una región incorrecta, tendrá que crear una nueva instancia.
-
Configure y adquiera la instancia NLB.
En la Cloud Service Buy Page, configure los siguientes parámetros para crear una instancia NLB:
Parámetro
Descripción
Network
Network type
Seleccione internal-facing.
VPC
Seleccione la VPC que utiliza su resource group serverless.
Zone
Seleccione la zona donde reside el vSwitch del resource group serverless.
IP version
Seleccione IPv4.
Management settings
Instance name
Introduzca un nombre personalizado para la instancia.
Resource group
Seleccione el resource group predeterminado.
-
Confirme la compra.
Después de configurar todos los parámetros, haga clic en Create. En la página Confirm Order, haga clic en Activate.
Crear un grupo de servidores backend
Una vez que la instancia NLB pase al estado Active, cree un grupo de servidores backend y vincúlelo a la instancia. Para obtener más información, consulte NLB server groups.
-
Vaya a la página de detalles de la instancia.
Inicie sesión en la consola de Network Load Balancer. En la barra de navegación superior, seleccione la región. En la lista de instancias, localice la instancia que creó.
Haga clic en el nombre de la instancia para ir a la página de detalles de la instancia.
-
Cree un grupo de servidores backend.
En la parte superior de la página de detalles de la instancia, haga clic en Create Server Group para ir a la página Create Server Group.
Establezca Server Group Name como
ECS_NLBy luego haga clic en Create.
-
Agregue servidores backend.
En el cuadro de diálogo Server group created successfully, haga clic en Add Backend Server.
En la pestaña Backend Servers, haga clic en Add Backend Server para ir a la página Add Backend Server.
Seleccione las dos instancias ECS que creó.
Haga clic en Next step para ir al paso Ports/Weights.
-
Configure puertos y pesos.
Establezca el Port en
22.Haga clic en OK para completar la configuración.
Espere hasta que los servidores backend se agreguen correctamente.
Configurar un listener
Después de agregar las instancias ECS al grupo de servidores backend, configure un listener para la instancia NLB. Para obtener más información, consulte Add a TCP listener.
-
Vaya a la página de detalles de la instancia.
Inicie sesión en la consola de Network Load Balancer. En la barra de navegación superior, seleccione la región. En la lista de instancias, localice la instancia que creó.
Haga clic en el nombre de la instancia para ir a la página de detalles de la instancia.
-
Configure un listener.
En la parte superior de la página de detalles de la instancia, haga clic en Create Listener para abrir el asistente Configure Server Load Balancer.
Establezca el protocolo del listener en TCP y el puerto del listener en
22.Haga clic en Next step.
-
Seleccione un grupo de servidores.
En el paso Select Server Group, para Server Type, seleccione el grupo de servidores
ECS_NLBque creó en Create a backend server group.Haga clic en Next step.
-
Envíe para revisión.
En el paso Configuration Review, confirme las instancias ECS y el puerto del listener, y luego haga clic en Submit.
Configurar un origen de datos SSH
Agregue la instancia NLB como un origen de datos SSH. Para obtener más información, consulte SSH data sources.
-
Inicie sesión en la consola de DataWorks. En la región objetivo, haga clic en en el panel de navegación izquierdo. Seleccione un espacio de trabajo de la lista desplegable y haga clic en Go to Management Center.
En el panel de navegación izquierdo, haga clic en para ir a la página Data Sources.
En la página Data Sources, haga clic en Add Connection para ir a la página Add Connection.
-
En la página Add Connection, seleccione SSH como tipo de origen de datos para ir a la página Add SSH Data Source. Configure los parámetros en esta página de la siguiente manera.
Parámetro
Descripción
Data source name
Introduzca un nombre personalizado para el origen de datos, por ejemplo,
SSH_DB.Configuration mode
Utilice la opción predeterminada User-created Data Store with Public IP Addresses.
Authentication method
Se recomienda DataWorks SSH Public Key Authentication.
Host address
Inicie sesión en la consola de Network Load Balancer. En la barra de navegación superior, seleccione la región. Localice la instancia y haga clic en su nombre para abrir la página de detalles de la instancia. Copie el Domain Name para usarlo como Host Address.
Host port
El puerto del host para el servidor es
22.Username
El nombre de usuario para el servidor es
root.Public key
Haga clic en Generate Key Pair. La plataforma genera una clave pública basada en el nombre de usuario que configuró.
ImportanteAntes de probar la conexión, agregue la clave pública al archivo
.ssh/authorized_keysen losdoshosts ECS. De lo contrario, la prueba fallará. -
Pruebe la conectividad del resource group.
En la sección Connection Configuration, localice el resource group serverless vinculado a su espacio de trabajo y haga clic en Test Connectivity en la columna Connected state.
Ejecutar la tarea SSH
Cree y desarrolle un nodo SSH, y luego verifique el balanceo de carga revisando los resultados de la tarea.
Crear un nodo SSH
Cree un nodo SSH como se describe a continuación. Para obtener más información, consulte Create an SSH node.
Vaya a la página Workspaces en la consola de DataWorks. En la barra de navegación superior, seleccione la región deseada. Localice el espacio de trabajo deseado y elija en la columna Actions.
En el panel de navegación izquierdo, haga clic en el icono
. Haga clic en el icono
junto a Project Directory y elija para abrir el cuadro de diálogo New Node.En el cuadro de diálogo New Node, introduzca un Name personalizado para el nodo SSH.
Haga clic en Confirm para ir al editor de nodos.
Desarrollar el nodo SSH
En la página del editor de nodos, agregue el siguiente código de muestra y configure el entorno de ejecución.
-
Escriba el código del nodo SSH.
En el editor de código, introduzca el siguiente comando de muestra:
cat /tmp/a.txt -
Configure el entorno de ejecución.
Data Source: En la lista desplegable Select a data source en la parte superior del editor, seleccione el origen de datos
SSH_DB.Resource group configuration: En el panel derecho, haga clic en Run Configuration y establezca el Resource Group en su resource group serverless.
Haga clic en el botón Save en la barra de herramientas para guardar el nodo SSH.
Consultar los resultados de la tarea
Ejecute el nodo SSH varias veces y compare la salida para verificar que el balanceo de carga funciona correctamente.
-
Ejecute la tarea del nodo SSH.
Haga clic en el botón Run en la barra de herramientas. Una vez completada la primera ejecución, vuelva a ejecutar la tarea.
-
Consulte los resultados de la tarea.
NotaLa salida puede variar entre ejecuciones porque la tarea se enruta a una instancia ECS diferente cada vez.
Resultado de ejecución 1.
2025-04-11 16:53:05 INFO ============================================= 2025-04-11 16:53:06,657 INFO [SshWrapperMain.java:151] - Get PrivateKey Content OK 2025-04-11 16:53:06,667 INFO [SshExecutorUtil.java:33] - User: xxx 2025-04-11 16:53:06,668 INFO [SshExecutorUtil.java:34] - Host: xxx 2025-04-11 16:53:06,668 INFO [SshExecutorUtil.java:35] - Port: 22 2025-04-11 16:53:07,876 INFO [SshExecutorUtil.java:55] - session connect success 2025-04-11 16:53:07,877 INFO [SshExecutorUtil.java:56] - code: cat /tmp/a.txt 2025-04-11 16:53:07,894 INFO [SshExecutorUtil.java:66] - channel connect success I am the first server 2025-04-11 16:53:09 INFO ============================================= 2025-04-11 16:53:09 INFO Exit code of the Shell command 0 2025-04-11 16:53:09 INFO --- Invocation of Shell command completed --- 2025-04-11 16:53:09 INFO Shell run successfully! 2025-04-11 16:53:09 INFO Current task status: FINISH 2025-04-11 16:53:09 INFO Cost time is: 3.238sResultado de ejecución 2:
Esta salida muestra "I am the second server", lo que indica que la solicitud se enrutó a la segunda instancia ECS. El registro de ejecución es el siguiente:
2025-04-11 16:53:56 INFO ============================================================ 2025-04-11 16:53:57,632 INFO [SshWrapperMain.java:151] - Get PrivateKey Content OK 2025-04-11 16:53:57,645 INFO [SshExecutorUtil.java:33] - User: 2025-04-11 16:53:57,645 INFO [SshExecutorUtil.java:34] - Host: 2025-04-11 16:53:57,645 INFO [SshExecutorUtil.java:35] - Port: 22 2025-04-11 16:53:58,746 INFO [SshExecutorUtil.java:55] - session connect success 2025-04-11 16:53:58,746 INFO [SshExecutorUtil.java:56] - code: cat /tmp/a.txt 2025-04-11 16:53:58,764 INFO [SshExecutorUtil.java:66] - channel connect success I am the second server 2025-04-11 16:53:59 INFO ============================================================ 2025-04-11 16:53:59 INFO Exit code of the Shell command 0 2025-04-11 16:53:59 INFO --- Invocation of Shell command completed --- 2025-04-11 16:53:59 INFO Shell run successfully! 2025-04-11 16:53:59 INFO Current task status: FINISH 2025-04-11 16:53:59 INFO Cost time is: 3.011s
Funcionamiento
DataWorks utiliza NLB para garantizar la ejecución estable de tareas SSH de alta concurrencia de la siguiente manera:
Se agregan varias instancias ECS a un grupo de servidores NLB, y el nombre DNS de la instancia NLB sirve como origen de datos SSH en DataWorks. El listener de NLB intercepta las solicitudes de tareas de los nodos SSH y las distribuye a instancias ECS saludables según su directiva de balanceo de carga. Los resultados de ejecución regresan a través de NLB y aparecen en el registro del nodo SSH.