Как правильно добавить дополнительные узлы SOLR 5 (vm) в SOLR Cloud

У меня есть настройка SOLR / Zookeeper / Kafka. Каждый на отдельной виртуальной машине.

Я успешно запустил все это, используя два SOLR 4.9 vms (Ubuntu)

Теперь я хочу собрать два SOLR 5.4 vms и снова заставить их работать.

По сути, "Обновление заменой"

Я "взломал" решение моей проблемы, но это очень нервирует.

Для начала Zookeeper работает. Я выключаю мой SOLR 4.9 vms и удаляю конфигурацию из Zookeeper (не обязательно в таком порядке...;-))

Теперь я запускаю свою виртуальную машину 'solr5' (и SOLR в облачном режиме), где я установил SOLR 5.4 в соответствии с инструкциями "Production Install" в SOLR Wiki. Я также установил 5.4 на 'solr6', но он еще не запущен.

Я запускаю эту команду на машине 'solr5':

/opt/solr/bin/solr create -c fooCollection -d /home/john/conf -shards 1 -replicationFactor 1

и я получаю следующий вывод:

Connecting to ZooKeeper at 192.168.56.5,192.168.56.6,192.168.56.7/solr ...
Re-using existing configuration directory statdx

Creating new collection 'fooCollection' using command:
http://localhost:8983/solr/admin/collections?action=CREATE&name=fooCollection&numShards=1&replicationFactor=1&maxShardsPerNode=1&collection.configName=fooCollection

{
  "responseHeader":{
    "status":0,
    "QTime":3822},
  "success":{"":{
      "responseHeader":{
        "status":0,
        "QTime":3640},
      "core":"fooCollection_shard1_replica1"}}}

Все работает отлично. Я включаю свой микросервис, и он перекачивает все мои документы SOLR из Kafka в 'solr5'.

Теперь я хочу добавить 'solr6' в коллекцию. Я не могу найти способ сделать это, кроме моего взлома (который я опишу позже).

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

Кажется, что нет команды zkcli.sh или solr, которая будет делать то, что я хочу. Кажется, что ни одна из команд api этого не делает.

Нет ли простого способа сказать (SOLR? Zookeeper?), Что я хочу добавить другую машину к моим узлам SOLR, пожалуйста, сконфигурируйте ее как первую (solr5) и начните реплицировать данные?

Может быть, мне нужно было запустить обе машины, когда я выполнил команду create?

Я был бы признателен за некоторый "одобренный" метод для этого, так как мне нужно придумать "решение" для того же подхода в Prod каждый раз, когда необходимо обновить SOLR.

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

  1. Скопируйте каталог fooCollection, из которого команда создания коллекции поместила его в 'solr5' (который был /opt/solr/server/solr/fooCollection_shard1_replica1) в ту же папку на моей виртуальной машине 'solr6'.
  2. Сделайте то, что изменения кажутся логичными для имени каталога коллекции (становится fooCollection_shard1_replica2)
  3. Сделайте то, что изменения кажутся логичными в файле core.properties:

Для справки вот файл core.properties, который был создан командой create.

#Written by CorePropertiesLocator
#Wed Jan 20 18:59:08 UTC 2016
numShards=1
name=fooCollection_shard1_replica1
shard=shard1
collection=fooCollection
coreNodeName=core_node1

Вот как выглядел файл на "solr6", когда я закончил взлом.

#Written by CorePropertiesLocator
#Wed Jan 20 18:59:08 UTC 2016
numShards=1
name=fooCollection_shard1_replica2
shard=shard1
collection=fooCollection
coreNodeName=core_node2

Когда я сделал это и перезагрузил "solr6", все казалось золотым. Веб-страница "Облако" выглядела прямо на веб-странице администратора - и когда я добавлял документы в "solr5", они были доступны в "solr6", если я нажимал на них прямо с веб-страниц администратора.

Я был бы признателен, если бы кто-нибудь сказал мне, как добиться этого без такого взлома, как это... или если это правильный способ сделать это...

=============================

В ответ на @Mani и предложенную процедуру

Спасибо, Мани. Я очень старался, следуя твоим шагам.

