Je tombe plus ou moins par hasard sur l'annonce suivante : depuis mi-2018, LINBIT, l'éditeur de DRBD, intègre sa solution de réplication à Kubernetes. Avec l'association de Kubernetes et DRBD on peut monter son propre nuage avec des systèmes de fichiers répliqués. En gros c'est GCE (Google Compute Engine) sur //ton// infrastructure matérielle avec du code aux sources ouvertes.
J'avais déjà raconté mon expérience très positive avec `DRBD 8`. DRBD (Distributed Replicated Block Device) est une solution de réplication de périphérique en mode bloc intégrée au noyau Linux. Pour le prix d'un aller-retour réseau un volume se retrouve répliqué sur la machine d'à côté si on a choisi un fonctionnement primaire-secondaire. Si le disque ou contrôleur disque primaire tombe en panne, le secondaire prend alors le relai. Ça veut dire que n'importe quelle application qui écrit des fichiers se retrouve magiquement dotée d'une fonctionnalité de réplication. DRBD est fantastiquement bien conçu pour que la magie demeure complètement déterministe. À partir de `DRBD 9` on peut mélanger les réplications synchrones et asynchrones, et par exemple ajouter une réplication sur un site distant au fonctionnement précédemment décrit. L'utilisation de périphériques en mode bloc permet plein de bricolages, comme la réplication d'un volume chiffré, ou les instantanés ("snapshots") LVM. Je répète : DRBD est gratuit et les sources sont ouvertes.
Attention DRBD ne fait que de la réplication. Si on veut de la reprise sur panne automatique il faut également se préparer à des cas comme la partition de réseau. Une reprise sur panne naïve qui promeut automatiquement le secondaire en primaire peut se retrouver avec deux primaires qui évoluent indépendemment, exactement ce qu'on cherche à éviter. La solution c'est l'intégration à une solution comme Pacemaker qui garantit l'intégrité d'un groupe même en cas de partition réseau. On s'aperçoit très vite que les notions de groupe, d'état des nœuds et de réplication sont intimement liées.
Kubernetes est une solution d'orchestration pour grappe de serveurs, initialement développée en interne par Google, qui en a par la suite ouvert les sources, afin de promouvoir sa solution d'hébergement GCE qui supporte les descripteurs de déploiement de Kubernetes. Tu dis : je veux 50 serveurs NGINX et 1 MySQL avec 2 réplications et boum, le truc se débrouille pour instancier tout ça et à redémarrer les nœuds qui plantent. En dissociant l'infrastructure de la topologie applicative, Kubernetes met les déploiements massifs à portée de la ménagère de moins de 50 ans. Dans la même gamme que Kubernetes il y a aussi Docker Swarm, sur lequel je n'ai pas d'avis.
Arrivés là on a l'impression que Kubernetes est un super-Pacemaker qui juste oublié de faire ce qui nous intéresse : piloter DRBD. Au passage pourquoi faire du mode bloc si on a du MySQL répliqué ? Mais peut-être qu'on n'a pas envie de payer le surcoût du relationnel quand un système de fichiers suffit. Ou qu'on utilise une bibliothèque de persistance qui veut taper directement dans le système de fichiers. Jusqu'à récemment le périphérique en mode bloc avec réplication orchestrée par Kubernetes n'était possible que sur des infrastructures hébergées comme GCE mais aussi Digital Ocean, lequel a vraisemblablement codé son propre pilote Kubernetes.
Grâce aux efforts de LINBIT on peut maintenant déclarer des volumes DRBD qui seront montés comme des "PersistentVolumes" Kubernetes, avec plein d'options sympathiques. On peut alors déployer dans son propre nuage et maîtriser la localisation de ses données.
== Annexe
La [doc]
L'[annonce officielle]
La page d'accueil de [LINBIT SDS]
Les archives de Techos :
[DRBD (`1/5`) : haute disponibilité avec Linux]
[DRBD (`2/5`) : Périphérique en mode bloc]
[DRBD (`3/5`) : fonctionnement et mise en œuvre]
[DRBD (`4/5`) : Pacemaker]
[DRBD (`5/5`) : conclusion et perspectives]