Symptômes
Lorsqu'une instance ECS fonctionne pendant une période prolongée sans redémarrage, des problèmes de connectivité réseau peuvent survenir. Les symptômes incluent une interruption totale du réseau ou l'impossibilité d'atteindre l'adresse IP publique et l'adresse IP privée de l'instance via un ping.
Cause
Au premier lancement d'une instance ECS, le système utilise le protocole DHCP (Dynamic Host Configuration Protocol) pour attribuer automatiquement une adresse IP à son interface réseau élastique et obtient une durée de validité du bail. Dans des conditions normales, le processus dhclient sous Linux et le service Client DHCP sous Windows renouvellent périodiquement ce bail auprès du serveur DHCP afin de garantir la validité de l'adresse IP. Toutefois, ce problème survient car, sur les instances créées à partir de certaines images CentOS 7, le processus dhclient peut se terminer de manière inattendue. Par ailleurs, un problème connu affecte le service Client DHCP sur certains systèmes d'exploitation Windows Server. En conséquence, votre instance ne peut pas renouveler automatiquement son bail d'adresse IP. Lorsque le bail initial expire, l'adresse IP privée de l'instance est libérée, ce qui provoque une panne réseau.
Portée
Cet article s'applique aux instances ECS qui répondent aux critères suivants et utilisent DHCP pour attribuer automatiquement une adresse IP à une interface réseau élastique. Aucune action n'est requise pour les instances configurées avec une adresse IP statique.
-
Instances de tout type créées à partir des images publiques CentOS 7 suivantes avant le 31 mai 2018, et qui n'ont pas été redémarrées depuis le 15 novembre 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
-
Instances exécutant les systèmes d'exploitation Windows Server suivants, créées avant le 15 novembre 2018 et non redémarrées depuis cette date.
Windows Server 2008 R2
Windows Server 2012 R2
Windows Server 2016
Windows Server Version 1709
Solutions
Avant d'effectuer des opérations à haut risque, telles que la modification d'une instance ou de ses données, assurez-vous d'avoir mis en place des mesures de reprise après sinistre et de tolérance aux pannes.
Avant de modifier la configuration ou les données d'instances telles que ECS et RDS, créez un snapshot ou activez des fonctionnalités comme la sauvegarde des journaux RDS.
Si vous avez soumis des informations sensibles telles que des noms d'utilisateur et des mots de passe sur la plateforme Alibaba Cloud, modifiez-les immédiatement.
Choisissez l'une des quatre méthodes suivantes en fonction de vos besoins.
Méthode 1 : Correction par lot à l'aide de Cloud Assistant. Cette méthode convient à la gestion de plusieurs instances et est facile à mettre en œuvre depuis la console ECS.
Méthode 2 : Correction par lot à l'aide d'un script Python SDK. Cette méthode vérifie l'état des instances et effectue des corrections automatiques dans toute une région. Elle s'adresse aux utilisateurs familiarisés avec les scripts.
Méthode 3 : Correction à l'aide de scripts Shell et PowerShell. Cette méthode nécessite de se connecter à chaque instance ECS pour appliquer manuellement les correctifs. Elle est adaptée aux tests ou à la mise à jour d'un petit nombre d'instances. Les scripts sont identiques à ceux utilisés dans la Méthode 1.
Méthode 4 : Vérification manuelle des cartes réseau. Cette méthode convient à un petit nombre d'instances.
Méthode 1 : Correction par lot à l'aide de Cloud Assistant
Dans cet exemple, Cloud Assistant est utilisé pour vérifier et réparer automatiquement une instance ECS. Assurez-vous que votre instance dispose de l'agent Cloud Assistant Agent installé. L'agent Cloud Assistant Agent est préinstallé par défaut sur les instances ECS créées après le 1er décembre 2017. Pour plus d'informations, consultez Cloud Assistant Agent Installer Cloud Assistant Agent.
Créez une commande Cloud Assistant. Pour des instructions détaillées, consultez Créer une commande Cloud Assistant.
-
Téléchargez le script Shell ou PowerShell approprié et collez son contenu dans le champ Command Content de la console ECS.
Instances CentOS : linux_fix_dhclient.sh
Instances Windows : win_fix_dhclient.ps1
Sélectionnez les instances ECS cibles et exécutez la commande. Pour des instructions détaillées, consultez Exécuter une commande.
-
Confirmez que la commande a été exécutée avec succès. Pour des instructions détaillées, consultez Afficher le résultat et l'état de la commande. Les exemples suivants montrent la sortie de la commande pour les instances CentOS et 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éthode 2 : Correction par lot à l'aide d'un script Python SDK
Cette méthode utilise un script Python basé sur l'API Cloud Assistant pour vérifier et corriger automatiquement toutes les instances concernées au sein d'une région Alibaba Cloud. Pour les instructions d'installation du SDK ECS, consultez le guide d'installation dans le référentiel GitHub d'Alibaba Cloud.
Prérequis
Exécutez la commande suivante pour installer les dépendances Python SDK requises sur votre machine locale ou une instance ECS.
pip install alibabacloud_ecs20140526
Procédure
Téléchargez le fichier autofix_dhclient.py sur votre instance ECS.
-
Exécutez la commande suivante pour lancer le script.
sudo python autofix_dhclient.py <AccessKeyID> <AccessKeySecret> <region-id>RemarqueVous devez remplacer <AccessKeyID>, <AccessKeySecret> et <region-id> dans la commande.
AccessKey ID : l'AccessKey ID de votre compte Alibaba Cloud ou utilisateur RAM.
AccessKey Secret : l'AccessKey Secret de votre compte Alibaba Cloud ou utilisateur RAM.
ID de région : l'ID de la région où se trouve votre instance. Pour obtenir la liste des ID de région, consultez Régions et zones.
Résultats
Voici un exemple de sortie du 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
Les champs de sortie sont décrits ci-dessous :
-
Cloud Assistant : cette vérification détermine si l'agent Cloud Assistant Agent est installé sur votre instance.
Installed : l'agent Cloud Assistant Agent est installé.
Not Installed : l'agent Cloud Assistant Agent est absent. Vous pouvez Installer Cloud Assistant Agent puis relancer le script.
-
NeedFix : cette vérification détermine si le processus
dhclientou le service Client DHCP nécessite une correction.Yes : une correction est requise. Le script termine automatiquement la tâche.
No : aucune correction n'est requise.
Unknown : le script n'a pas pu déterminer l'état. Vous devez effectuer la vérification manuellement.
-
FixResult : ce champ affiche le résultat de la correction.
Success : le processus
dhclientou le service Client DHCP a été corrigé avec succès.Failed : la correction a échoué.
NoChange : aucune correction n'était nécessaire.
Unknown : le script n'a pas pu déterminer le résultat. Vous devez effectuer la vérification manuellement.
Méthode 3 : Correction à l'aide de scripts Shell ou PowerShell
Cette méthode nécessite de se connecter à chaque instance concernée et d'exécuter manuellement un script. Elle convient à un petit nombre d'instances.
Procédure pour les instances CentOS
Connectez-vous à l'instance ECS. Pour plus d'informations, consultez Méthodes de connexion.
Téléchargez le script linux_fix_dhclient.sh dans n'importe quel répertoire.
-
Accédez au répertoire contenant le script et exécutez-le en tant qu'utilisateur root.
sudo bash linux_fix_dhclient.shRemarqueUn code de retour « 0 » indique que le script a effectué la vérification et la correction avec succès.
Tout autre code de retour indique que la correction a échoué.
Procédure pour les instances Windows
Connectez-vous à l'instance ECS. Pour plus d'informations, consultez Méthodes de connexion.
Téléchargez le script win_fix_dhclient.ps1 dans n'importe quel répertoire.
-
Ouvrez PowerShell avec des privilèges administratifs et exécutez la commande suivante.
powershell -executionpolicy bypass -file C:\win_fix_dhclient.ps1RemarqueRemarque :
Vous devez remplacer C:\win_fix_dhclient.ps1 par le chemin d'accès réel au fichier.
La sortie « No ip will expire in recent 500 days. Then no need fix. » indique que le service Client DHCP fonctionne normalement et qu'aucune correction n'est requise.
La sortie « Found one ip will expire in 500 days. We need fixing it!!! Fix it now... Fix success. » indique que le service Client DHCP ne fonctionnait pas correctement et que le script a résolu le problème.
Toute autre sortie indique que la correction a échoué.
Méthode 4 : Vérification manuelle des cartes réseau
Cette méthode nécessite de vérifier et de corriger manuellement le processus dhclient (pour les instances CentOS) ou la durée d'expiration du bail d'adresse IP (pour les instances Windows) sur chaque carte réseau.
Procédure pour les instances CentOS
Connectez-vous à l'instance ECS. Pour plus d'informations, consultez Méthodes de connexion.
-
Exécutez la commande suivante pour vérifier toutes les cartes réseau de l'instance.
ls -al /sys/class/net/ -
Exécutez la commande suivante pour vérifier si la carte réseau eth0 utilise DHCP pour obtenir son adresse IP.
cat /etc/sysconfig/network-scripts/ifcfg-eth0Le système affiche une sortie similaire à celle ci-dessous. BOOTPROTO=dhcp indique que la carte réseau utilise DHCP pour attribuer une adresse IP. Si l'adresse IP n'est pas attribuée via DHCP, passez à l'étape 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 -
Exécutez la commande suivante pour vérifier l'état du processus
dhclientpour la carte réseau eth0.ps aux | grep dhclient | grep eth0Une sortie vide indique que le processus
dhclientne fonctionne pas correctement.-
Si la sortie est similaire à celle ci-dessous, le processus fonctionne normalement. Dans ce cas, passez à l'étape 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
-
Exécutez la commande suivante pour redémarrer le processus
dhclient.ifup eth0RemarqueCet exemple utilise eth0. Remplacez
eth0par l'identifiant réel de votre carte réseau. Vérifiez à nouveau l'état du processus
dhclientpour confirmer qu'il est en cours d'exécution.Répétez les étapes 3 à 6 pour vérifier et corriger le processus
dhclientpour toutes les autres cartes réseau.
Procédure pour les instances Windows
Connectez-vous à l'instance ECS. Pour plus d'informations, consultez Méthodes de connexion.
Ouvrez l'invite de commandes (CMD) en tant qu'administrateur.
-
Exécutez la commande suivante pour vérifier si DHCP Enabled est défini sur Yes pour la carte réseau décrite comme Red Hat VirtIO Ethernet Adaptor et pour afficher son heure Lease Expires.
ipconfig /allRemarqueLa carte Red Hat VirtIO Ethernet Adaptor sert d'interface réseau principale ou d'interface réseau élastique secondaire pour l'instance ECS. Les configurations personnalisées telles que les adaptateurs VPN ou loopback ne sont pas concernées. Les cartes réseau dont le service DHCP n'est pas activé ne sont pas non plus concernées.
-
Si le bail expire dans moins d'un an, exécutez la commande suivante pour le renouveler.
ipconfig /renew Exécutez la commande ipconfig /all. Une heure d'expiration du bail située dans les dix prochaines années indique que la correction est terminée.
S'applique à
ECS