В конце я получаю этот вывод из запроса статуса коллекции:

    john@solr6:/opt/solr$ ./bin/solr healthcheck -z 192.168.56.5,192.168.56.6,192.168.56.7/solr5_4 -c fooCollection
{
  "collection":"fooCollection",
  "status":"healthy",
  "numDocs":0,
  "numShards":1,
  "shards":[{
      "shard":"shard1",
      "status":"healthy",
      "replicas":[{
          "name":"core_node1",
          "url":"http://192.168.56.15:8983/solr/fooCollection_shard1_replica1/",
          "numDocs":0,
          "status":"active",
          "uptime":"0 days, 0 hours, 6 minutes, 24 seconds",
          "memory":"31 MB (%6.3) of 490.7 MB",
          "leader":true}]}]}

Именно такой результат я обнаружил в своих экспериментах все это время. Ядро будет создано на одной из виртуальных машин SOLR (той, на которой я запускаю командную строку для создания коллекции), но я не получаю ничего созданного на другой виртуальной машине - который, как я полагаю, основываясь на ваших шагах ниже тоже мысли должны возникать, да?

Кроме того, я отмечу для любого, кто читает, что в 5.4, команда это "проверка здоровья", а не состояние здоровья. Командная строка показывает вам сразу, так что это не страшно.

===============

Обновление 1:: Ручное добавление 2-го ядра

Если я иду на другую виртуальную машину и вручную добавить следующее:

sudo mkdir /opt/solr/server/solr/fooCollection_shard1_replica2
sudo mkdir /opt/solr/server/solr/fooCollection_shard1_replica2/data
nano /opt/solr/server/solr/fooCollection_shard1_replica2/core.properties
     (in here I add only collection=fooCollection and then save/close)

Затем я перезагружаю свой сервер SOLR на той же виртуальной машине: sudo /opt/solr/bin/solr restart -c -z zoo1,zoo2,zoo3/solr

Я найду второй узел, магически появляющийся в моей консоли администратора. Это будет "последователь" (IE не лидер), и оба будут разветвлять "shard1" в облачном интерфейсе.

Я не знаю, является ли это "способом", но это единственный путь, который я нашел до сих пор. Я собираюсь воспроизвести к этому моменту и попробовать с интерфейсом администратора и посмотреть, что я получаю. Это было бы немного проще для моих айтишников, когда придет время - если это сработает.

===============

Обновление 2:: Небольшая модификация команды создания

@Mani - Я верю, что у меня есть успех, следуя твоим шагам, и, как и многие вещи, все просто, когда ты понимаешь

