Configurer NTP sur une VM


De nombreux systèmes logiciels qui dépendent d'un séquençage minutieux des événements reposent sur une horloge système stable et cohérente. Les journaux système écrits par la plupart des services incluent un horodatage, qui aide à déboguer les problèmes qui surviennent entre les différents composants de votre système. Pour que les horloges système restent synchronisées, les instances de Compute Engine sont préconfigurées pour utiliser le protocole NTP (Network Time Protocol).

En plus de synchroniser l'heure du serveur, NTP est utile dans le cas rare de l'utilisation d'une seconde intercalaire. Une seconde intercalaire est un ajustement d'une seconde du temps universel coordonné, UTC, pour tenir compte des changements liés au ralentissement de la rotation de la Terre. Les secondes intercalaires ne se produisent pas à intervalles réguliers, car la vitesse de rotation de la Terre varie de manière aléatoire en fonction des événements climatiques et géologiques. Les secondes intercalaires précédentes ont causé des dommages considérables sur une variété de services et d'applications Web. Les serveurs NTP permettent de s'assurer que tous les serveurs signalent la même heure dans le cas d'un saut de seconde.

Ce document décrit comment configurer les serveurs NTP sur vos machines virtuelles (VM) pour qu'elles se comportent correctement dans l'éventualité d'une seconde intercalaire.

Serveurs Google NTP et lissage du saut de seconde

Pour un système d'exploitation Unix, les secondes intercalaires sont généralement ajoutées en répétant la dernière seconde de la journée. Cela peut causer des problèmes avec les logiciels qui ne s'attendent pas à des décalages dans le temps. Pour contourner ce problème, les serveurs de temps de Google Cloud "lissent" la seconde supplémentaire sur une période de vingt-quatre heures (douze heures avant et douze heures après la seconde intercalaire) pour que les ordinateurs n'identifient pas cette seconde comme une redondance au niveau de l'horodatage. Ce dispositif réduit les risques dans les systèmes qui dépendent d'un horodatage cohérent. Il est recommandé de configurer toutes les instances de machine virtuelle (VM) Compute Engine de sorte qu'elles utilisent les services NTP Google internes.

Configurer NTP pour vos instances

Google Cloud ne peut pas prédire comment les services NTP externes, tels que pool.ntp.org, vont gérer la seconde intercalaire. Dans la mesure du possible, il est recommandé de ne pas utiliser de sources NTP externes avec des VM Compute Engine. En effet, l'utilisation du service NTP de Google et d'un service externe pourrait entraîner des modifications imprévisibles de l'horloge du système. L'utilisation d'une seule source NTP externe est préférable à une combinaison de sources, mais les services NTP externes, tels que pool.ntp.org, utiliseront probablement la technique d'ajout ou de retrait de secondes pour gérer la seconde intercalaire. Par conséquent, vos VM risquent d'afficher une redondance au niveau de l'horodatage.

L'approche la plus sûre consiste à configurer vos VM Compute Engine pour qu'elles utilisent un seul et même serveur NTP : le serveur NTP interne fourni par Google. Ne combinez pas de serveurs NTP externes avec les serveurs NTP Google, car cela pourrait entraîner un comportement imprévisible.

Suivez les instructions suivantes pour vous assurer que vos VM sont correctement configurées.

Linux (chrony)

