Closed dhilt closed 7 years ago
Мне удалось завести снапшот следующим образом.
1. Следуя документации, я объявил параметр path.repo: ["/github/.../backups"]
в elasticsearch.yml.
2. Это позволило мне использовать относительный путь при создании репозитория для бэкапов:
curl -XPUT 'http://localhost:9200/_snapshot/my_backup' -H 'Content-Type: application/json' -d '{"type": "fs", "settings": {"location": "my_backup", "compress": true}}'
В папке /github/.../backups появилась папка my_backup.
3. Я считал это дело через curl -XGET 'http://localhost:9200/_snapshot/my_backup'
, убедился, что репозиторий создан.
4. Затем я создал первый снапшот
curl -XPUT 'http://localhost:9200/_snapshot/my_backup/shanp1' {"indices": "dharmadict", "ignore_unavailable": true, "include_global_state": false}
Зайдя в /github/.../backups/my_backup я увидел результат работы.
Задача. Довести процедуру до конечного результата, устранить все ошибки/предупреждения, научиться восстанавливать данные.
@BitDen Проверить работоспособность дампа можно через процедуру восстановления. Соответственно нужно научиться восстанавливать дамп. Весь процесс я бы описал следующим образом:
1) сделать дамп индекса dharmadict; 2) внести изменения в переводы через UI; 3) накатить сохраненный дамп; 4) увидеть, что изменения из п.2 откатились.
Вносить изменения можно залогинившись админом или переводчиком (см исходники, users.js).
@dhilt Дамп работает. Удалил переводы двух слов от одного переводчика, затем провел восстановление и снова увидел переводы на своем месте. Сначала надо заблокировать индекс в базе данных: https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-open-close.html
curl -XPOST 'localhost:9200/dharmadict/_close?pretty'
И собственно восстановление
curl -XPOST 'localhost:9200/_snapshot/my_backup/shanp1/_restore?pretty' -H 'Content-Type: application/json' -d'
{
"indices": "dharmadict",
"ignore_unavailable": true
}
'
Может еще стоит переустановить заново эластик и попробовать взять данные только из дампа. Буду пробовать...
@BitDen Отлично! попробуй напиши теперь инструкцию на английском языке в максимально сжатом, но воспроизводимом виде по созданию снапшота и его дальнейшему применению, все команды, последовательность, нюансы. Я потом отредактирую и опубликую это в Readme.md отдельным разделом.
После этого можно будет думать над автоматизацией процесса резервного копирования данных (это сейчас не будем делать, потом.)
path.repo: ["/github/.../backups"]
in file '/etc/elasticsearch/elasticsearch.yml'. This file possible open with next command:
sudo nano /etc/elasticsearch/elasticsearch.yml
curl -XPUT 'http://localhost:9200/_snapshot/my_backup' -H 'Content-Type: application/json' -d '{"type": "fs", "settings": {"location": "my_backup", "compress": true}}'
In the folder "/github/.../backups" will appear a new folder "my_backup".
curl -XGET 'http://localhost:9200/_snapshot/my_backup'
curl -XPUT 'http://localhost:9200/_snapshot/my_backup/shanp1' {"indices": "dharmadict", "ignore_unavailable": true, "include_global_state": false}
curl -XPOST 'localhost:9200/dharmadict/_close?pretty'
curl -XPOST 'localhost:9200/_snapshot/my_backup/shanp1/_restore?pretty' -H 'Content-Type: application/json' -d'
{
"indices": "dharmadict",
"ignore_unavailable": true
}
'
@dhilt Вот в принципе и весь перевод. Есть только такой нюанс. Судя по всему вам удалось с помощью команды curl создать папку (2-ой пункт), в моем же случае там возникли проблемы со всякими правами. В общем-то вышло так, что я сам создал папку и права передал elasticsearch'у.
И кстати говоря, вы верно догадывались. Виртуалку можно "приостановить", сохранить её состояние на винте, выйти из VirtualBox, и спустя время вернуться обратно, так будто операционная система и не заканчивала работать.
@BitDen Давай так поступим, создай бранч, допиши в нем в readme эти пункты и открой Pull Request. Будем следовать стандартному workflow!
Я уезжаю на выходные, посмотри пока само приложение и предложи какой-нибудь рефакторинг.
Из полезного и простого, нужно сделать страницу "О проекте" с отдельным роутом и еще страницы для каждого переводчика. Можешь тоже предложить решение. Но сперва я бы предложил порефакторить существующий код.
Хорошо, создам бранч 'elasticsearch-dump' и там впишу инструкцию. И еще пока нужно смотреть на 2-ой пункт, у меня гладко там никак не получалось одной командой добиться результата (создать папку).
И постараюсь все-все рассмотреть и что-нибудь предложить насчет рефакторинга.
@dhilt Pull request создал: https://github.com/dhilt/dharmadict/pull/2.
Насчет рефакторинга - сильно бросается в глаза эдакая инфраструктура визуальных реакт-компонентов (views) в папке /app/components
, нет какой-то четкой организованной структуры что ли, хочется это дело как-то красиво упорядочить чтобы любой компонент находился легко и быстро, вот-с...
Вторым по очереди возникает желание как-то разбить reducers на отдельные файлы, опять же ради удобочитаемости.
Еще возможно стоит сервер расписать с помощью promise, как мы это делали в прошлом проекте.
И немного смущают две папки node_modules.
И еще есть желание автоматизировать всяческие манипуляции, которые приходилось делать вначале, что-то вроде bash-скрипта, который я показывал. Или вот даже под задачу создания дампа и восстановления данных написать скрипт, допустим пользователь вводит путь к репозиторию, имя бекапа - и в ответ все автоматически делается.
Вот как-то так.
@BitDen Я сумел пройти цикл восстановления данных и пока отложим это. Я отредактировал readme и сделал мерж. Свои предложения по рефакторингу ты можешь предлагать кодом, в бранче 'dev', например. На счет структуры компонентов пока это выглядит следующим образом:
Я попробую создать сейчас задачу-другую.
Исследуем https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html, разрабатываем процедуру резервного копирования/восстановления данных