Piste : infrastructure

Linux - Infrastructure

Voici une liste de conseils que je donne en général à des personnes qui débutent en administration système (qui viennent souvent du monde du développement). Ce sont des conseils qui me sont très personnels.

Nommage

Général

Que ça soit pour des serveurs ou des noms de domaines je conseil toujours de nommer :

  • En minuscule : on ne se prend pas la tête
  • En ascii : pour éviter les soucis sur les systèmes qui ne savent rien gérer d'autre
  • Au singulier : par convention car sinon vous allez vous emmeler
    • Exemple : j'ai déjà eu des infra avec des serveurs nommés database1, databases02, etc. Un enfer.
  • Jamais avec le nom d'une technologie dedans mais plutôt un rôle : le jour où vous en changerai de technologie ça ne sera pas pratique sinon
    • Exemple : nommer un serveur cache1 plutôt que varnish1
  • Ne jamais mettre de zero supplémentaires : vous ignorer ce que sera le futur
    • Exemple : nommer des serveurs simplement front1, front2, front3, etc plutôt que front01, front02 etc car le jour où vous dépassé les 99 serveurs vous êtes mal (et non, la pratique à prouvée que « ça n'arrivera jamais » est faux)

Nommage de serveurs

Il existe 2 grandes familles de nommage pour les serveurs : Pet et Cattle.

Pet consiste à donner des noms uniques mignons à ses serveurs, comme des animaux de compagnie (par exemple tardis, r2d2, bobby, etc).

Cattle consiste à donner des noms pratiques et numérotés, comme du betails (par exemple cache1, front24, database8, etc).

  • Nommez toujours vos serveurs, que ça soit en Pet ou en Cattle
    • Cas pour lesquels je conseil un nommage Pet :
      • Une petite infra personnelle sur laquelle vous êtes seul·e admin
    • Cas pour lequels je conseil un nommage Cattle :
      • Une infra moyenne ou grande
      • Une infra sur laquelle vous n'êtes pas seul·e admin
      • Une infra d'entreprise, collectif ou association
      • De manière générale tout le reste qui n'entre pas dans Pet

Nommage DNS

  • Attribuez un nom de domaine unique à chacun de vos serveurs
    • Exemple : tardis.example.org, database8.production.example.org, etc
  • Utilisez des CNAME pour diriger vos services vers ces serveurs
    • Exemple : blog.example.orgfront1.example.org
    • Bien sur cela ne s'applique pas à l'apex de la zone
  • Pour faire communiquer vos serveurs entre eux, utilisez les noms de domaines plutôt que les IP
    • Vous serez content·e le jour de la grosse migration (celle qui arrive environ tous les 5 ans et dont vous ne savez encore rien)

Cela vous permettra de ne pas avoir plusieurs fois les mêmes infos (adresses IP, etc) dans votre zone DNS et donc d'éviter les erreurs lors de changements, migrations, etc.

Sauvegardes

  • Faites des backup
  • Automatisez vos configurations de backup
  • Monitorez vos backup
  • Testez vos backup

Faites-le maintenant !

Non, pas dans 6 mois, pas quand ça sera « la priorité », pas « quand tout sera bien en place », pas « après la release », pas « après tel truc important », … Maintenant !

Pensez aussi à backup ce que vous envoyez à des services tiers, par exemple votre zone DNS si vous ne l'hébergez pas vous-même (avoir un fichier de zone à plat dans un git que vous modifiez quand vous modifiez la zone chez votre fournisseur), ça vous sera utile en cas de panne ou de perte de données (oui même les professionnelles du secteur peuvent perdre des données).

À titre personnel sur mes infra j'ai tendance à utiliser Borg avec Borgmatic déployés avec un rôle Ansible.

Monitoring

Mettez en place de la surveillance et des alertes.

Mettez-la en place tôt (juste après les sauvegardes logiquement), pour surveiller tout ce qui est important.

Faites-le aussi au fur et à mesure. N'attendez pas la fin du projet, la release ou que sais-je. Ne vous attendez pas non plus à avoir un case Monitoring à cocher dans votre liste : le monitoring se met en place en continu au fur et à mesure que vous ajouter/modifier votre infra.

Ayez le réflexe à chaque fois que vous ajouter quelque chose dans votre infra de l'ajouter aussi à votre monitoring en même temps, pas après car sinon vous ne le ferait jamais. Chaque ajout de composant à votre infra doit comporter une case « Ajouter le monitoring ».

Pour une petite infra de quelques serveurs j'ai tendance à bien aimer Munin, déployé avec 3 rôles Ansible : un serveur, un nœud et un fastcgi.

Automatisation

Automatisez votre infra tant qu'il est encore temps !

Par la suite à chaque ajout d'un composant vous pourrez l'automatiser (d'ailleurs vous devriez déployer sur votre infra que via l'outil d'automatisation). Pensez à bien documenter votre automatisation et à vous y retrouver.

J'ai tendance à aimer Ansible mais il en existe d'autres.

Documentation

Documentez votre infra.

Que ça soit avec des fichiers textes, un wiki, sur git, etc. Documentez votre infra pour savoir où vous en êtes. Aussi pour aider d'éventuelles personnes qui pourraient vous rejoindre.

Vous pouvez avoir un index des serveurs avec leurs infos techniques, leur emplacement géographique, etc.

Vous pouvez aussi documenter la vie de votre infra :

  • Décommissionnement de serveurs
  • Incidents
  • Maintenances
  • Post-mortem avec des détails
  • Base de connaissances

Faites des schemas si besoin.