Pour les besoins du test de charge OpenLDAP, nous devons disposer de deux serveurs capables de contenir une base de 10 millions d’entrées, en réplication multi-master, dans les meilleures conditions.
Cela suppose de pouvoir faire varier les tailles mémoire, CPU et disque de ces serveurs, ce que permet de faire OpenStack assez simplement.
Création des instances
Nous avons donc besoin de deux serveurs pour faire nos tests.
Bénéficiant d’une infrastructure basée sur OpenStack, il est assez simple de créer des instances disposant de taille mémoire et de disques que nous utiliserons temporairement.
Le besoin
Les serveurs vont être testés avec des tailles mémoire allant de 2Gb à 32Gb de mémoire.
Les disques seront des SSD, et chaque serveur disposera de deux volumes, un pour le système (50Go) et l’autre pour les données (150Gb).
Du point de vue réseau, la connexion aura une capacité de 10Gbs, ce qui est largement suffisant.
Création du réseau
On va faire simple et déclarer un réseau, auquel seront associés les 2 serveurs, chacun disposant d’une IP flottante.
Généralement, il est préférable de créer un bastion par lequel passent toutes les requêtes vers les serveurs du réseau, de façon à n’utiliser qu’une seule IP flottante. Les IPs étant des ressources rares, c’est plutôt cette approche qui est à privilégier.
La création du réseau se fait en cliquant sur le menu réseau à gauche de l’écran :

puis en cliquant sur le bouton Créer réseau en haut à droite :

Cela ouvre une fenêtre avec trois onglets, où l’on donnera un nom au nouveau réseau :

Puis on configure le sous-réseau, en indiquant le réseau et son masque, ainsi que la passerelle :

On termine avec le dernier écran où l’on clique sur le bouton Créer :

Le réseau créé apparaît dans la liste des réseaux :

On peut le voir sur la topologie réseau, en vert, mais non rattaché :

Il nous faut maintenant créer un routeur qui va permettre d’accéder aux machines qui vont être rattachées à ce réseau de l’extérieur. On clique sur le menu routeur puis sur le bouton Créer un routeur en haut à droite de l’écran :

Cela ouvre une fenêtre où l’on indique le nom du routeur et le réseau externe, qui est ici provider :

Une fois validé, on retrouve le routeur nouvellement créé dans la liste des routeurs existants.

Il faut maintenant relier le réseau précédemment créé à ce routeur, ce qui nécessite de sélectionner le routeur que l’on vient de créer :

On rajoute une interface en sélectionnant l’onglet interfaces :

et en cliquant sur le bouton ajouter interface en haut à droite. Cela ouvre la fenêtre suivante :

On sélectionne le réseau que l’on a créé plus tôt dans la partie sous réseau et on valide. La nouvelle interface apparaît alors dans la liste :

Si on consulte à nouveau la topologie du réseau, on voit que le réseau provider qui permet de se connecter de l’extérieur est maintenant relié au sous-réseau que l’on a créé (en vert).

On finalise en créant un groupe de sécurité pour autoriser les flux entrants nécessaires sur les ports SSH et LDAP/LDAPS.
On crée un groupe de sécurité :

La liste des flux entrants et sortants autorisés apparaît :

Il n’y a que deux lignes, on rajoute les ports 10389 et 10636 respectivement pour les flux LDAP et LDAPS. En cliquant sur le bouton Ajouter une règle en haut à droite, une fenêtre s’ouvre dans laquelle on précise le port à autoriser, ici 10389 :

On fait de même pour la règle LDAPS, avec le port 10636.
La nouvelle liste contient maintenant 4 règles :

Tout est en place pour créer les instances.
Création des instances
Pour créer une instance, on sélectionne le menu Instances :

Cela affiche la liste des instances existantes et permet d’en créer de nouvelles, en cliquant sur le bouton Lancer une instance en haut à droite :

Sur la gauche de la fenêtre qui s’affiche apparaît la liste des options de configuration :

Dans Détails, on doit renseigner le nom de l’instance (ici, openldap3) :

Il faut maintenant définir une source ou image de démarrage. Ce n’est pas tellement différent d’une image Docker, il s’agit d’images d’OS prédéfinies. Par contre, on il faut préciser une taille de volume de 50Go, pour avoir de la place pour les logs :

Puis parmi les images disponibles (en bas de la fenêtre), sélectionner l’image Debian 12 :

On constate qu’il y a un choix important, parce qu’on a créé des images types pour différents cas d’usage. Encore une fois, cela correspond à ce que l’on peut faire sur Docker, où l’on crée son image avant de la charger.
Ensuite on détermine le gabarit à utiliser.

Chaque gabarit va associer à l’instance une taille mémoire (de 1Gb à 32Gb dans notre cas), une taille de disque, et un nombre de VCPUs.
Dans notre cas, on va sélectionner le gabarit small, donc avec 8Gb de mémoire, 2 VCPUs et 50Gb de disque :

Cette taille de machine est amplement suffisante pour nos premiers tests et il est très simple de changer de gabarit plus tard (ce que nous ferons).
On doit ensuite définir le réseau à utiliser. Cette configuration a été effectuée au préalable. Ici on va donc choisir le réseau test openldap network :

On aborde maintenant la définition des ports réseaux pour passer à la gestion des groupes de sécurité.
Ceux-ci ont également été définis au préalable et concernent les ouvertures de flux. Dans le cas qui nous intéresse, à part le port 22, le port 10389 (LDAP) et 10636 (LDAPS). Ce ne sont pas les ports standard LDAP, mais cela n’a pas d’importance.
Ici, on sélectionne le groupe test openldap et le groupe default.

