O Network Load Balancer (NLB) da Alibaba Cloud oferece balanceamento de carga inteligente para nós SSH do DataWorks, evita pontos únicos de falha e simplifica a configuração de tarefas. Este tópico descreve como implantar e usar essa solução no DataWorks para garantir a execução estável de tarefas SSH.
Contexto
No DataWorks, uma fonte de dados SSH geralmente usa o endereço de host de uma instância ECS fixa. Se esse host apresentar problemas (por exemplo, travar ou ficar sem recursos), os nós SSH podem falhar na execução. Para resolver isso, adicione múltiplas instâncias ECS a um grupo de servidores de uma instância do Network Load Balancer (NLB). O NLB utiliza seu algoritmo interno para distribuir solicitações de tarefas entre as instâncias ECS disponíveis e verifica continuamente a integridade delas. Caso uma instância ECS falhe, o NLB encaminha automaticamente as solicitações para outras instâncias íntegras. Isso impede que a falha de uma única instância interrompa as tarefas e garante alta disponibilidade.
Conforme ilustrado na figura anterior:
Sem balanceamento de carga: As tarefas do nó SSH do DataWorks executam apenas na instância ECS conectada. Se essa instância estiver sobrecarregada ou falhar, as tarefas sofrerão atrasos ou interrupções.
Com balanceamento de carga: O NLB roteia automaticamente as tarefas do nó SSH do DataWorks para uma instância ECS no grupo de servidores, seguindo sua política. Além disso, o NLB verifica a integridade do grupo de servidores. Ao detectar uma instância ECS com problemas, ele redireciona as tarefas para outras instâncias íntegras, assegurando continuidade e alta disponibilidade.
Essa solução evita o esgotamento de recursos e pontos únicos de falha, melhorando a eficiência e a confiabilidade da execução das tarefas.
Pré-requisitos
-
Adicione o usuário RAM ao seu workspace.
Para desenvolver tarefas com um usuário RAM, adicione-o como membro do workspace e atribua a função Develop ou Workspace Administrator. A função Workspace Administrator concede mais permissões do que o necessário; portanto, tenha cautela ao atribuí-la. Para mais detalhes sobre como adicionar membros e atribuir funções, consulte Adicionar membros a um workspace.
Associe um grupo de recursos serverless ao seu workspace. Para mais informações, consulte os tópicos no diretório Usar grupos de recursos serverless.
Limitações
O código em um nó SSH não pode exceder
128 KB.O grupo de recursos do DataWorks, as instâncias ECS e a instância NLB devem estar na mesma VPC e região.
Preparar o ambiente
Para ative o balanceamento de carga e a alta disponibilidade nos nós SSH, crie pelo menos duas instâncias ECS e adicione dados de amostra exclusivos a cada uma para verificação.
Criar instâncias ECS
Siga estas etapas para criar as instâncias ECS necessárias.
-
Adquira instâncias ECS.
Acesse a página de compra de instâncias ECS, selecione a aba Custom Launch e configure os parâmetros abaixo para criar as instâncias ECS. Para detalhes sobre outros parâmetros, consulte Criar uma instância na aba Custom Launch.
Parâmetro
Descrição
Region
Selecione a região onde reside seu workspace do DataWorks.
Network and zone
Escolha a mesma Virtual Private Cloud (VPC) e vSwitch utilizados pelo grupo de recursos serverless.
Security Group
Selecione o grupo de segurança vinculado ao vSwitch do grupo de recursos serverless.
Other parameters
Configure os demais parâmetros conforme suas necessidades de negócio.
-
Defina a quantidade.
No lado direito da página de compra de instâncias ECS, localize a opção Quantity e insira o número de instâncias ECS desejado. Este tutorial utiliza duas instâncias.
Clique em Create Order para concluir a criação e a compra das instâncias ECS.
Preparar dados de amostra
Nas duas instâncias ECS criadas, grave dados de amostra exclusivos em cada uma para distinguir os resultados posteriormente.
-
Faça login nas instâncias ECS.
Acesse o console ECS, mude para a região onde as instâncias ECS residem e localize as duas instâncias criadas.
Na coluna Operation de uma instância, clique em Remote connection. Na caixa de diálogo Remote connection, selecione Sign in now.
Na página Instance Login, configure as informações de autenticação e conclua o login.
-
Crie os dados de amostra.
-
Na Instância ECS 1, execute o seguinte comando:
echo "I am the first server" > /tmp/a.txt -
Na Instância ECS 2, execute o seguinte comando:
echo "I am the second server" > /tmp/a.txt
-
Configurar a instância NLB
Siga estas etapas para criar uma instância NLB, configurar um grupo de servidores backend adicionando duas instâncias ECS e definir um listener para habilitar o balanceamento de carga.
Criar uma instância NLB
Crie uma instância NLB seguindo estas etapas. Para mais informações, consulte Pré-requisitos para criar uma instância NLB e Criar e gerencie uma instância NLB.
-
Acesse a página de compra de instâncias NLB.
Faça login no console do Network Load Balancer. Na barra de navegação superior, selecione a região. Na página Instances, clique em Create NLB para acessar a Cloud Service Buy Page.
ImportanteSelecione a mesma região do seu workspace do DataWorks. Uma seleção incorreta de região exigirá a criação de uma nova instância.
-
Configure e adquira a instância NLB.
Na Cloud Service Buy Page, configure os seguintes parâmetros para criar uma instância NLB:
Parâmetro
Descrição
Network
Network type
Selecione internal-facing.
VPC
Selecione a VPC utilizada pelo seu grupo de recursos serverless.
Zone
Escolha a zona onde reside o vSwitch do grupo de recursos serverless.
IP version
Selecione IPv4.
Management settings
Instance name
Insira um nome personalizado para a instância.
Resource group
Selecione o grupo de recursos padrão.
-
Confirme a compra.
Após configurar todos os parâmetros, clique em Create. Na página Confirm Order, clique em Activate.
Criar um grupo de servidores backend
Depois que a instância NLB entrar no estado Active, siga estas etapas para criar e vincular um grupo de servidores backend à instância NLB. Para mais informações, consulte Grupos de servidores NLB.
-
Acesse a página de detalhes da instância.
Faça login no console do Network Load Balancer. Na barra de navegação superior, selecione a região. Na lista de instâncias, localize a instância criada.
Clique no nome da instância para acessar a página de detalhes.
-
Crie um grupo de servidores backend.
No topo da página de detalhes da instância, clique em Create Server Group para acessar a página Create Server Group.
Defina Server Group Name como
ECS_NLBe clique em Create.
-
Adicione servidores backend.
Na caixa de diálogo Server group created successfully, clique em Add Backend Server.
Na aba Backend Servers, clique em Add Backend Server para acessar a página Add Backend Server.
Selecione as duas instâncias ECS criadas.
Clique em Next step para prosseguir à etapa Ports/Weights.
-
Configure portas e pesos.
Defina a Port como
22.Clique em OK para concluir a configuração.
Aguarde até que os servidores backend sejam adicionados com sucesso.
Configurar um listener
Após adicionar as instâncias ECS ao grupo de servidores backend, configure um listener para a instância NLB conforme descrito abaixo. Para mais informações, consulte Adicionar um listener TCP.
-
Acesse a página de detalhes da instância.
Faça login no console do Network Load Balancer. Na barra de navegação superior, selecione a região. Na lista de instâncias, localize a instância criada.
Clique no nome da instância para acessar a página de detalhes.
-
Configure um listener.
No topo da página de detalhes da instância, clique em Create Listener para abrir o assistente Configure Server Load Balancer.
Defina o protocolo do listener como TCP e a porta do listener como
22.Clique em Next step.
-
Selecione um grupo de servidores.
Na etapa Select Server Group, em Server Type, selecione o grupo de servidores
ECS_NLBcriado em Criar um grupo de servidores backend.Clique em Next step.
-
Envie para revisão.
Na etapa Configuration Review, confirme as instâncias ECS e a porta do listener e clique em Submit.
Configurar uma fonte de dados SSH
Após concluir as configurações anteriores, adicione a instância NLB como uma fonte de dados SSH. Para mais informações, consulte Fontes de dados SSH.
-
Faça login no console do DataWorks. Na região desejada, clique em no painel de navegação à esquerda. Selecione um workspace na lista suspensa e clique em Go to Management Center.
No painel de navegação à esquerda, clique em para acessar a página Data Sources.
Na página Data Sources, clique em Add Connection para acessar a página Add Connection.
-
Na página Add Connection, selecione SSH como tipo de fonte de dados para acessar a página Add SSH Data Source. Configure os parâmetros nesta página conforme descrito abaixo.
Parâmetro
Descrição
Data source name
Insira um nome personalizado para a fonte de dados, por exemplo,
SSH_DB.Configuration mode
Utilize o padrão User-created Data Store with Public IP Addresses.
Authentication method
Recomendamos DataWorks SSH Public Key Authentication.
Host address
Faça login no console do Network Load Balancer. Na barra de navegação superior, selecione a região. Localize a instância e clique em seu nome para abrir a página de detalhes. Copie o Domain Name para usar como Host Address.
Host port
A porta do host para o servidor é
22.Username
O nome de usuário para o servidor é
root.Public key
Clique em Generate Key Pair. A plataforma gera uma chave pública com base no nome de usuário configurado.
ImportanteAntes de testar a conexão, adicione a chave pública ao arquivo
.ssh/authorized_keysnosdoishosts ECS. Caso contrário, o teste falhará. -
Teste a conectividade do grupo de recursos.
Na seção Connection Configuration, localize o grupo de recursos serverless vinculado ao seu workspace e clique em Test Connectivity na coluna Connected state.
Executar a tarefa SSH
Siga estas etapas para criar e desenvolver um nó SSH e verificar sua funcionalidade checando os resultados da tarefa.
Criar um nó SSH
Crie um nó SSH seguindo estas etapas. Para mais informações, consulte Criar um nó SSH.
Acesse a página Workspaces no console do DataWorks. Na barra de navegação superior, selecione a região desejada. Localize o workspace desejado e escolha na coluna Actions.
No painel de navegação à esquerda, clique no ícone
. Clique no ícone
ao lado de Project Directory e escolha para abrir a caixa de diálogo New Node.Na caixa de diálogo New Node, insira um Name personalizado para o nó SSH.
Clique em Confirm para acessar o editor de nós.
Desenvolver o nó SSH
Na página do editor de nós, adicione o seguinte código de amostra e configure o ambiente de execução.
-
Escreva o código do nó SSH.
No editor de código, insira o seguinte comando de amostra:
cat /tmp/a.txt -
Configure o ambiente de execução.
Data Source: Na lista suspensa Select a data source no topo do editor, selecione a fonte de dados
SSH_DB.Resource group configuration: No painel à direita, clique em Run Configuration e defina Resource Group como seu grupo de recursos serverless.
Clique no botão Save na barra de ferramentas para salvar o nó SSH.
Visualizar resultados da tarefa
Execute o nó SSH várias vezes e compare a saída para verificar se o balanceamento de carga está funcionando corretamente.
-
Execute a tarefa do nó SSH.
Clique no botão Run na barra de ferramentas. Após a conclusão da primeira execução, execute a tarefa novamente.
-
Visualize os resultados da tarefa.
NotaA saída pode variar entre as execuções porque a tarefa é roteada para uma instância ECS diferente a cada vez.
Resultado da execução 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 da execução 2:
Esta saída mostra "I am the second server", indicando que a solicitação foi roteada para a segunda instância ECS. O log de execução é o seguinte:
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
Como funciona
A seguir, explicamos como o DataWorks utiliza o NLB para garantir a execução estável de tarefas SSH de alta concorrência:
Essa solução adiciona múltiplas instâncias ECS a um grupo de servidores NLB e utiliza o nome DNS da instância NLB como fonte de dados SSH no DataWorks. O listener do NLB intercepta as solicitações de tarefas do nó SSH e as distribui para instâncias ECS íntegras com base em sua política de balanceamento de carga. Os resultados da execução retornam através do NLB e aparecem no log do nó SSH.