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 :

Menu réseau

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

Bouton créer réseau

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

Créer un réseau

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

Configuration du sous-réseau

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

Création du réseau

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

Liste des réseaux

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

Topologie du réseau

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 :

Création d'un routeur

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

Nommage du routeur

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

Liste des routeurs

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 :

Configuration du routeur

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

Ajout d'interface routeur

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

Ajout d'interface

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 :

Liste des interfaces

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).

Lien sous-réseau

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é :

Création d'un groupe de sécurité

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

Liste des flux initiaux

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 :

Ajout de la règle LDAP

On fait de même pour la règle LDAPS, avec le port 10636.

La nouvelle liste contient maintenant 4 règles :

Règles complètes

Tout est en place pour créer les instances.

Création des instances

Pour créer une instance, on sélectionne le menu Instances :

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 :

Créer une instance

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

Menu de la création d'instance

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

Nommer une instance

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 :

Utiliser une image

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

Les images disponibles l'image

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.

Choix du gabarit

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 :

Gabarit small

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 :

Définir le réseau

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.

Choix des groupes de sécurité

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.

Gestion des clés SSH

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

Importation d'une clé SSH

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

Lancement de l'instance

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 :

Association d'IP flottante

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

Sélection de l'IP

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 :

Serveur avec 2 IPs

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

Accès au serveur via SSH

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 :

Menu Volumes

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 :

Créer le volume

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

Définir le volume

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

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 :

Gérer les attachements

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

Choisir le serveur les attachements

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