Si vous n’avez pas défini de paire de clés pour accéder en SSH sur les serveurs, c’est le moment de le faire.

Le plus simple est d’importer une clé existante :

Au final, on peut lancer l’instance qui sera listée sur l’ensemble des instances existantes, ce qui prendra moins d’une minute :

Il nous reste quelques manipulations à effectuer :
- Associer une IP flottante à cette instance pour pouvoir y accéder de l’extérieur.
- Attacher le volume de données.
Pour la déclaration d’IP, on clique sur le menu déroulant à droite de l’instance :

Cela ouvre la fenêtre suivante, où on sélectionne une IP disponible dans la liste :

Une fois validée, le serveur disposera de deux IP, l’une associée au réseau créé plus haut et une seconde pour accéder au serveur de l’extérieur :

On peut immédiatement vérifier qu’on a bien accès au serveur :

Il faut effectuer la même manipulation pour créer le second serveur.
Une fois que les deux serveurs ont été créés, il ne reste qu’à créer un volume pour y stocker les données.
Déclaration des volumes de données
Pour créer un volume, on sélectione le menu Volumes à gauche :

On va créer un volume dédié aux données, d’une taille de 150Go. Pour cela, il faut cliquer sur le bouton Créer le volume en haut à droite de la page :

Cela ouvre une fenêtre où il faut donner un nom au volume créé et indiquer la taille de celui-ci :

Le volume ainsi créé et apparaît sur la liste des volumes :

On note que le volume de données n’est pas attaché au serveur : on va l’attacher en cliquant sur l’action Gérer les attachements sur la ligne du volume de données :

Une fenêtre s’ouvre qui permet d’associer ce volume avec le serveur OpenLdap3, que l’on choisit dans la liste déroulante :

Il faut maintenant monter ce volume sur le serveur.
Cette opération se fera par l’exécution des commandes suivantes (avec sudo).
Tout d’abord, on vérifie que le volume est bien visible sur la machine :
$ sudo fdisk -l
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 8A893502-D7FC-F84F-ADAD-D8B2BE8DFD53
Device Start End Sectors Size Type
/dev/vda1 262144 104857566 104595423 49.9G Linux filesystem
/dev/vda14 2048 8191 6144 3M BIOS boot
/dev/vda15 8192 262143 253952 124M EFI System
Partition table entries are not in disk order.
Disk /dev/vdb: 150 GiB, 161061273600 bytes, 314572800 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Il s’agit du disque /dev/vdb, qu’il faut maintenant monter. La première étape consiste en la création d’une partition. Ici, on utilise tout le disque, à savoir /dev/sdb.
On utilise la commande fdisk pour cela, en trois étapes :
- création d’une partition (commande n)
- de type primaire (command p), avec une sélection de tous les secteurs du disque
- et une écriture des informations (commande w)
$ sudo fdisk /dev/vdb
Welcome to fdisk (util-linux 2.38.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS (MBR) disklabel with disk identifier 0xeccb696d.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-314572799, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-314572799, default 314572799):
Created a new partition 1 of type 'Linux' and of size 150 GiB.
Command (m for help): p
Disk /dev/vdb: 150 GiB, 161061273600 bytes, 314572800 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xeccb696d
Device Boot Start End Sectors Size Id Type
/dev/vdb1 2048 314572799 314570752 150G 83 Linux
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
$
La partition est visible en utilisant la commande fdisk :
$ sudo fdisk -l
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 8A893502-D7FC-F84F-ADAD-D8B2BE8DFD53
Device Start End Sectors Size Type
/dev/vda1 262144 104857566 104595423 49.9G Linux filesystem
/dev/vda14 2048 8191 6144 3M BIOS boot
/dev/vda15 8192 262143 253952 124M EFI System
Partition table entries are not in disk order.
Disk /dev/vdb: 150 GiB, 161061273600 bytes, 314572800 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xeccb696d
Device Boot Start End Sectors Size Id Type
/dev/vdb1 2048 314572799 314570752 150G 83 Linux
Pour pouvoir utiliser cette partition, il faut ensuite la formater. On utilise le format EXT2 qui est le plus performant pour OpenLDAP :
$ sudo mkfs.ext2 /dev/vdb1
mke2fs 1.47.0 (5-Feb-2023)
Discarding device blocks: done
Creating filesystem with 39321344 4k blocks and 9830400 inodes
Filesystem UUID: cd49addc-4e52-424d-b912-b5c849b3fc1a
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
Il faut maintenant monter cette partition sur le répertoire cible, qui sera dans notre cas /usr/local/openldap/data. Il faut avant tout s’assurer que ce répertoire existe, ou bien le créer.
Le plus simple est au préalable d’installer OpenLDAP-LTB, pour créé ce répertoire.
La commande est la suivante :
$ sudo mount /dev/vdb1 /usr/local/openldap/data
$ df -kh
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 794M 700K 794M 1% /run
/dev/vda1 50G 1.7G 46G 4% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/vda15 124M 12M 113M 10% /boot/efi
tmpfs 794M 0 794M 0% /run/user/1000
/dev/vdb1 148G 24K 141G 1% /usr/local/openldap/data
On voit que le répertoire de données /usr/local/openldap/data est bien présent.
Une dernière chose : si on veut que le montage soit visible à chaque redémarrage, il faut rajouter la ligne suivante au fichier /etc/fstab :
/dev/vdb1 /usr/local/openldap/data ext2 defaults 0 0
Il faut enfin reproduire cette création de volume pour le second serveur.
On en a terminé avec la création de notre environnement de test.
La deuxième étape de notre test, concernant le test en lui-même, est à retrouver dans l’article Un test de charge de réplication OpenLDAP