Осколки Bigcouch - это просто базы данных CouchDB, поэтому процедура их перемещения довольно проста. Будущий выпуск Bigcouch автоматизирует процесс, но сейчас я просто опишу его.
Небольшой фон поможет обосновать объяснение. Узел Bigcouch прослушивает два порта, 5984 и 5986. Передний порт 5984 выглядит как CouchDB (хотя и кластеризованный и отказоустойчивый). Задний порт 5986 напрямую связывается с базовым сервером CouchDB на определенном узле. Вы заметите, что на localhost показаны две дополнительные базы данных: 5986 / _all_dbs, кроме сегментов вашей базы данных. Один из них называется «узлами», и вы уже взаимодействовали с ним при настройке кластера. Другой называется «dbs» и содержит документ для каждой кластерной базы данных, в котором указано, где в действительности находится каждая копия каждого сегмента вашей базы данных.
Итак, чтобы переместить осколок, вам нужно сделать несколько вещей;
- Идентификация файла шарда.
- Скопируйте файл шарда на ваш новый сервер.
- Расскажите Bigcouch о его новом местоположении.
- При необходимости завершите репликацию.
Шаг 1
В каталоге данных вашего узла Bigcouch вы найдете такие файлы;
Осколки / A0000000-bfffffff / foo.1312544893.couch
Все осколки организованы в каталоге осколков /, затем по диапазону и, наконец, имени, за которым следует случайное число.
Выберите один из файлов для вашей базы данных и запомните его имя.
Шаг 2
Используйте любой метод, чтобы скопировать этот файл по тому же пути на целевом сервере. rsync и scp - хороший выбор, как и репликация CouchDB (не забудьте выполнить репликацию с порта 5986 на порт 5986).
Шаг 3
Документ в 'dbs', который управляет макетом вашей кластерной базы данных, необходимо изменить. Это выглядит примерно так:
{"_ id": "baz", "_ rev": "1-912fe2dd63e0a570a4ceb26fd742dffd", "shard_suffix": [46,49,51,49,50,53,52,53,50,49,55], "Список изменений": [[ "добавить", "00000000-7fffffff", "dev1@127.0.0.1"], [ "добавить", "80000000-FFFFFFFF", "dev1@127.0.0.1"]], "by_node": { "dev1@127.0.0.1": [ "00000000-7fffffff", "80000000-FFFFFFFF"]}, "by_range": { "00000000-7fffffff": [ "dev1@127.0.0.1"], "80000000-FFFFFFFF" : [ "dev1@127.0.0.1"]}}
Обновите значения как by_node, так и by_range, чтобы перемещенный осколок перешел на новый хост.
В этот момент вы переместили осколок. Однако если с момента начала копирования файла произошли обновления, но до обновления документа 'dbs' эти записи произошли на исходном узле и не отображаются, поэтому следует перейти к шагу 4. Если обновлений не было, вы Можно удалить осколок на исходном сервере, хотя я рекомендую проверить базу данных на порту 5984, чтобы убедиться, что все ваши документы отображаются правильно.
Шаг 4
Выполните репликацию от исходного сегмента до целевого, снова позаботившись об этом на порте 5986 каждого. Это обеспечит доступность всех обновлений еще раз. Теперь вы можете удалить копию этого осколка на исходном сервере.
НТН,
Роберт Ньюсон - Cloudant.