O Network Load Balancer (NLB) da Alibaba Cloud oferece balanceamento de carga inteligente para nós SSH do DataWorks, evitando pontos únicos de falha e simplificando a configuração e a manutenção de tarefas.
Contexto
No DataWorks, uma fonte de dados SSH geralmente é configurada com o endereço de host de uma instância ECS fixa. Se esse host apresentar problemas — por exemplo, devido a uma falha ou exaustão de recursos — os nós SSH podem falhar. Para resolver isso, adicione várias instâncias ECS a um server group 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 o status de integridade delas. Caso uma instância ECS falhe, o NLB encaminha automaticamente as solicitações para outras instâncias íntegras. Esse mecanismo 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 encaminha automaticamente as tarefas do nó SSH do DataWorks para uma instância ECS no grupo de servidores, seguindo sua política definida. Além disso, o NLB verifica a integridade do grupo de servidores. Ao detectar uma instância ECS não íntegra, ele redireciona as tarefas para outras instâncias saudáveis, assegurando continuidade e alta disponibilidade.
Essa solução mitiga a exaustão de recursos e elimina pontos únicos de falha, aumentando a confiabilidade das tarefas.
Pré-requisitos
-
O usuário RAM que você pretende utilizar deve estar adicionado 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 obter mais informações sobre como adicionar membros e atribuir funções, consulte Add members to a workspace.
Um grupo de recursos serverless deve estar associado ao seu workspace. Para mais detalhes, consulte os tópicos no diretório Use serverless resource groups.
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 residir 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 fins de verificação.
Criar instâncias ECS
Siga as etapas abaixo para criar as instâncias ECS.
-
Adquira as instâncias ECS.
Acesse a página de compra de instâncias ECS, selecione a aba Custom Launch e configure os parâmetros a seguir para criar as instâncias. Para detalhes sobre outros parâmetros, consulte Create an instance on the Custom Launch tab.
Parâmetro
Descrição
Region
Selecione a região onde seu workspace do DataWorks está localizado.
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
Grave dados de amostra exclusivos em cada instância ECS 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 estão localizadas 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
Crie uma instância NLB, adicione duas instâncias ECS a um grupo de servidores de backend e configure um listener para ativar o balanceamento de carga.
Criar uma instância NLB
Crie uma instância NLB conforme descrito abaixo. Para mais informações, consulte Prerequisites for creating an NLB instance e Create and manage an NLB instance.
-
Acesse a página de compra da instância 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 de backend
Depois que a instância NLB entrar no estado Active, crie um grupo de servidores de backend e vincule-o à instância. Para mais informações, consulte NLB server groups.
-
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 de 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 de 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 de backend sejam adicionados com sucesso.
Configurar um listener
Após adicionar as instâncias ECS ao grupo de servidores de backend, configure um listener para a instância NLB. Para mais informações, consulte Add a TCP listener.
-
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 Create a backend server group.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
Adicione a instância NLB como uma fonte de dados SSH. Para mais informações, consulte SSH data sources.
-
Faça login no console do DataWorks. Na região de destino, 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
Crie e desenvolva um nó SSH e, em seguida, verifique o balanceamento de carga analisando os resultados da tarefa.
Criar um nó SSH
Crie um nó SSH conforme descrito abaixo. Para mais informações, consulte Create an SSH node.
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 código de amostra a seguir e configure o ambiente de execução.
-
Escreva o código do nó SSH.
No editor de código, insira o seguinte comando de exemplo:
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 o 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 é encaminhada 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 encaminhada 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
O DataWorks utiliza o NLB para garantir a execução estável de tarefas SSH de alta concorrência da seguinte forma:
Várias instâncias ECS são adicionadas a um grupo de servidores NLB, e o nome DNS da instância NLB serve como fonte de dados SSH no DataWorks. O listener do NLB intercepta as solicitações de tarefas dos nós 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.