homework 6.5: add task 3

This commit is contained in:
2022-06-08 17:52:45 +07:00
parent f0ea7634b9
commit e25749fa66
3 changed files with 203 additions and 2 deletions

View File

@@ -7,6 +7,8 @@ ENV ES_HEAP_SIZE=262144
RUN mkdir -m 774 -p /var/lib/elasticsearch-data \ RUN mkdir -m 774 -p /var/lib/elasticsearch-data \
&& chown elasticsearch -R /var/lib/elasticsearch-data \ && chown elasticsearch -R /var/lib/elasticsearch-data \
&& mkdir -m 774 -p /var/log/elasticsearch \ && mkdir -m 774 -p /var/log/elasticsearch \
&& chown elasticsearch -R /var/log/elasticsearch && chown elasticsearch -R /var/log/elasticsearch \
&& mkdir -m 774 -p /usr/share/elasticsearch/snapshot \
&& chown elasticsearch -R /usr/share/elasticsearch/snapshot
COPY ./elasticsearch.yml /usr/share/elasticsearch/config/elasticsearch.yml COPY ./elasticsearch.yml /usr/share/elasticsearch/config/elasticsearch.yml

View File

@@ -10,6 +10,7 @@ discovery:
path: path:
data: /var/lib/elasticsearch-data data: /var/lib/elasticsearch-data
logs: /var/log/elasticsearch logs: /var/log/elasticsearch
repo: /usr/share/elasticsearch/snapshot
xpack: xpack:
security: security:
enabled: false enabled: false

View File

