===== Expérimentation avec Ceph ===== 2 IP/machine avec 2 réseaux Sur chaque machine, deux disques : un pour le système et un pour ceph. On prend des disques tous de la même taille pour ceph. ==== Mise en place du réseau ==== Problème : relier ces 3 machines en triangle ? {{ :wiki:divers:coin_geek:schema_tours.png|}} Chaque machine possède trois interfaces : une avec un IP dans le 103, et deux autres utilisées pour relier les machines entre elles. Sur chaque machine, on va créer un "switch virtuel" (//bridge//) pour associer à ces deux interfaces une seule et même IP. Pour cela, on utilise la configuration suivante dans /etc/network/interfaces : # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto enp0s25 iface enp0s25 inet static address 192.168.103.25 netmask 255.255.255.0 gateway 192.168.103.1 auto enp1s0f0 iface enp1s0f0 inet manual pre-up ip link set dev $IFACE up pre-down ip link set dev $IFACE down auto enp1s0f1 iface enp1s0f1 inet manual pre-up ip link set dev $IFACE up pre-down ip link set dev $IFACE down auto br0 iface br0 inet static bridge_ports enp1s0f0 enp1s0f1 address 192.168.1.3 netmask 255.255.255.0 Afin d'éviter la tempête de broadcast, on ajoute des règles ebtables permettant de filtrer le trafic passant par le bridge. De plus, on souhaite que chaque machine communique avec la machine voisine sans passer par une autre intermédiaire. Par exemple, tiplouf doit communiquer avec ouisticram sans passer par tortipousse. Pour cela, on empêche toute communication entre les deux interfaces des bridges, ce qui s'écrit à l'aide des règles suivantes, avec iface1 et iface2 les noms des interfaces correspondantes : ebtables -A FORWARD -i iface1 -o iface2 -j DROP ebtables -A FORWARD -i iface2 -o iface1 -j DROP Afin de garder ces changements permanents, même après un redémarrage, on utilise le script suivant (nommé config.sh) : #! /bin/bash # prend en argument le nom des deux interfaces concernées if [ $# -ne 2 ]; then echo "./config iface1 iface2" exit 1 fi ebtables -A FORWARD -i $1 -o $2 -j DROP ebtables -A FORWARD -i $2 -o $1 -j DROP On ajoute l'appel à ce script dans /etc/rc.local pour qu'il soit exécuté au démarrage. Une autre méthode consiste à sauvegarder la configuration ebtables et à la recharger au démarrage à l'aide des commandes suivantes, la deuxième peut être ajoutée dans le rc.local : EBTABLES_ATOMIC_FILE=/root/ebtables-atomic ebtables --atomic-save EBTABLES_ATOMIC_FILE=/root/ebtables-atomic ebtables --atomic-commit Afin d'assurer la bonne installation de Ceph, on ajoute dans le fichier /etc/environment export http_proxy="http://192.168.103.61:82" export https_proxy="https://192.168.103.61:82" C'est utile lorsqu'on utilise ''%%ceph-deploy install tortipousse ouisticram tiplouf%%''... La commande se lance sur une des trois machines et installe les paquets sur toutes les autres, qui ne peuvent pas les télécharger si les proxys ne sont pas exportés. ==== Installation de Ceph ==== Tout se passe par ici : [[ http://docs.ceph.com/docs/mimic/start/ ]]. === Prérequis === [[ http://docs.ceph.com/docs/mimic/start/quick-start-preflight/ ]] On ajoute le repository de Ceph dans les sources (([[ http://docs.ceph.com/docs/master/install/get-packages/#debian-packages ]])) pour installer ceph-deploy. Si nécessaire, on l'ajoute à la main dans /etc/apt/sources.list.d/ceph.list sudo apt-add-repository 'deb https://download.ceph.com/debian-luminous/ stretch main' Il est ensuite nécessaire d’installer NTP sur chaque nœud, pour cela, on se réfère à cette page du wiki : [[ https://wiki.minet.net/wiki/services/ntp ]]. Sur chaque machine, on génère des clés SSH, qu'on laisse sans mot de passe, et on copie la clé publique sur chaque nœud. ssh-keygen -t rsa ssh-copy-id [USER]@[SERVER] Ensuite, on ouvre les ports nécessaires à la communication entre les machines(([[ http://docs.ceph.com/docs/mimic/start/quick-start-preflight/#open-required-ports ]])), et surtout **ne pas s'occuper des règles firewalld** (qui ne sont pas compatibles avec ebtables) : * pour les moniteurs (//mon//) : sudo iptables -A INPUT -i {iface} -p tcp -s {ip-address}/{netmask} --dport 6789 -j ACCEPT * pour les OSD : sudo iptables -A INPUT -i {iface} -p tcp -s {ip-address}/{netmask} --dport 6800:7300 -j ACCEPT Pour rendre ces règles permanentes, on installe le paquet ''%%iptables-permanent%%''. On rajoute également dans /etc/hosts le nom des machines et leur IP : 192.168.103.25 tiplouf 192.168.103.26 tortipousse 192.168.103.35 ouisticram Afin de préparer les disques de stockage, ici /dev/sdb : parted -s /dev/sdb mklabel gpt mkpart primary xfs 0% 100% reboot mkfs.xfs /dev/sdb -f === Créer un cluster Ceph de 3 machines === Il suffit de suivre : [[ http://docs.ceph.com/docs/mimic/start/quick-ceph-deploy/ ]] Pour spécifier le //public network// dans le fichier ceph.conf(([[ http://docs.ceph.com/docs/master/rados/configuration/network-config-ref/]])) : public_network = 192.168.103.0/24 cluster_network = 192.168.1.0/24 Pour installer la bonne version de Ceph à installer, utiliser plutôt ceph-deploy install --release=luminous tiplouf tortipousse ouisticram Au final, on a un mon et un OSD sur chaque machine.