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

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

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

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

По сути, «Обновление путем замены»

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

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

Теперь я запускаю свою виртуальную машину 'solr5' (и SOLR в облачном режиме), на которой я установил SOLR 5.4 в соответствии с инструкциями «Производственная установка» в 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

Я обнаружу, что второй узел волшебным образом появляется в моей консоли администратора. Это будет «последователь» (то есть не лидер), и оба будут ответвляться от «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), чтобы найти все по статусу и т. Д. Я могу неправильно это помнить, потому что я прошел через это, поэтому много раз. В случае сомнений после команды 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 4.x и «узел» Zookeeper могут быть удалены. Довольно просто указать балансировщик нагрузки на новые виртуальные машины 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.)

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

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


person jb62    schedule 20.01.2016    source источник


Ответы (1)


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

  • Остановите узлы 4.9 solr и удалите solr.
  • Удалите конфигурацию с узлов zk, используя zkcli.sh с командой clear.
  • Установите solr как на solr5, так и на solr6 vm.
  • Запустите оба узла solr и убедитесь, что оба могут разговаривать с zk. => На solr5 vm ./bin/solr start -c -z zk1: port1, zk2: port1, zk3: port1 На solr6 vm ./bin/solr start -c -z zk1: port1, zk2: port1, zk3: port1
  • Проверьте статус 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: port1, zk2: port1, zk3: port1 -c fooCollection

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

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

person Mani    schedule 20.01.2016
comment
Спасибо - это означает, что моя ошибка заключалась в том, что другая машина не работала в облачном режиме ... Если бы я это сделал, это, вероятно, сработало бы. Вы бы согласились? Я собираюсь попробовать прямо сейчас. - person jb62; 21.01.2016
comment
Пробовал что на solr5 - сборник создавался. Однако коллекция не отображается ни в файловой системе solr6, ни в консоли администратора для компьютера solr6. Ядро также не может быть найдено консолью администратора на IP для solr6. - person jb62; 21.01.2016
comment
Я успешно выполнил команду создания коллекции, однако в разделе Tree / configs ничего не найдено. - person jb62; 21.01.2016
comment
Обновил мой ответ более подробными командами для запуска и создания коллекции. Взгляните и позвольте мне, если это сработает. - person Mani; 21.01.2016
comment
Спасибо! Попробую сегодня. Я пробовал очень похожие и раньше, хотя я буду точно следовать этим шагам. Это подразумевает (и что я не вижу, чтобы это происходило в моей среде), что fooCollection автоматически создается на любом компьютере, на котором я НЕ запускал команду create collection. Я отправлю ответ, когда выполню эти шаги. - person jb62; 25.01.2016
comment
Я добавил дополнительную информацию к исходному вопросу над @Mani. Короче говоря, у меня есть один узел на виртуальной машине, на котором я запускаю команду. На второй виртуальной машине ничего не происходит, если я вручную не создаю каталоги и файлы. - person jb62; 25.01.2016
comment
Я обнаружил, что небольшое изменение команды create @ Mani помогло. Я добавлю, что у меня могут быть проблемы из-за разрешения сети, поэтому, хотя это очевидно, убедитесь, что все ваши виртуальные машины могут пинговать друг друга по именам или IP-адресам, которые вы используете в файлах solr.xml. См. Мой последний раздел по вопросу о небольших уточнениях процесса. - person jb62; 26.01.2016