Régler l’heure de serveurs virtuels sous Debian
Quand des serveurs ont besoin de communiquer entre eux, il devient vite indispensable d’utiliser la même référence de temps. Cela semble évident mais, en pratique, ce petit détail est souvent négligé. Résultat : synchronisation de données défectueuses, résultats incohérents, documents écrasés par d’anciennes versions, fichiers de log illisibles… Que du bonheur !
Pourtant, mettre à l’heure un serveur est simple. Et quand le serveur accueille des serveurs virtuels ? Comme nous allons le voir, cela reste toujours simple !
Lire l’heure
L’heure d’un serveur sous Debian (comme sur d’autres distributions Linux) est gérée par la commande date
. Sans paramètre, elle retourne la date et l’heure du système :
# date
mar avr 18 12:47:53 CEST 2006
On remarque au passage que le résultat est formaté selon les paramètres de localisation du système (ici en français pour l’heure locale de Paris).
Pour obtenir l’heure UTC, c’est-à-dire l’heure universelle ou heure de Greenwich, on ajoute le paramètre -u
:
# date -u
mar avr 18 10:47:53 UTC 2006
On obtient bien un décalage de 2 heures par rapport à l’heure de Paris.
Modifier l’heure
Pour modifier l’heure, on utilise le paramètre --set
:
# date --set 12:53:20
Et si la date n’est pas bonne, même remède :
# date --set 2006-05-18
Configuration du fuseau horaire
Si le fuseau horaire ne convient pas, inutile de réinstaller le système ! On utilise simplement la commande tzconfig
et on répond aux questions :
# tzconfig
Your current time zone is set to Europe/Paris
Do you want to change that? [n]: y
Please enter the number of the geographic area in which you live:
[...]
Number: 8
[...]
Please enter the name of one of these cities or zones
[...]
Name: Paris
Your default time zone is set to 'Europe/Paris'.
Local time is now: mar avr 18 13:07:02 CEST 2006.
Universal Time is now: mar avr 18 11:07:02 UTC 2006.
Facile ! Pour information, la configuration du fuseau horaire est stockée dans le fichier /etc/timezone
.
Temps système et temps BIOS
Tout semble parfait mais il y a un détail sournois : votre serveur gère deux références de temps, celle du système et celle de la carte-mère (horloge BIOS) ! Et elles peuvent très bien ne pas indiquer la même heure ! Dans certains cas, cette subtile différence peut avoir des conséquences agaçantes lors du redémarrage du serveur (par exemple, perte de l’heure système). Comme dit le proverbe, « l’homme qui a une montre sait l’heure qu’il est, celui qui en a deux n’est jamais sûr. »
Donc, autant régler une bonne fois pour toute l’heure matérielle avec la commande hwclock
. Comme nous avons déjà réglé l’heure système, on utilise l’option --systohc
pour la récupérer et --utc
pour la définir en heure UTC :
# hwclock --systohc --utc
Synchronisation avec un serveur de temps
« Bon, tout est à l’heure, je passe à autre chose. »
Pas encore ! Car le quartz qui pilote l’oscillation de l’horloge de la carte-mère n’est jamais parfait. L’heure va donc se décaler petit à petit (parfois de plusieurs secondes par jour !). Heureusement, le protocole NTP (Network Time Protocol) vient à notre secours et offre la possibilité de synchroniser l’horloge du serveur avec un serveur de temps qui fait référence. Là encore, rien de bien méchant.
Il faut d’abord installer les paquets qui permettront d’utiliser NTP :
# apt-get install ntp-simple ntpdate
Puis, on configure NTP :
# vi /etc/ntp.conf
Concernant les serveurs NTP, choisissez sans hésiter ceux du projet pool.ntp.org qui optimisent les requêtes NTP par l’utilisation de clusters répartis dans le monde entier. Une rapide visite de ce site vous indiquera les serveurs NTP à utiliser dans votre zone géographique. Si votre serveur est en France, on ajoute donc les lignes suivantes dans ntp.conf
:
server 0.fr.pool.ntp.org
server 1.fr.pool.ntp.org
server 2.fr.pool.ntp.org
Avant de mettre en place le démon qui synchronisera l’heure automatiquement, il faut le faire manuellement (ici, avec le serveur principal de pool.ntp.org) :
# ntpdate pool.ntp.org
Maintenant que l’heure système est bonne, reste à mettre à jour celle de l’horloge BIOS :
# hwclock --systohc --utc
Pourquoi choisir l’heure UTC ? Pour éviter de perdre l’heure si les serveurs NTP ne sont pas accessibles au redémarrage de votre serveur.
Il reste à charger nos modifications et la synchronisation automatique est en place :
# /etc/init.d/ntp-server restart
On termine par le redémarrage du serveur qui est obligatoire pour éviter quelques mauvaises surprises (par exemple, les tâches cron qui se déclenchent à l’heure UTC ou les fonctions de temps de PHP qui perdent deux heures…). Si le redémarrage n’est pas possible, il faut relancer tous les services actifs.
Si vous souhaitez mettre à jour l’heure manuellement, le paquet ntp-server
n’est pas utile. Gardez simplement le paquet ntpdate
et utilisez directement la commande ntpdate
. Vous pouvez aussi désactiver le chargement du démon NTP au démarrage :
# update-rc.d ntp remove
Et pour le remettre en place :
# update-rc.d ntp defaults
Régler l’heure d’un serveur virtuel (vserver)
« Et les serveurs virtuels dans tout ça ? Faut-il faire toutes ces opérations pour chacun des 100 vservers installés sur ma machine ? »
Non, heureusement ! Pour que le système de fichiers fonctionne correctement, tous les vservers utilisent la même référence de temps, celle du serveur principal. On ne peut donc pas modifier l’heure d’un vserver. Par contre, un vserver peut avoir sa propre configuration de fuseau horaire, très utile pour proposer des services à des utilisateurs de zones géographiques différentes.
Comme nous l’avons vu plus haut, la commande tzconfig
permet de définir le fuseau horaire pour calculer le décalage horaire entre l’heure UTC du serveur principal et celle du vserver. On remarque au passage la nécessité d’utiliser l’heure UTC comme référence de temps sur un serveur.
Les puristes (ou plutôt les administrateurs qui ont la responsabilité d’exploiter des serveurs de production en toute sécurité) se pencheront sur les nombreuses options de configuration de NTP : installation d’un serveur NTP local, filtrage des adresses IP, portée des requêtes, périodicité de la synchronisation, etc. A chacun sa cuisine !
Commentaires
mica
Niquel et très clair merci 😀
11 janvier 2007, 10h03 ·sputnick
tres bien merkiii!
20 avril 2007, 22h58 ·ça fait longtemps que j’aurais du tomber ici 😉
germon
Et moi donc avec une sid et une testing sur le même hd mal installé au départ je passai mon temps dans le bios.
28 août 2007, 17h57 ·Un grand merci :-))
Kmleonix
Superbe, merci Mr Christophe
Je n’aurais enfin plus à regler l’heure de ma machine ^^
Je me permet juste une petite remarque. Aprés avoir installé et configuré le dameon ntp, pour mettre à l’heure la machine, il faut supprimer l’option -q de la commande ‘ntpdate -q pool.ntp.org’.
Cette option ‘query’ permet de voir le ntp fonctionner, mais ne modifie pas l’heure de la machine.
Un grand merci pour cette article clair :o)
12 septembre 2007, 1h18 ·Christophe
> Kmleonix : un grand merci pour cette « petite » remarque que je trouve essentielle. L’erreur est corrigée !
19 septembre 2007, 23h01 ·Tintwo
Moi qui cherchait un tutoriel pour ce « soucis », tombe pile poil dessus !
Très bien fait ! Merci.
25 octobre 2007, 0h16 ·Christophe
Je vous remercie pour ces… remerciements !
Cet article doit effectivement bien servir car il est le plus consulté de mon blog.
12 novembre 2007, 16h00 ·lidiriel
Nickel un article qui résume tout. 😉
2 avril 2008, 16h41 ·je fait de ce pas faire un lien sur mon site.
misterT
Super ! Non seulement ça mache et en plus c’est très bien expliqué : on comprend tout ce qu’on fait !
Et pour un débutant c’est pas si courant de tomber sur un article si bien et simplement écrit .
Merci
10 juillet 2008, 14h59 ·corriou
Exactement ce que je cherchais. Par contre, la commande pour modifier le fuseau horaire a été modifiée depuis. Maintenant, il faut faire :
25 novembre 2010, 8h52 ·dpkg-reconfigure tzdata
thomas
Hello,
je vois que cela fait longtemps que l’on a pas publié sur ton blog, c’est l’occasion ! 😉
je confirme d’ailleurs que c’est toujours d’actualité puisque je viens de suivre tes étapes pour synchro mes serveurs à Londres sur des ces serveurs de temps :
server 0.uk.pool.ntp.org
server 1.uk.pool.ntp.org
server 2.uk.pool.ntp.org
server 3.uk.pool.ntp.org
Tout semble bien se passer sauf que de temps à un autre je passe de 2s de décalage avec des sites comme celui là : http://www.horlogeparlante.com/heure-londres-royaume-uni-HEUREfrance2643743.html
à plus de 20s ce qui est énorme pour moi car j’ai des scripts qui sont quasi à la seconde près pour rechercher des data financières de puis Reuters.
Comment remédier à ces décalages imprévisibles ?
Merci les gars,
29 janvier 2013, 17h24 ·Ares_XL
Il semble que sur Débian la commande « tzconfig » soit dépréciée
et remplacée par :
« dpkg-reconfigure tzdata »
elle donne accès à une interface pseudo graphique qui pose les même question ! (secteur géographique mondial, suivie de la ville).
Test sur Rasbian V3.18.7 (12/02/2015)
4 avril 2015, 11h01 ·