Par défaut, la plupart des nouvelles versions de Linux utilisent chrony pour gérer leurs paramètres NTP et la synchronisation horaire. Pour vous assurer que chrony n'utilise que le service NTP interne, vérifiez la configuration de chrony et supprimez les serveurs NTP externes.

  1. Utilisez ssh pour vous connecter à votre instance.

    Console

    Procédez comme suit pour utiliser la console pour vous connecter à la VM via SSH :

    1. Accédez à la page Instances de VM de la console Google Cloud.

      Accéder à la page "Instances de VM"

    2. Cliquez sur le bouton SSH correspondant à la VM que vous souhaitez configurer.

      Bouton SSH

    gcloud

    Pour utiliser la Google Cloud CLI pour vous connecter à la VM via SSH, exécutez la commande suivante :

    gcloud compute instances ssh VM_NAME
    

    Remplacez VM_NAME par le nom de la VM à laquelle vous vous connectez.

  2. Sur votre instance, exécutez chronyc sources pour vérifier l'état actuel de votre configuration NTP :

    $ chronyc sources
    

    Le résultat ressemble à ceci :

     210 Number of sources = 2
     MS Name/IP address         Stratum Poll Reach LastRx Last sample
     ===============================================================================
     ^* metadata.google.internal      2   6   377     4    -14us[  -28us] +/-  257us
     ^- 38.229.53.9                   2   6    37     4   -283us[ -297us] +/-   28ms
    

    Si un enregistrement unique pointe vers metadata.google ou metadata.google.internal, vous n'avez pas besoin d'apporter de modifications. Si vous voyez plusieurs sources, soit une combinaison entre metadata.google et une source publique telle que pool.ntp.org, mettez à jour vos sources pour supprimer tous les serveurs NTP externes.

    L'exemple de résultat ci-dessus comporte deux enregistrements, l'un pointant vers metadata.google.internal et l'autre vers une adresse externe. Comme il existe plusieurs sources, vous devez mettre à jour vos serveurs NTP pour supprimer l'adresse 38.229.53.9, comme décrit à l'étape suivante.

  3. Configurez vos serveurs NTP pour supprimer les serveurs NTP externes.

    Pour supprimer le serveur NTP supplémentaire de la liste, modifiez le fichier /etc/chrony/chrony.conf avec votre éditeur de texte préféré. Recherchez toutes les lignes commençant par server external_source_ip_or_name et supprimez-les.

    Après avoir modifié votre fichier /etc/chrony/chrony.conf, redémarrez le service chrony. La commande permettant de redémarrer varie en fonction de la distribution Linux, comme illustré dans les exemples suivants :

    sudo service chrony restart
    
    sudo systemctl restart chrony
    
  4. Vérifiez votre configuration en exécutant à nouveau la commande chronyc sources :

    $ chronyc sources
    

    Le résultat doit ressembler à ce qui suit :

     210 Number of sources = 1
     MS Name/IP address         Stratum Poll Reach LastRx Last sample
     ===============================================================================
     ^* metadata.google.internal      2   7   377    98  -1343ns[-1588ns] +/-  396us
    

Linux (ntpd)

La plupart des anciennes distributions Linux utilisent ntpd pour gérer leurs paramètres NTP et la synchronisation horaire. Pour vous assurer que ntpd n'utilise que le service NTP interne, vérifiez la configuration ntpd et supprimez les serveurs NTP externes.

  1. Utilisez ssh pour vous connecter à votre instance.

    Console

    Procédez comme suit pour utiliser la console pour vous connecter à la VM via SSH :

    1. Accédez à la page Instances de VM de la console Google Cloud.

      Accéder à la page "Instances de VM"

    2. Cliquez sur le bouton SSH correspondant à la VM que vous souhaitez configurer.

      Bouton SSH

    gcloud

    Pour utiliser la Google Cloud CLI pour vous connecter à la VM via SSH, exécutez la commande suivante :

    gcloud compute instances ssh VM_NAME
    

    Remplacez VM_NAME par le nom de la VM à laquelle vous vous connectez.

  2. Sur votre instance, exécutez ntpq -p pour vérifier l'état actuel de votre configuration NTP :

    $ ntpq -p
    

    La sortie ressemble à ceci :

    remote           refid           st t when poll reach   delay   offset  jitter
    
    ==============================================================================
    *metadata.google 255.28.23.83     2 u   27   64    1    0.634   -2.537   2.285
    *217.162.232.173 130.149.17.8     2 u  191 1024  176   79.245    3.589  27.454
    

    Si un enregistrement unique pointe vers metadata.google ou metadata.google.internal, vous n'avez pas besoin d'apporter de modifications. Si vous voyez plusieurs sources mélangées entre metadata.google et une source publique telle que pool.ntp.org, vous devez mettre à jour vos sources pour supprimer tous les serveurs NTP externes.

    L'exemple de résultat ci-dessus comporte deux enregistrements, l'un pointant vers metadata.google et l'autre vers une adresse externe. Comme il existe plusieurs sources, vous devez mettre à jour vos serveurs NTP pour supprimer l'adresse *217.162.232.173, comme décrit à l'étape suivante.

  3. Configurez vos serveurs NTP pour supprimer les sources externes.

    Pour configurer vos serveurs NTP, modifiez le fichier /etc/ntp.conf dans votre éditeur de texte préféré. Recherchez la section servers de la configuration et supprimez toutes les sources NTP autres que Google, par exemple :

    vim /etc/ntp.conf
    
    # You do need to talk to an NTP server or two (or three).
    #server ntp.your-provider.example
    ...
    server metadata.google.internal iburst
    

    Après avoir modifié votre fichier /etc/ntp.conf, redémarrez le service NTP. La commande permettant de redémarrer varie en fonction de la distribution Linux :

    sudo service ntp reload
    
  4. Vérifiez votre configuration en exécutant à nouveau la commande ntpq -p :

    ntpq -p
    
    remote           refid           st t when poll reach   delay   offset  jitter
    ==============================================================================
    *metadata.google 255.28.23.83     2 u   27   64    1    0.634   -2.537   2.285
    

