Sintomas
Se uma instância ECS permanecer em execução por um longo período sem reinicialização, problemas de conectividade de rede poderão ocorrer. Os sintomas incluem interrupção total da rede ou impossibilidade de executar ping nos endereços IP público e privado da instância.
Causa
Ao iniciar uma instância ECS pela primeira vez, o sistema usa o Dynamic Host Configuration Protocol (DHCP) para atribuir automaticamente um endereço IP à interface de rede elástica e obter o tempo de expiração do lease. Em condições normais, o processo dhclient em sistemas Linux e o serviço DHCP Client em sistemas Windows renovam periodicamente esse lease com o servidor DHCP para manter o endereço IP válido. No entanto, em instâncias criadas a partir de certas imagens do CentOS 7, o processo dhclient pode ser encerrado inesperadamente. Além disso, existe um problema conhecido no serviço DHCP Client em alguns sistemas operacionais Windows Server. Consequentemente, a instância não consegue renovar automaticamente o lease do endereço IP. Quando o lease inicial expira, o sistema libera o endereço IP privado da instância, causando falha na rede.
Escopo
Este artigo aplica-se a instâncias ECS que atendem aos critérios abaixo e usam DHCP para atribuir automaticamente um endereço IP a uma interface de rede elástica. Instâncias configuradas com endereço IP estático não exigem ação.
-
Instâncias de qualquer tipo criadas a partir das seguintes imagens públicas do CentOS 7 antes de 31 de maio de 2018 e não reiniciadas desde 15 de novembro de 2018:
centos_7_04_64_20G_alibase_20180419.vhd
centos_7_04_64_20G_alibase_20180326.vhd
centos_7_04_64_20G_alibase_201701015.vhd
centos_7_03_64_20G_alibase_20170818.vhd
centos_7_02_64_20G_alibase_20170818.vhd
centos_7_03_64_40G_alibase_20170710.vhd
centos_7_03_64_40G_alibase_20170625.vhd
centos_7_03_64_40G_alibase_20170523.vhd
centos_7_03_64_40G_alibase_20170503.vhd
-
Instâncias que executam os seguintes sistemas operacionais Windows Server, criadas antes de 15 de novembro de 2018 e não reiniciadas desde então:
Windows Server 2008 R2
Windows Server 2012 R2
Windows Server 2016
Windows Server Version 1709
Soluções
Antes de executar operações de alto risco, como modificar uma instância ou seus dados, garanta a implementação de medidas de recuperação de desastres e tolerância a falhas.
Antes de modificar configurações ou dados de instâncias como ECS e RDS, crie um snapshot ou ative recursos como backup de log do RDS.
Caso tenha enviado informações sensíveis, como nomes de usuário e senhas, na plataforma Alibaba Cloud, altere-as imediatamente.
Escolha um dos quatro métodos abaixo conforme sua necessidade.
Método 1: Correção em lote usando o Cloud Assistant. Ideal para gerenciar múltiplas instâncias, permitindo execução fácil pelo console do ECS.
Método 2: Correção em lote via script Python SDK. Verifica o status das instâncias e aplica correções automáticas em toda uma região. Recomendado para usuários familiarizados com scripts.
Método 3: Correção utilizando scripts Shell e PowerShell. Exige acesso individual a cada instância ECS para aplicar as correções manualmente. Indicado para testes ou atualização de poucas instâncias. Os scripts são idênticos aos utilizados no Método 1.
Método 4: Verificação manual das placas de rede. Adequado quando há um número reduzido de instâncias.
Método 1: Correção em lote usando o Cloud Assistant
Neste exemplo, o Cloud Assistant verifica e repara automaticamente uma instância ECS. Certifique-se de que a instância possui o Cloud Assistant Agent instalado. O Cloud Assistant Agent vem pré-instalado por padrão em instâncias ECS criadas após 1º de dezembro de 2017. Para mais informações, consulte Cloud Assistant Agent Instalar o Cloud Assistant Agent.
Crie um comando do Cloud Assistant. Para instruções detalhadas, consulte Criar um comando do Cloud Assistant.
-
Baixe o script Shell ou PowerShell apropriado e cole o conteúdo no campo Command Content no console do ECS.
Instâncias CentOS: linux_fix_dhclient.sh
Instâncias Windows: win_fix_dhclient.ps1
Selecione as instâncias ECS alvo e execute o comando. Para instruções detalhadas, consulte Executar um comando.
-
Confirme se o comando foi executado com sucesso. Para instruções detalhadas, consulte Visualizar o resultado e o status do comando. Os exemplos a seguir mostram a saída do comando para instâncias CentOS e Windows.
[INFO] [2019-04-28 11:13:00] start check and fix [INFO] [2019-04-28 11:13:00] log file /tmp/dhcp_fix_20190428-11:13:00.log [INFO] [2019-04-28 11:13:00] start checking eth0 [INFO] [2019-04-28 11:13:00] eth0 state is up [INFO] [2019-04-28 11:13:00] ip a show dev eth0 [INFO] [2019-04-28 11:13:00] eth0 valid_lft 315359644 [INFO] [2019-04-28 11:13:00] no need fix, dhclient eth0 is running [1;32;40m[SUCCESS] [0m [2019-04-28 11:13:00] check and fix success [1;32;40m[SUCCESS] [0m [2019-04-28 11:13:00] return code: 0 [1;33;40m[WARN] [0m [2019-04-28 11:14:17] need fixing eth0 [INFO] [2019-04-28 11:14:17] start fixing eth0 [INFO] [2019-04-28 11:14:17] ip a show dev eth0 [INFO] [2019-04-28 11:14:17] ifup eth0 RTNETLINK answers: File exists [INFO] [2019-04-28 11:14:19] ip a show dev eth0 [INFO] [2019-04-28 11:14:19] ok, dhclient eth0 is running now [1;32;40m[SUCCESS] [0m [2019-04-28 11:14:19] check and fix success [1;32;40m[SUCCESS] [0m [2019-04-28 11:14:19] return code: 0 No ip will expire in recent 500 days. Then no need fix. Nic info: \\E2ETesthxxx...xxxterConfiguration.Index=3 Found one ip will expire in 500 days. We need fixing it!!! Fix it now... Nic info: \\E2ETesthxxx...xxxpterConfiguration.Index=3 fix success. ]]]]]]]]]]
Método 2: Correção em lote via script Python SDK
Este método utiliza um script Python baseado na API do Cloud Assistant para verificar e corrigir automaticamente todas as instâncias afetadas em uma região da Alibaba Cloud. Para instruções de instalação do SDK do ECS, consulte o guia de instalação no repositório GitHub da Alibaba Cloud.
Pré-requisitos
Execute o seguinte comando para instalar as dependências necessárias do SDK Python na máquina local ou em uma instância ECS.
pip install alibabacloud_ecs20140526
Procedimento
Baixe o arquivo autofix_dhclient.py para sua instância ECS.
-
Execute o comando abaixo para rodar o script.
sudo python autofix_dhclient.py <AccessKeyID> <AccessKeySecret> <region-id>NotaSubstitua <AccessKeyID>, <AccessKeySecret> e <region-id> no comando.
AccessKey ID: O AccessKey ID da sua conta Alibaba Cloud ou usuário RAM.
AccessKey Secret: O AccessKey Secret da sua conta Alibaba Cloud ou usuário RAM.
region ID: O ID da região onde a instância está localizada. Para obter uma lista de IDs de região, consulte Regiões e zonas.
Resultados
O exemplo a seguir mostra a saída do script.
Performing the scan and this will take some time, please wait...
Scan done.
Instance Status details:
+----------------------------+----------------+---------------+---------------+
| InstanceID | Cloud Assistant| NeedFix | FixResult |
+----------------------------+----------------+---------------+---------------+
| i-uf639pxxxye4ldb | Installed | No | NoChange |
+----------------------------+----------------+---------------+---------------+
| i-uf69mdxxxk6sahw | Installed | Yes | Success |
+----------------------------+----------------+---------------+---------------+
Summary:
================================
Total instances scanned: 2
Fixed: 1
Unknown: 0
Failed: 0
Os campos de saída têm a seguinte descrição:
-
Cloud Assistant: Verifica se o Cloud Assistant Agent está instalado na instância.
Installed: O Cloud Assistant Agent está instalado.
Not Installed: O Cloud Assistant Agent está ausente. Instale o Cloud Assistant Agent e execute o script novamente.
-
NeedFix: Verifica se o processo
dhclientou o serviço DHCP Client requer correção.Yes: Correção necessária. O script conclui a tarefa automaticamente.
No: Nenhuma correção necessária.
Unknown: O script não conseguiu determinar o status. Realize a verificação manualmente.
-
FixResult: Exibe o resultado da correção.
Success: O processo
dhclientou o serviço DHCP Client foi corrigido com sucesso.Failed: A correção falhou.
NoChange: Nenhuma correção era necessária.
Unknown: O script não conseguiu determinar o resultado. Realize a verificação manualmente.
Método 3: Correção utilizando scripts Shell ou PowerShell
Este método exige login em cada instância afetada e execução manual de um script. Projetado para cenários com poucas instâncias.
Procedimento para instâncias CentOS
Faça login na instância ECS. Para mais informações, consulte Métodos de conexão.
Baixe o script linux_fix_dhclient.sh para qualquer diretório.
-
Acesse o diretório onde o script está localizado e execute-o como usuário root.
sudo bash linux_fix_dhclient.shNotaUm código de retorno "0" indica que o script completou a verificação e a correção com sucesso.
Qualquer outro código de retorno indica falha na correção.
Procedimento para instâncias Windows
Faça login na instância ECS. Para mais informações, consulte Métodos de conexão.
Baixe o script win_fix_dhclient.ps1 para qualquer diretório.
-
Abra o PowerShell com privilégios administrativos e execute o seguinte comando.
powershell -executionpolicy bypass -file C:\win_fix_dhclient.ps1NotaNota:
Substitua C:\win_fix_dhclient.ps1 pelo caminho real do arquivo.
A saída "No ip will expire in recent 500 days. Then no need fix." indica que o serviço DHCP Client funciona normalmente e nenhuma correção é necessária.
A saída "Found one ip will expire in 500 days. We need fixing it!!! Fix it now... Fix success." indica que o serviço DHCP Client não funcionava corretamente e o script corrigiu o problema.
Qualquer outra saída indica falha na correção.
Método 4: Verificação manual das placas de rede
Este método exige verificação e correção manuais do processo dhclient (para instâncias CentOS) ou do tempo de expiração do lease do endereço IP (para instâncias Windows) em cada placa de rede.
Procedimento para instâncias CentOS
Faça login na instância ECS. Para mais informações, consulte Métodos de conexão.
-
Execute o comando abaixo para verificar todas as placas de rede na instância.
ls -al /sys/class/net/ -
Execute o seguinte comando para verificar se a placa de rede eth0 usa DHCP para obter o endereço IP.
cat /etc/sysconfig/network-scripts/ifcfg-eth0O sistema exibirá uma saída semelhante à seguinte. BOOTPROTO=dhcp indica que a placa de rede usa DHCP para atribuir um endereço IP. Se a atribuição do endereço IP não for via DHCP, vá para a Etapa 7.
[root@xxx ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes [root@xxx ~]# grep 'BOOTPROTO=dhcp' /etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTO=dhcp -
Execute o comando abaixo para verificar o status do processo
dhclientreferente à placa de rede eth0.ps aux | grep dhclient | grep eth0Uma saída vazia indica que o processo
dhclientnão está em execução correta.-
Se a saída for semelhante à seguinte, o processo funciona normalmente. Nesse caso, prossiga para a etapa 7.
root 15340 0.0 0.3 113372 12788 ? Ss 14:16 0:00 /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient--eth0.lease -pf /var/run/dhclient-eth0.pid -H izuf****************** eth0
-
Execute o comando a seguir para reiniciar o processo
dhclient.ifup eth0NotaEste exemplo utiliza eth0. Substitua
eth0pelo identificador real da sua placa de rede. Verifique novamente o status do processo
dhclientpara confirmar a execução.Repita as etapas 3 a 6 para verificar e corrigir o processo
dhclientem todas as placas de rede restantes.
Procedimento para instâncias Windows
Faça login na instância ECS. Para mais informações, consulte Métodos de conexão.
Abra o Prompt de Comando (CMD) como administrador.
-
Execute o comando abaixo para verificar se DHCP Enabled está definido como Yes na placa de rede descrita como Red Hat VirtIO Ethernet Adaptor e visualize o horário em Lease Expires.
ipconfig /allNotaO Red Hat VirtIO Ethernet Adaptor atua como placa de rede primária ou interface de rede elástica secundária da instância ECS. Configurações personalizadas, como adaptadores VPN ou loopback, não são afetadas. Placas de rede sem o serviço DHCP ativado também não sofrem impacto.
-
Se o lease expirar dentro de um ano, execute o seguinte comando para renová-lo.
ipconfig /renew Execute o comando ipconfig /all. Um tempo de expiração do lease superior a dez anos indica a conclusão da correção.
Aplica-se a
ECS