PROJET AUTOBLOG


Shaarli - Les discussions de Shaarli

Archivé

Site original : Shaarli - Les discussions de Shaarli du 23/07/2013

⇐ retour index

NTP : où ? Quelle structuration au sein de votre réseau ? Quels serveurs de référence utiliser ? Comment debug ? Comment monitorer ?

samedi 7 novembre 2015 à 17:14
GuiGui's Show - Liens
Quand on gère une infra, il est important que le temps soit exact. Ça facilite grandement la compréhension des logs et leur corrélation pour debug un problème et ça garantit la fiabilité des informations qui peuvent être demandées en cas de réquisition judiciaire (dans le cas  d'un FAI/FSI).

Où installer des NTPd ?
On installe un NTPd sur chaque machine physique de l'infra. Ça, c'est du classique, du bien connu.

Faut-il un NTPd dans une VM ? On lit de tout sur le web et on entend de tout AFK. Je n'ai pas de VM sur mes serveurs, seulement du LXC donc je ne me suis jamais construit un avis. Par contre, j'ai pu me construire un avis en étudiant l'infra d'ARN (FAI associatif en Alsace) : au boot (ou pause/resume) la VM se sync avec l'horloge matérielle émulée par KVM... mais rien ne l'empêche de dériver durant son fonctionnement. Et en quelques mois, on s'est retrouvé avec les hyperviseurs synchronisés et les machines virtuelles désynchronisées... On parle quand même de plusieurs minutes...

Faut-il un NTPd dans un LXC ? Non, car le noyau est partagé entre l'hôte et tous les LXC. De plus, LXC ne donne pas la permission d'atteindre l'horloge système ni l'horloge matérielle.


Quand on a plusieurs serveurs, c'est une bonne idée de mutualiser un NTPd qui, soit sera la source de temps (avec un module GPS, par exemple), soit sera l'intermédiaire entre tout le réseau et une source de temps extérieure. Mais où installer ce serveur ?

Chez ARN, l'infra repose sur du Ganeti donc nos services sont dans une VM que l'on peut migrer d'un hyperviseur à l'autre en cas de panne/maintenance. Plus précisément, nous avons deux VM : une pour les services que nous exposons à l'extérieur (site web, récursif DNS, mail,...) et une pour les services internes, réservés aux abonnés. Chaque service se trouve dans un LXC sur une de ces VMs. Naturellement, c'est donc dans un LXC sur la VM "services internes" que nous avons installés le NTPd... et découvert que LXC ne donne pas la permission d'attaquer l'horloge matérielle... donc le serveur n'arrive pas à corriger l'horloge et finit par se croire désynchronisé et donc il ne permet plus de synchroniser les NTPd qui se connectent à lui...

Mettre le NTPd directement dans la VM ? C'est la deuxième chose que nous avons tenté. Sauf que la gigue fluctue trop et amène le NTPd à se croire désynchronisé et à ne plus pouvoir synchroniser les NTPd qui se connectent à lui. Cette différence peut avoir deux causes : une grande fluctuation de la latence réseau ou le fait que l'horloge dérive/fluctue très vite/trop entre deux mesures... Dans notre cas, c'était la deuxième cause. Un fait intéressant : si l'on cesse de synchroniser les NTPd installés sur les hyperviseurs sur le NTPd situé dans la VM alors la gigue est correcte et le NTPd dans la VM fait son boulot.

Au final, les deux hyperviseurs sont devenus les serveurs de temps de notre réseau et toutes nos VMs sont synchronisées dessus. Ça juste marche. Voir : http://www.linux-kvm.org/page/FAQ#I.27m_experiencing_timer_drift_issues_in_my_VM_guests.2C_what_to_do.3F


Quels serveurs de temps extérieurs utiliser ?
J'ai pour habitude d'utiliser ntp-p1.obspm.fr et canon.inria.fr. Pourquoi pas fr.pool.ntp.org ? Car les deux serveurs que j'ai cité sont des serveurs de strate 1 avec comme référence une horloge atomique pour le premier et un récepteur GPS pour le second. L'autre inconvénient technique est décrit ici : http://www.guiguishow.info/2011/08/24/installer-un-serveur-ntp-sur-openwrt/#toc-1908-ignore-versus-serveur-de-strate-2


Quelles commandes pour debug ?
   * ntpstat : simple et clair, elle affiche l'état du serveur (synchro/désynchro), à quel serveur le ntpd est synchronisé, la root dispersion (https://serverfault.com/questions/184257/seemingly-poor-quality-of-ntp-time-synchronization-using-a-gps-clock) et l'intervalle de temps selon lequel le ntpd communique avec le serveur. Seul défaut : il n'est pas IPv6-compliant et affiche une IPv4 qui ne correspond à rien quand le ntpd est synchro en IPv6.

   * ntpq -pn / ntpq -c peers : informations sur les pairs : strate, reference, joignabilité, déclage, gigue,...

   * ntpq -c rl : obtenir les variables système dont la root dispersion

   * ntpq -c as puis ntpq -c rv <assid> : différentes infos sur le peer dont les décalages et gigue des mesures
Merci à http://log.or.cz/?p=80 et au serverfault déjà cité.


Avec quoi monitorer un NTPd ?
Je ne voulais pas utiliser un des vieux scripts existant alors que ntpstat va chercher les bonnes infos et les présente de manière compréhensible. Du coup, j'utilise ce script que l'on exécute via SNMP : http://www.guiguishow.info/wp-content/uploads/2015/11/check_ntpstat.sh
(Permalink)