Я сбросил все настройки (удалил каталоги, очистил zookeeper (rmr /solr) и сделал все заново.

Я немного изменил команду "создать":

./bin/solr create -c fooCollection -d /home/john/conf -shards 1 -replicationFactor 2

Обратите внимание на "replicationFactor 2", а не 1.

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

Пара заметок:

Я обнаружил, что не могу получить счастливый результат от вызова состояния, просто запустив серверы SOLR 5.4 в облачном режиме с IP-адресами Zookeeper. "Узел" в Zookeeper еще не был создан.

Команда create также потерпела неудачу в этой точке.

Я нашел способ использовать zkcli.sh для загрузки конфигов следующим образом:

sudo /opt/solr/server/scripts/cloud-scripts/zkcli.sh -cmd upconfig -confdir /home/john/conf/ -confname fooCollection -z 192.168.56.5/solr

Когда я проверил Zookeeper сразу после выполнения этой команды, был / путь / solr / configs / fooCollection.

ТЕПЕРЬ команда create работает, и я предполагаю, что, если бы я хотел переопределить конфиги, я мог бы сделать это в тот момент, хотя я не пробовал.

Я не уверен, в какой момент, но, похоже, мне нужно было перезагрузить серверы SOLR (возможно, после команды create), чтобы узнать все о статусе и т. Д.... Возможно, я неправильно запоминаю это, потому что я прошел через это так много раз. Если после создания команды сомневаетесь, попробуйте перезагрузить серверы. (Это могут быть IP-адреса или имена, которые разрешаются правильно)

sudo /opt/solr/bin/solr restart -c -z zoo1,zoo2,zoo3/solr
sudo /opt/solr/bin/solr restart -c -z 192.168.56.5,192.168.56.6,192.168.56.7/solr

После внесения этих небольших изменений в рекомендованную процедуру @ Mani, я получил Лидера и "последователя" на каждой виртуальной машине - в каталоге / opt / solr / server / solr (в данном случае fooCollection), и я смог отправить данные в к одному и искать другой через консоль администратора, нажав IP-адреса.

=============

вариации

Любой, кто читает это, может захотеть попробовать просто создать еще один "узел" в Zookeeper (например, solr5_4).

Я попробовал это, и это работает как шарм. Везде, где вы видите chroot / solr, связанный с ансамблем Zookeeper, вы можете заменить его на /solr5_4. Это позволило бы старшим виртуальным машинам SOLR продолжать работать в Prod, пока вы создаете новую "среду" SOLR 5.4, и те же виртуальные машины Zookeeper могут использоваться для обоих - потому что другой chroot не должен гарантировать взаимодействие или перекрытие.

Опять же, "узел" в Zookeeper не будет создан до тех пор, пока вы не выполните загрузку конфигурации, но вам нужно запустить процесс SOLR, как это, иначе вы окажетесь в неправильном контексте. Обратите внимание на "solr5_4" в качестве chroot.

sudo /opt/solr/bin/solr restart -c -z zoo1,zoo2,zoo3/solr5_4

После завершения тестирования "среда" solr5_4 становится тем, что важно для Prod, а "узел" solr виртуальных машин и Zookeeper в SOLR 4.x может быть удален. Должно быть достаточно просто указать балансировщик нагрузки на новые виртуальные машины SOLR и выполнить переключение, даже не заметив пользователей.

Эта стратегия будет работать для SOLR 6, 6.5, 7 и так далее.

Эта команда также работала над добавлением коллекций / ядер. Однако сервер solr должен был быть запущен первым.

http://192.168.56.16:8983/solr/admin/collections?action=CREATE&name=fooCollection&numShards=1&replicationFactor=2&collection.configName=fooCollection

==================

Использовать как обновление по замене

В случае, если это неочевидно, этот метод (особенно если использовать "новый" chroot в Zookeeper, например, / solr5_4 или аналогичный) дает вам возможность оставить прежнюю версию SOLR запущенной столько времени, сколько вы хотите. Позволяет переиндексации всех ваших данных занять несколько дней, если это необходимо.

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

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

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

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

1 ответ

Решение

Вот как бы я это сделал. Я предполагаю, что вы можете позволить себе простои и возможность полностью переиндексировать документы. Так как вы существенно обновляетесь с 4.9 до 5.4.

  • Остановите узлы 4.9 solr и удалите solr.
  • Удалите конфигурацию из узлов zk, используя zkcli.sh с командой clear.
  • Установите Solr на Solr5 и Solr6 VM
  • Запустите оба узла solr и убедитесь, что оба могут общаться с zk. => При запуске solr5 vm ./bin/solr -c -z zk1: порт1,zk2: порт1,zk3: порт1 При запуске solr6 vm ./bin/solr -c -z zk1: порт1,zk2: порт1,zk3: порт1
  • Проверьте статус Solrcloud, используя./bin/solr status => это должно вернуть liveNodes как 2
  • Теперь создайте коллекцию fooCollection, используя CollectionsAPI из любого из узлов solr. Это загружает настройки в zookeeper, а также создает коллекцию => ./bin/solr create -c fooCollection -d /home/john/conf -shards 1 -replicationFactor 1

  • Проверьте состояние работоспособности коллекции fooCollection => ./bin/solr healthstatus -z zk1: порт1,zk2: порт1,zk3: порт1 -c fooCollection.

  • Теперь убедитесь, что конфигурация присутствует в Zookeeper, проверив Solr-AdminConsole -> CloudSection -> Tree .. /configs
  • А также проверьте CloudSection -> Graph, показывающий активный статус на узлах. Это говорит о том, что все хорошо.
  • Теперь начните помещать документы в коллекцию

Приведенная ниже вики очень полезна для выполнения вышесказанного. https://cwiki.apache.org/confluence/display/solr/Solr+Start+Script+Reference

Другие вопросы по тегам