перемещение осколка с одного сервера bigcouch на другой (для балансировки) - PullRequest
12 голосов
/ 13 июля 2011

В настоящее время я тестирую bigcouch для больших объемов данных (15 миллионов записей в день).

Когда мне нужно сгенерировать представления данных, у меня возникают некоторые проблемы с балансировкой, потому что одна из двух моих машин намного слабее другой. Результатом является то, что лучшая машина закончена и не имеет ничего общего, в то время как более слабая еще много работы. (одно- и двухъядерный)

Моя идея теперь состоит в том, чтобы переместить некоторые осколки с более слабой машины на другую, чтобы они были закончены примерно в одно и то же время.

Поэтому мой вопрос, как я могу переместить осколки с сервера bigcouch недели на лучший?

Спасибо за вашу помощь + наилучшие пожелания!

Andy

1 Ответ

23 голосов
/ 05 августа 2011

Осколки Bigcouch - это просто базы данных CouchDB, поэтому процедура их перемещения довольно проста. Будущий выпуск Bigcouch автоматизирует процесс, но сейчас я просто опишу его.

Небольшой фон поможет обосновать объяснение. Узел Bigcouch прослушивает два порта, 5984 и 5986. Передний порт 5984 выглядит как CouchDB (хотя и кластеризованный и отказоустойчивый). Задний порт 5986 напрямую связывается с базовым сервером CouchDB на определенном узле. Вы заметите, что на localhost показаны две дополнительные базы данных: 5986 / _all_dbs, кроме сегментов вашей базы данных. Один из них называется «узлами», и вы уже взаимодействовали с ним при настройке кластера. Другой называется «dbs» и содержит документ для каждой кластерной базы данных, в котором указано, где в действительности находится каждая копия каждого сегмента вашей базы данных.

Итак, чтобы переместить осколок, вам нужно сделать несколько вещей;

  1. Идентификация файла шарда.
  2. Скопируйте файл шарда на ваш новый сервер.
  3. Расскажите Bigcouch о его новом местоположении.
  4. При необходимости завершите репликацию.

Шаг 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.

...