Windows

  1. Accédez à la page Instances de VM de la console Google Cloud.

    Accéder à la page "Instances de VM"

  2. Cliquez sur le bouton RDP à côté de l'instance Windows à laquelle vous souhaitez vous connecter.

    Bouton SSH

  3. Une fois connecté, cliquez avec le bouton droit sur l'icône Powershell et sélectionnez Exécuter en tant qu'administrateur.

    Icône PowerShell

  4. Lorsque l'invite de commande est chargée, exécutez la commande suivante pour afficher la configuration NTP actuelle :

    w32tm /query /configuration
    
    [Configuration]
    ...
    Type: NTP (Local)
    NtpServer: metadata.google.internal,
    ...
    

    Si un enregistrement unique pointe vers metadata.google ou metadata.google.internal, vous n'avez pas besoin d'apporter de modifications. Si vous voyez plusieurs sources, soit une combinaison entre metadata.google et une source publique, vous devez supprimer le serveur externe. Suivez les instructions dans le guide de Windows pour configurer votre serveur NTP.

  5. Pour garantir la compatibilité logicielle la plus large possible sur les VM Windows, Google vous recommande d'utiliser le pilote gVNIC, afin d'assurer une précision NTP de l'ordre de moins d'une milliseconde avec le serveur metadata.google.

    Si vous devez utiliser VirtIO avec votre VM Windows, pour obtenir une précision de l'ordre de moins d'une milliseconde avec les serveurs NTP, Google vous recommande de ne pas utiliser le service de temps Windows (arrêtez le service w32tm et supprimez-le du registre).

    1. Arrêtez le service de temps Windows :

      net stop w32time
      
    2. Supprimez le service de temps Windows du registre :

      w32tm /unregister
      
    3. Une fois le service temps Windows arrêté et supprimé du registre, installez le client NTP Meinberg.

      Suivez les instructions de configuration fournies dans la documentation Meinberg.

    4. Configurez le serveur NTP pour le client NTP Meinberg comme étant metadata.google.internal.

      Une fois la configuration NTP terminée, attendez entre 5 et 15 minutes que l'horloge système de la VM se stabilise avec le serveur NTP.

      Pour savoir pourquoi l'utilisation de w32tm n'est pas recommandée, consultez la documentation sur les problèmes connus.

Utiliser le lissage des secondes intercalaires avec des systèmes externes à Google Cloud

La fonctionnalité de lissage de saut de seconde caractéristique des serveurs NTP de Google est un moyen pratique de gérer le risque en ajoutant une seconde au niveau des systèmes sensibles aux variations d'horloge. D'autres services NTP peuvent fournir une solution acceptable pour la plupart des systèmes logiciels. Cependant, il est important de ne pas mélanger les services NTP de lissage des secondes intercalaires de Google avec les services d'ajout ou de retrait de secondes des serveurs NTP publics.

Pour synchroniser les périphériques à l'extérieur de Google Cloud avec le temps lissé, vous pouvez utiliser le serveur NTP public de Google pour ces périphériques. Le serveur NTP public de Google utilise le même lissage des secondes intercalaires que celui assuré auprès des VM Compute Engine.

Étapes suivantes