Подтвердить что ты не робот

Перемещение осколка с одного сервера bigcouch на другой (для балансировки)

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

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

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

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

Благодарим вас за вашу помощь. С наилучшими пожеланиями!

Andy

4b9b3361

Ответ 1

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

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

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

  • Идентификация файла осколков.
  • Скопируйте файл осколков на новый сервер.
  • Расскажите Bigcouch о своем новом расположении.
  • При необходимости верните репликацию.

Шаг 1

В каталоге данных вашего Bigcouch node вы найдете такие файлы:

Осколки/A0000000-bfffffff/foo.1312544893.couch

Все осколки организованы в каталоге shards/, затем по диапазону и, наконец, имя, за которым следует случайное число.

Выберите один из файлов для своей базы данных и запомните его имя.

Шаг 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" , "[email protected]" ], [ "добавить", "80000000-FFFFFFFF" , "[email protected]" ]], "by_node": { "[email protected]" : [ "00000000-7fffffff" , "80000000-FFFFFFFF" ]}, "by_range": { "00000000-7fffffff" : [ "[email protected]" ], "80000000-FFFFFFFF" : [ "[email protected]" ]}}

Обновите значения by_node и by_range, чтобы перемещенный осколок разрешил новый хост.

На этом этапе вы переместили осколок. Однако, если с момента начала копирования файла были обновлены обновления, но перед обновлением документа dbs эти записи произошли в оригинале node и не отображаются, поэтому вам следует перейти к шагу 4. Если обновлений не было, вы можете удалить осколок на исходном сервере, хотя я рекомендую вам проверить свою базу данных на порту 5984, чтобы убедиться, что все ваши документы отображаются правильно.

Шаг 4

Выполните репликацию из исходного осколка до целевого осколка, снова позаботившись сделать это на каждом из 5986 портов. Это гарантирует, что все обновления будут доступны еще раз. Теперь вы можете удалить копию этого осколка на исходном сервере.

НТН, Роберт Ньюсон - Облако.