Elasticsearch Snapshots - ubtue/ub_tools GitHub Wiki

Für eine konsistente Sicherung der Volltextindices bietet Elasticsearch eine Snapshot-Funktionalität

Setup

Voraussetzung ist die Konfiguration eines Repositories. Für muss in der Configdatei elasticsearch.yml path.repo gesetzt werden:

path.repo: ["/usr/local/es_backup"]

Danach erfolgt das Anlegen des Snapshot-Repositories in Elasticsearch

curl -g -XPUT  -H  "Content-Type: application/json" 'http://localhost:9200/_snapshot/es_backup' -d '{  "type": "fs",
  "settings": {
    "location": "/usr/local/es_backup"
}}'

Erstellung und Restore

Ein Snapshot kann manuell erzeugt werden:

curl -g -s -XPUT -H "Content-Type: application/json" 'http://localhost:9200/_snapshot/es_backup/<SNAPSHOT_NAME>?wait_for_completion=true'  -d '{ "indices" : ["full_text_cache", "full_text_cache_html", "full_text_cache_urls" ] }'

Eine Wiederherstellung erfolgt durch:

curl -g -s -XPOST -H "Content-Type: application/json" 'http://localhost:9200/_snapshot/es_backup/<SNAPSHOT_NAME>/_restore' -d '{ "indices" : ["full_text_cache", "full_text_cache_html", "full_text_cache_urls" ] }'

SLM ("Scheduled Lifecycle Management")

Elasticsearch bietet einer Art internen Cronjob für die regelmäßige inkrementelle Erstellung von Snapshots. Die Zeit ist dabei immer UTC und muss entsprechend angepasst werden

curl -g -s -XPUT -H "Content-Type: application/json" http://localhost:9200/_slm/policy/fulltext-snapshots -d '{ "schedule": "0 0 19 * * ?", "name": "<fulltext-snap-{now/d{yyMMdd}}>", "repository": "es_backup", "config" : { "indices" : [ "full_text_cache", "full_text_cache_html", "full_text_cache_urls" ] }, "retention": {  "expire_after": "10d", "min_count": 7, "max_count": 10 } }'

Nach dem Anlegen kann eine unmittelbare Ausführung getriggert werden:

curl -g -s -XPOST -H "Content-Type: application/json" 'http://localhost:9200/_slm/policy/fulltext-snapshots/_execute'

Informationen über den SLM-Zustand bekommt man mit:

curl -g -s -XGET -H "Content-Type: application/json" 'http://localhost:9200/_slm/policy/fulltext-snapshots?human'

Löschen einer SLM-Policy

curl -g -s -XDELETE -H "Content-Type: application/json" 'http://localhost:9200/_slm/policy/fulltext-snapshots'

Fixing nach dem Umkopieren

Beim Umkopieren des Index bei Migrationen kann ein inkonsistenter Zustand entstehen, wenn das Bakcupverzeichnis nicht mitübertragen wird. Ein konsistenter Zustand kann dann durch durch Löschen und Wiederanlegen von Policy und Repository erfolgen:

curl -g -s -XDELETE -H "Content-Type: application/json" 'http://localhost:9200/_slm/policy/fulltext-snapshots'
curl -X DELETE "localhost:9200/_snapshot/es_backup?pretty"
curl -g -XPUT  -H  "Content-Type: application/json" 'http://localhost:9200/_snapshot/es_backup' -d '{  "type": "fs",  "settings": 
    "location": "/usr/local/es_backup" } }'
curl -g -s -XPUT -H "Content-Type: application/json" http://localhost:9200/_slm/policy/fulltext-snapshots -d '{ "schedule": "0 0 19 * * ?", "name": "<fulltext-snap-{now/d{yyMMdd}}>", "repository": "es_backup", "config" : { "indices" : [ "full_text_cache", "full_text_cache_html", "full_text_cache_urls" ] }, "retention": {  "expire_after": "10d", "min_count": 7, "max_count": 10 } }'