Table des matières

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 ?

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 1) 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 machines2), et surtout ne pas s'occuper des règles firewalld (qui ne sont pas compatibles avec ebtables) :

sudo iptables -A INPUT -i {iface} -p tcp -s {ip-address}/{netmask} --dport 6789 -j ACCEPT
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.conf3) :

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.