@@ -202,4 +202,202 @@ curl --request DELETE -sL \
### Задача 3 ### Задача 3
// todo > В данном задании вы научитесь:
> - создавать бэкапы данных
> - восстанавливать индексы из бэкапов
>
> Создайте директорию `{путь до корневой директории с elasticsearch в образе}/snapshots`.
>
> Используя API [зарегистрируйте](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshots-register-repository.html#snapshots-register-repository)
> данную директорию как `snapshot repository` c именем `netology_backup`.
>
> **Приведите в ответе** запрос API и результат вызова API для создания репозитория.
>
> Создайте индекс `test` с 0 реплик и 1 шардом и **приведите в ответе** список индексов.
>
> [Создайте `snapshot`](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshots-take-snapshot.html)
> состояния кластера `elasticsearch`.
>
> **Приведите в ответе** список файлов в директории со `snapshot`ами.
>
> Удалите индекс `test` и создайте индекс `test-2`. **Приведите в ответе** список индексов.
>
> [Восстановите](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshots-restore-snapshot.html) состояние
> кластера `elasticsearch` из `snapshot`, созданного ранее.
>
> **Приведите в ответе** запрос к API восстановления и итоговый список индексов.
>
> Подсказки:
> - возможно вам понадобится доработать `elasticsearch.yml` в части директивы `path.repo` и перезапустить `elasticsearch`
Для начала необходимо обновить образ, добавив в [Dockerfile](./elasticsearch/Dockerfile) создание новой директории
по пути `/usr/share/elasticsearch/snapshot`. Далее необходимо добавить новый ключ конфигурации `path.repo` в [elasticsearch.yml](elasticsearch/elasticsearch.yml).
Регистрация новой директории как директории `snapshot`:
```shell
curl --request PUT -sL \
--url 'http://localhost:9200/_snapshot/netology_backup' \
-H "Content-Type: application/json" \
-d '
{
"type": "fs",
"settings": {
"location": "/usr/share/elasticsearch/snapshot"
}
}
'
{"acknowledged":true}
curl --request GET -sL \
--url 'http://localhost:9200/_snapshot/netology_backup/' \
-H "Content-Type: application/json"
{"netology_backup":{"type":"fs","settings":{"location":"/usr/share/elasticsearch/snapshot"}}}
```
Создание нового индекса:
```shell
curl --request PUT -sL \
--url 'http://localhost:9200/test' \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '
{
"settings": {
"index": {
"number_of_shards": 1,
"number_of_replicas": 0
}
}
}
'
{"acknowledged":true,"shards_acknowledged":true,"index":"test"}
curl --request GET -sL \
--url 'http://localhost:9200/_cat/indices' \
-H "Content-Type: application/json"
green open .geoip_databases GgHLCD9tQBeeOGnnkPrAqQ 1 0 40 0 38.2mb 38.2mb
green open test p0tErJUqSXWumKWf2o_Rwg 1 0 0 0 226b 226b
```
Создание `snapshot` состояния `elasticsearch`:
```shell
curl --request PUT -sL \
--url 'http://localhost:9200/_snapshot/netology_backup/%3Cmy_snapshot_%7Bnow%2Fd%7D%3E?wait_for_completion=true&pretty=true' \
-H "Content-Type: application/json" \
-d '
{
"indices": ["test"],
"ignore_unavailable": true,
"include_global_state": false
}
'
{
"snapshot" : {
"snapshot" : "my_snapshot_2022.06.08",
"uuid" : "hXFHeJrnShi4b1JSJUeJCg",
"repository" : "netology_backup",
"version_id" : 7160399,
"version" : "7.16.3",
"indices" : [
"test"
],
"data_streams" : [ ],
"include_global_state" : false,
"state" : "SUCCESS",
"start_time" : "2022-06-08T10:50:53.699Z",
"start_time_in_millis" : 1654685453699,
"end_time" : "2022-06-08T10:50:53.699Z",
"end_time_in_millis" : 1654685453699,
"duration_in_millis" : 0,
"failures" : [ ],
"shards" : {
"total" : 1,
"failed" : 0,
"successful" : 1
},
"feature_states" : [ ]
}
}
```
Удаление индекса `test` и создание нового индекса `test-2`:
```shell
curl --request DELETE -sL \
--url 'http://localhost:9200/test' \
-H "Content-Type: application/json"
{"acknowledged":true}
curl --request PUT -sL \
--url 'http://localhost:9200/test-2' \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '
{
"settings": {
"index": {
"number_of_shards": 1,
"number_of_replicas": 0
}
}
}
'
{"acknowledged":true,"shards_acknowledged":true,"index":"test-2"}
curl --request GET -sL \
--url 'http://localhost:9200/_cat/indices' \
-H "Content-Type: application/json"
green open test-2 YFdNJTp4SraTsWGFSh6YjQ 1 0 0 0 226b 226b
green open .geoip_databases GgHLCD9tQBeeOGnnkPrAqQ 1 0 40 0 38.2mb 38.2mb
```
Получение доступных `snapshot` и восстановление из созданного на предыдущем шаге снимка:
```shell
curl --request GET -sL \
--url 'http://localhost:9200/_snapshot/netology_backup/*?verbose=false&pretty=true' \
-H "Content-Type: application/json"
{
"snapshots" : [
{
"snapshot" : "my_snapshot_2022.06.08",
"uuid" : "hXFHeJrnShi4b1JSJUeJCg",
"repository" : "netology_backup",
"indices" : [
"test"
],
"data_streams" : [ ],
"state" : "SUCCESS"
}
],
"total" : 1,
"remaining" : 0
}
curl --request POST -sL \
--url 'http://localhost:9200/_snapshot/netology_backup/my_snapshot_2022.06.08/_restore' \
-H "Content-Type: application/json"
{"accepted" : true
curl --request GET -sL \
--url 'http://localhost:9200/_cat/indices' \
-H "Content-Type: application/json"
green open .geoip_databases fTbLF8FxREWjni5I7d6SxQ 1 0 40 0 38.2mb 38.2mb
green open test-2 VnS7hBAiTr2-Q6gaaK4gNw 1 0 0 0 226b 226b
green open test 1ZIrIxzTTxCdrUAagtrZMA 1 0 0 0 226b 226b
```