retour appli cel

Gestion des indexes Elasticsearch


Synchronisation automatique des indexes avec le CEL

Les services symfony du CEL alimentent directement l'index ES, mais pour toutes les autres opérations sur les tables occurrence et photos (widgets, del, etc.) des triggers allimentent la base changelog, ensuite une commande symfony lit la table changelog et ajoute/modifie les documents correspondant dans l'index ES.

Cette commande tourne en boucle, dans un while(true) pour qu'il n'y ait pas de lag (les obs ajoutées par un widget sont directement dispos dans le cel).
Un cron se charge de vérifier toute les minutes si la tâche n'a pas planté (lecture du PID).

Script contrôlé par un cron : /home/test/synchro-es-in-a-while-true-controller.sh
Script contrôlé par le controller : /home/test/synchro-es-in-a-while-true.sh

Commandes utiles


Trouver les noms des indexes

Voir dans le fichier .env.local(.*) : FOS_ELASTICA_INDEXES_OCCURRENCES_INDEX_NAME et FOS_ELASTICA_INDEXES_PHOTOS_INDEX_NAME

VĂ©rifier les logs des services Symfony

tail -f /home/test/www/cel2-services/var/log/prod.log

Débloquer les indexes (ex : après un disque plein)

Si on trouve l'erreur du genre ` blocked by: [FORBIDDEN/12/index read-only / allow delete` il faut lancer ça :
curl -X PUT http://10.99.34.13:9200/cel2_photos/_settings -H 'Content-Type: application/json' -d '{
  "index.blocks.read_only_allow_delete": null
}'

curl -X PUT http://10.99.34.13:9200/cel2_occurrences/_settings -H 'Content-Type: application/json' -d '{
  "index.blocks.read_only_allow_delete": null
}'


Lancement manuel

Pour lancer la commande à la main, depuis le répertoire des services du cel :
php bin/console cel:sync-es


Lister les indexes

curl http://10.99.34.13:9200/_aliases?pretty=true

curl http://10.99.34.13:9200/_cat/indices?pretty=true


Consulter un index

curl -X POST -H 'Content-Type: application/json' http://10.99.34.13:9200/cel2_occurrences/_search?pretty -d '{"query":{"bool":{"must":{"match": {"id":3605063}}}}}'


Remplir des index

Pour vider les index et les reremplir à partir des données en base :
bin/console fos:elastica:populate [--ignore-errors]


Vider des index

(ne devrait pas être très utile)
curl -X DELETE 10.99.34.13:9200/cel2_photos/
curl -X DELETE 10.99.34.13:9200/cel2_occurrences/


Sauvegarde et restauration des indexes

#create backup dir on server
mkdir /etc/elasticsearch/backup
chown elasticsearch /etc/elasticsearch/backup

#register backup dir in config
cat >> /etc/elasticsearch/elasticsearch.yml << EOF
path.repo: ["/etc/elasticsearch/backup"]
EOF

#restart ES to take account of new config
systemctl restart elasticsearch

#register backup dir in ES
curl -XPUT 'http://10.99.34.13:9200/_snapshot/full_backup' -H 'Content-Type: application/json' -d '{"type": "fs","settings": {"location": "/etc/elasticsearch/backup","compress": true}}'

#create backup
curl -XPUT 'http://10.99.34.13:9200/_snapshot/full_backup/snapshot_1?wait_for_completion=true'

#list backup
curl -XGET 'http://10.99.34.13:9200/_snapshot/full_backup/_all?pretty'

#restore backup
curl -XPOST 'http://10.99.34.13:9200/_snapshot/full_backup/snapshot_1/_restore?wait_for_completion=true'

#in case of error, close indexes before backup or restore
curl -XPOST 'http://10.99.34.13:9200/cel_occurrences/_close'
curl -XPOST 'http://10.99.34.13:9200/cel_photos/_close'

#sources
https://z0z0.me/how-to-create-snapshot-and-restore-snapshot-with-elasticsearch/
https://blog.zwindler.fr/2018/07/04/sauvegarder-et-restaurer-des-index-dans-elasticsearch/