This page permanently redirects to gemini://dryusdan.space/installer-un-cluster-proxmox-ceph-tinc-openvswitch/.
2019-07-25
Dans le monde de l'informatique, il existe des concepts afin de réduire le plus possible les coupures (appelées aussi downtime). Il s'agit de la redondance. Car oui, pour certaines entreprises, il est indispensable de ne pas avoir la moindre coupure car c'est un gros manque à gagner.
La redondance, alias le cloud pour certains commerciaux, est un mot magique qui ne doit rien coûter. Cette croyance pousse tout le monde à utiliser des clouds publiques type AWS, Azure, Google Cloud avec comme fausse croyance que les hyperviseurs ne tombent jamais en panne. (Pro tips : si vous ne cochez pas la case « Multi AZ » sur AWS vous n'avez pas de redondance et cocher cette case multiplie la facture par, au minimum, 2).
On peut effectuer cette redondance sur plusieurs niveaux :
Vous pouvez bien entendu ne pas tout redonder, cela dépend du niveau de criticité d'une coupure ainsi que de votre porte monnaie.
Une autre solution pour réduire les pannes à moindre coût est de mettre en place un cluster hyperconvergé. Bien entendu ce genre de solution n'est pas intégralement redondant si l'AS tombe. Cependant, ça réduit drastiquement le coût de l'architecture, moyennant des coupures de 30 secondes si un des noeuds tombe en panne et que l'application derrière n'est pas redondée.
L'hyper-convergence (ou hyperconvergence) est un type d'architecture matérielle informatique qui agrège de façon étroitement liée les composants de traitement, de stockage, de réseau et de virtualisation de plusieurs serveurs physiques. (source Wikipédia (oui, j'ai copié la première ligne, mais c'était bien expliqué :p ))
=> Wikipédia
Avantages
Inconvénients
Avantages
Inconvénients
Comme vous avez pu le voir dans le titre, l'infrastructure finale sera composée de :
Chaque choix a été constitué après mûre réflexion et de nombreux tests. Bien entendu, il est possible d'utiliser des outils similaires pour effectuer cela.
Le gros souci que j'ai rencontré c'est qu'avec des disques qui tournent à 7200 tours minutes, Mastodon et PostgreSQL passaient leur temps à écrire sur les disques. Cela était répliqué sur les trois disques avec Ceph et je me suis retrouvé dans la même situation qui m'a poussé à séparer PostgreSQL et Mastodon (les IO étaient tous utilisés par ces deux logiciels).
Pour cet article nous avons besoin de :
Bien entendu, si vous avez plusieurs interfaces réseaux physiques, vous pouvez retirer le VPN qui est mis en place ici uniquement dans le but d'avoir un réseau privé. Si vous avez également plus de deux disques par machine, vous pouvez dédier les autres à Ceph (dans d'autre pool par exemple). Rien ne vous l'empêche ;)
Bah oui, on ne commence jamais sans avoir d'idée claire de ce qu'on va faire ;)
Voici à quoi va ressembler l'infrastructure après ce tuto.
=> Infra-DryCat
N'ayant pas la possibilité d'insérer une clé USB dans le serveur, j'ai choisi d'installer une Debian sur un disque (avec comme taille totale 128Go) puis j'ai installé Proxmox en suivant le tuto prévu pour Stretch mais en remplaçant Stretch par Buster.
echo "deb http://download.proxmox.com/debian/pve buster pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list gpg --keyserver keyserver.ubuntu.com --recv-keys 7BF2812E8A6E88E0 gpg --armor --export 7BF2812E8A6E88E0 | apt-key add - apt update && apt dist-upgrade apt install proxmox-ve postfix open-iscsi apt remove os-prober reboot
On fait maintenant porter l'adresse IP du serveur par vmbr0 en mode bridge
source /etc/network/interfaces.d/* auto lo iface lo inet loopback iface lo inet6 loopback iface enp2s0 inet6 static address 2a01:4f8:161:2269::2 netmask 64 gateway fe80::1 auto enp2s0 iface enp2s0 inet static address 5.9.38.80 netmask 255.255.255.224 gateway 5.9.38.65 pointopoint 5.9.38.65 # route 148.251.14.32/27 via 148.251.14.33 up route add -net 5.9.38.64 netmask 255.255.255.224 gw 5.9.38.65 dev enp2s0 auto vmbr0 iface vmbr0 inet static address 5.9.38.80 netmask 255.255.255.255 bridge_ports none bridge_stp off bridge_fd 0 up ip route add 148.251.96.193/32 dev vmbr0
De ce fait, on voit la carte réseau et on peut la gérer sur Proxmox (pour, à l'avenir, installer pfSense)
Afin de faire détecter les interfaces VPN par Proxmox, on va créer des bridges qui pointeront avec sur des cartes dummy. Pour cela, il faut d'abord activer le module sur Linux.
echo "options dummy numdummies=3" > /etc/modprobe.d/dummy.conf modprobe dummy
On va maintenant s'attaquer à Tinc avec la création d'un réseau admin pour l'administration (réseau dédié à Ceph et Proxmox) et un réseau pour OpenVSwitch. Vous pouvez ne faire qu'un seul réseau, j'ai préféré faire deux réseaux juste pour séparer les flux.
apt install tinc # On crée les dossiers nécessaires mkdir -p /etc/tinc/{admin,ovps}/hosts # On crée les fichiers nécessaires touch /etc/tinc/{admin,ovps}/{tinc.conf,tinc-up,tinc-down} # On modifie ce fichier sur tous les serveurs : vim /etc/tinc/admin/tinc.conf
Et dans ce fichier, on met :
# Interface réseau à utiliser. On utilise le protocole TAP ( https://en.wikipedia.org/wiki/TUN/TAP ) Interface = tap0 # Pour activer tap (https://www.tinc-vpn.org/documentation/tinc.conf.5) Mode=switch Port = 655 # Pas de caractères spéciaux Name=proxmox3 AddressFamily=ipv4 ConnectTo=proxmox1 ConnectTo=proxmox2
Comme vous l'aurez compris, la valeur de la directive
Name
change entre chaque serveur et donc les directives
ConnectTo
aussi. On génère ensuite la clé privée et la clé publique nécessaires au bon fonctionnement de Tinc
tincd -n admin -K4096 vim /etc/tinc/admin/hosts/proxmox3
Au dessus de la ligne
-----BEGIN RSA PUBLIC KEY-----
on ajoute
Address = 5.9.38.80 Subnet = 10.1.0.0/24 Cipher=aes-256-cbc Port = 655
Bien entendu l'adresse change en fonction du serveur. Après avoir installé et modifié ces fichiers sur chacun des serveurs, faites en sorte que chacun possède les trois. Éditez le fichier
tinc-up
#!/bin/sh /usr/sbin/ifconfig tincadminbr0 promisc /usr/sbin/ifconfig $INTERFACE up promisc /usr/sbin/brctl addif tincadminbr0 $INTERFACE /usr/sbin/ifconfig $INTERFACE 0
Éditez le fichier
tinc-down
#!/bin/sh ifconfig $INTERFACE down
Rendez ces fichiers exécutables. Pour le moment vous ne pourrez pas lancer Tinc, l'interface tincadminbr0 sera créée plus bas.
On va répéter les étapes du dessus en remplaçant admin par ovps, en mettant comme valeur 10.2.0.0/24 à subnet, tap1 comme valeur à interface et 656 pour le port. Si vous souhaitez aller vite, vous pouvez directement passer à l'étape suivante.
apt install tinc touch /etc/tinc/{admin,ovps}/{tinc.conf,tinc-up,tinc-down} # On modifie ce fichier sur tous les serveurs : vim /etc/tinc/ovps/tinc.conf
Et dans ce fichier, on met :
# Interface réseau à utiliser. On utilise le protocole TAP ( https://en.wikipedia.org/wiki/TUN/TAP ) Interface = tap1 # Pour activer tap (https://www.tinc-vpn.org/documentation/tinc.conf.5) Mode=switch Port = 656 # Pas de caractères spéciaux Name=proxmox3 AddressFamily=ipv4 ConnectTo=proxmox1 ConnectTo=proxmox2
Comme vous l'aurez compris, la valeur de la directive
Name
change entre chaque serveur et donc les directives
ConnectTo
aussi. On génère ensuite la clé privée et la clé publique nécessaire au bon fonctionnement de Tinc
tincd -n ovps -K4096 vim /etc/tinc/ovps/hosts/proxmox3
Au dessus de la ligne
-----BEGIN RSA PUBLIC KEY-----
on ajoute
Address = 5.9.38.80 Subnet = 10.2.0.0/24 Cipher=aes-256-cbc Port = 656
Bien entendu l'adresse change en fonction du serveur. Après avoir installé et modifié ces fichiers sur chacun des serveurs, faites en sorte que chacuns possèdent ces trois fichiers. Éditez le fichier
tinc-up
#!/bin/sh /usr/sbin/ifconfig tincovpsbr0 promisc /usr/sbin/ifconfig $INTERFACE up promisc /usr/sbin/brctl addif tincovpsbr0 $INTERFACE /usr/sbin/ifconfig $INTERFACE 0
Éditez le fichier
tinc-down
#!/bin/sh ifconfig $INTERFACE down
Rendez ces fichiers exécutables. Pour le moment vous ne pourrez pas lancer tinc, l'interface tincovpsbr0 sera créée plus bas.
Dans le fichier /etc/network/interfaces, ajoutez les lignes ci dessous :
auto tincadminbr0 iface tincadminbr0 inet static address 10.1.0.1 netmask 255.255.255.0 broadcast 10.1.0.255 bridge_ports dummy1 bridge_stp off bridge_fd 0 auto tincovpsbr0 iface tincovpsbr0 inet static address 10.2.0.1 netmask 255.255.255.0 broadcast 10.2.0.255 bridge_ports dummy2 bridge_stp off bridge_fd 0
Mettez en place cette configuration sur les trois noeuds en faisant en sorte que chaque IP soit unique.
Maintenant, on va installer OpenVSwitch. L'outil n'est pas spécialement compliqué à mettre en place ou à configurer. Il faut cependant avoir quelques notions en réseau pour éviter les mauvaises surprises.
apt install openvswitch-switch
Maintenant, on modifie le fichier /etc/network/interfaces
auto vmbr1 iface vmbr1 inet manual ovs_type OVSBridge up ovs-vsctl set Bridge ${IFACE} rstp_enable=true up ovs-vsctl --may-exist add-port vmbr1 gre0 -- set interface gre0 type=gre options:remote_ip='10.2.0.2' up ovs-vsctl --may-exist add-port vmbr1 gre1 -- set interface gre1 type=gre options:remote_ip='10.2.0.3' down ovs-vsctl --if-exists del-port vmbr1 gre0 down ovs-vsctl --if-exists del-port vmbr1 gre1
L'interface s'appelle vmbr1, elle est de type OVSBridge (compatible avec Proxmox). Au lancement de cette interface, on active le spanning-tree qui permet de calculer la meilleure route à prendre et ainsi couper le port du switch pour éviter les boucles réseaux. On connecte sur ce switch deux "interfaces" utilisant le protocole gre, permettant ainsi la communication des switchs entre eux au travers du réseau.
Avec Proxmox, l'installation et la configuration de Ceph se fait très très facilement.
Sur les trois noeuds :
pveceph install pveceph init --network 10.1.0.0/24
Puis sur le noeud 2 :
pveceph mon create --mon-address 10.1.0.2
Sur le noeud 3 :
pveceph mon create --mon-address 10.1.0.3
Puis de nouveau sur les trois noeuds :
pveceph createmgr pveceph createosd /dev/sdb
Voilà, c'est fini :D J'installe trois managers et trois moniteurs dans le cluster Ceph afin d'éviter le split brain, parce que c'est pas cool quand ça arrive.
Ça je vous laisse faire, si vous partez pour faire de l'hyper convergé, je pense que vous savez installer Proxmox.
Il vous faut pour cette machine :
Le but de CARP sera de faire en sorte que les deux Proxmox partagent leurs configurations.
L'interface WAN portera l'IP failover. L'interface LAN sera la gateway de tout le réseau. Elle sera branchée sur l'OpenVswitch.
L'IP failover chez Hetzner a pour gateway l'IP réel de votre serveur et son adresse MAC. Pour que cela fonctionne, vous devrez taper :
route add -link -net 5.9.38.64 netmask 255.255.255.255 gw
À adapter sur chacun de vos serveurs et de vos hébergeurs.
C'était pas si compliqué, hein ? ;) Bien entendu, si vous avez des questions, n'hésitez pas.
Photo de couverture : Taylor Vick
=> Taylor Vick
=> 🏠 Home This content has been proxied by September (3851b).Proxy Information
text/gemini