ElasticSearch 103 est un workshop permettant d'expérimenter le scaling sur ElasticSearch.
elasticsearch-103 par Benjamin CAVY, Sébastien PRUNIER et Chris WOODROW est distribué sous les termes de la licence Creative Commons - Attribution - NonCommercial - ShareAlike.
Dans le fichier de configuration
~/progs/elasticsearch-7.10.1/config/elasticsearch.yml
, ajouter la ligne :
node.max_local_storage_nodes: 2
Lancer deux instances elastic dans deux shell différents à l'aide de la commande.
~/progs/elasticsearch-7.10.1/bin/elasticsearch
Les deux instances sont déployées par défaut sur les ports 9200
et 9201
.
Les index elasticsearch sont stockés sur des shards (un index est réparti sur plusieurs shards). Outre les shards "primaires" sur lesquels les données sont stockées, il existe des shards de réplication, servant uniquement à la redondance des données. Par défaut elasticsearch configure pour chaque index 1 shard primaire et 1 shard de réplication.
Comptez le nombre d'acteurs en exécutant la commande :
curl -XGET http://localhost:9200/imdb/_count
Coupez une des deux instances (avec CTRL + C dans un des deux shells), puis exécuter à nouveau cette commande.
On constate qu'il n'y a pas eu de perte de données, car elasticsearch répartit les shards de manières à ce que chaque instance ait :
- des shards primaires
- les shards répliquant les shards primaires de l'autre instance
Relancer l'instance arrêtée, et exécuter la commande suivante :
PUT imdb/_settings
{
"number_of_replicas": 0
}
Cette commande désactive la réplication pour l'index imdb
(ne faite pas ça
chez vous !).
Stoppez une des deux instances (comme lors de l'étape précédente), et comptez le nombre d'acteurs :
curl -XGET http://localhost:9200/imdb/_count
On constate cette fois-ci une perte de données, car les données stockées sur les shards de l'instance arrêtées ne sont plus répliquées sur l'instance restante.