OpenSearch configuration
La mise en place de cluster OpenSearch est simplifiée par Docker. On peut facilement récupérer des images depuis Docker Hub (lien) et le mettre rapidement en place avec docker-compose. Docker permet même d’aller plus loin en créant une Stack personnalisée avec des services supplémentaires.
1. Installation de Docker et de docker-compose

2. Configuration des paramètres du serveur Linux
Pour assurer un bon fonctionnement en production, il faut modifier certains paramètres de votre système :
Désactivez le pagination de la mémoire et le swap sur l’hôte
Cette modification vise à améliorer les performances.
Exécutez la commande suivante sur votre host :
sudo swapoff -a
Augmentez le nombre de mappages mémoire disponibles
# Edit the sysctl config file sudo vi /etc/sysctl.conf # Add a line to define the desired value # or change the value if the key exists, # and then save your changes. vm.max_map_count=262144 # Reload the kernel parameters using sysctl sudo sysctl -p # Verify that the change was applied by checking the value cat /proc/sys/vm/max_map_count
3. Télécharger les images Docker de OpenSearch
docker pull opensearchproject/opensearch:2
docker pull opensearchproject/opensearch-dashboards:2Comment fonctionnent le cluster ?
Dans OpenSearch, un cluster est un ensemble de nœuds qui travaillent ensemble pour stocker, indexer et rechercher des données.
Un nœud est une instance individuelle d’OpenSearch. Chaque nœud peut remplir différents rôles :
- Master node : coordonne le cluster, gère l’organisation et les métadonnées.
- Data node : stocke les données et exécute les recherches.
- Ingest node : pré-traite les données avant leur stockage.
- Coordinator node : reçoit les requêtes et les répartit entre les autres nœuds.
Tous les nœuds du cluster communiquent entre eux pour partager les tâches. Cette organisation permet :
- Une haute disponibilité : si un nœud tombe en panne, les autres prennent le relais.
- Une scalabilité : on peut ajouter des nœuds pour gérer plus de données ou de requêtes.
Dans un environnement Docker, chaque conteneur OpenSearch représente un nœud. Finalement, chaque nœud sais comment traiter ou redistribuer les requêtes.
Plus d’infos sur
opensearchproject/opensearch:2Cette image définit le moteur de recherche et d'analyse, qui est basé sur Elasticsearch.
Il gère :
- le stockage,
- les requêtes de recherche (via API REST),
- les index,
- la gestion des données,
- les ingestions de données
C’est conteneur créé via cette image qui fait tourner les nœuds du cluster OpenSearch.
Plus d’infos sur
opensearchproject/opensearch-dashboards:2C’est l’interface graphique pour OpenSearch.
Elle permet de :
- visualiser les données,
- créer des dashboards,
- faire des requêtes visuelles,
- gérer les utilisateurs, index patterns, etc.
Tester la configurations
Lancer le container:
# Password requires a minimum of 8 characters and must contain at least one uppercase letter, one lowercase letter, one digit, and one special character. docker run -d -p 9200:9200 -p 9600:9600 \ -e "discovery.type=single-node" \ -e "OPENSEARCH_INITIAL_ADMIN_PASSWORD=AaBbCcDd1234!" \ opensearchproject/opensearch:latestEnvoyer une requête de test :
curl https://localhost:9200 -ku admin:AaBbCcDd1234!Réponse type
{ "name" : "a937e018cee5", "cluster_name" : "docker-cluster", "cluster_uuid" : "GLAjAG6bTeWErFUy_d-CLw", "version" : { "distribution" : "opensearch", "number" : <version>, "build_type" : <build-type>, "build_hash" : <build-hash>, "build_date" : <build-date>, "build_snapshot" : false, "lucene_version" : <lucene-version>, "minimum_wire_compatibility_version" : "7.10.0", "minimum_index_compatibility_version" : "7.0.0" }, "tagline" : "The OpenSearch Project: https://opensearch.org/" }
4. Créer un cluster OpenSearch avec docker-compose
Pour déployer un cluster OpenSearch avec Docker, il est beaucoup plus simple d’utiliser Docker Compose avec un fichier YAML plutôt que de créer manuellement les conteneurs un par un. Ce fichier, appelé Docker Compose file, définit tout l’environnement (services, réseaux, volumes) et permet à Docker Compose de gérer automatiquement le cluster. Par défaut, Docker Compose cherche un fichier nommé docker-compose.yml, docker-compose.yaml, compose.yml ou compose.yaml dans le répertoire courant, mais il est possible de spécifier un autre fichier avec l’option -f. Un exemple classique de fichier docker-compose.yml crée un cluster avec deux nœuds OpenSearch et un conteneur OpenSearch Dashboards, connectés via un réseau interne (opensearch-net) et utilisant des volumes pour stocker les données de chaque nœud. Cet exemple, conçu pour les tests et le développement, utilise une configuration de sécurité par défaut avec des certificats TLS auto-signés et des utilisateurs internes prédéfinis.
4.1 Mot de passe admin
Pour commencer, il faut configurer le mot de passe administrateur :export OPENSEARCH_INITIAL_ADMIN_PASSWORD=AaBbCcDd1234!
Ensuite, on créé un fichier .env avec le mot de passe administrateur :
echo "OPENSEARCH_INITIAL_ADMIN_PASSWORD=AaBbCcDd1234!" > ./.env
4.2 Fichier docker-compose.yml type
docker-compose.yml
services: opensearch-node1: # This is also the hostname of the container within the Docker network (i.e. https://opensearch-node1/) image: opensearchproject/opensearch:latest # Specifying the latest available image - modify if you want a specific version container_name: opensearch-node1 environment: - cluster.name=opensearch-cluster # Name the cluster - node.name=opensearch-node1 # Name the node that will run in this container - discovery.seed_hosts=opensearch-node1,opensearch-node2 # Nodes to look for when discovering the cluster - cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2 # Nodes eligible to serve as cluster manager - bootstrap.memory_lock=true # Disable JVM heap memory swapping - "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" # Set min and max JVM heap sizes to at least 50% of system RAM - OPENSEARCH_INITIAL_ADMIN_PASSWORD=${OPENSEARCH_INITIAL_ADMIN_PASSWORD} # Sets the demo admin user password when using demo configuration, required for OpenSearch 2.12 and later ulimits: memlock: soft: -1 # Set memlock to unlimited (no soft or hard limit) hard: -1 nofile: soft: 65536 # Maximum number of open files for the opensearch user - set to at least 65536 hard: 65536 volumes: - opensearch-data1:/usr/share/opensearch/data # Creates volume called opensearch-data1 and mounts it to the container ports: - 9200:9200 # REST API - 9600:9600 # Performance Analyzer networks: - opensearch-net # All of the containers will join the same Docker bridge network opensearch-node2: image: opensearchproject/opensearch:latest # This should be the same image used for opensearch-node1 to avoid issues container_name: opensearch-node2 environment: - cluster.name=opensearch-cluster - node.name=opensearch-node2 - discovery.seed_hosts=opensearch-node1,opensearch-node2 - cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2 - bootstrap.memory_lock=true - "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" - OPENSEARCH_INITIAL_ADMIN_PASSWORD=${OPENSEARCH_INITIAL_ADMIN_PASSWORD} ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 volumes: - opensearch-data2:/usr/share/opensearch/data networks: - opensearch-net opensearch-dashboards: image: opensearchproject/opensearch-dashboards:latest # Make sure the version of opensearch-dashboards matches the version of opensearch installed on other nodes container_name: opensearch-dashboards ports: - 5601:5601 # Map host port 5601 to container port 5601 expose: - "5601" # Expose port 5601 for web access to OpenSearch Dashboards environment: OPENSEARCH_HOSTS: '["https://opensearch-node1:9200","https://opensearch-node2:9200"]' # Define the OpenSearch nodes that OpenSearch Dashboards will query networks: - opensearch-net volumes: opensearch-data1: opensearch-data2: networks: opensearch-net:
4.3 Administrer le cluster
Lancer les containers : docker compose up -d
Arrêter le cluster : docker compose down
Supprimer les containers : docker container prune
Vérifier les processus en cours : docker compose ps
Afficher les logs d’un container : docker compose logs <serviceName>
Se connecter au cluster : http://localhost:5601 / http://server_ip:5601
5. Sécurité
Pour cette partie, il est plus prudent d’aller directement voir la documentation de OpenSearch, qui contient d’ailleurs une section spécifique sur ce point :
- Documentation : https://docs.opensearch.org/docs/latest/install-and-configure/install-opensearch/docker/#configuring-basic-security-settings
- Partie sécurité : https://docs.opensearch.org/docs/latest/security/configuration/index/