У меня есть установка 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.
Теперь о моем взломе. Имейте в виду, что я уже два дня пытаюсь найти четкие документы по этому поводу. Пожалуйста, без огня, я полностью понимаю, что это не способ делать что-то. По крайней мере, я НАДЕЮСЬ, что это не способ делать вещи ...
- Скопируйте каталог fooCollection, из которого команда создания коллекции поместила его на 'solr5' (который был / opt / solr / server / solr / fooCollection_shard1_replica1) в то же место на моей виртуальной машине 'solr6'.
- Сделайте так, чтобы изменения казались логичными для имени каталога коллекции (становится fooCollection_shard1_replica2)
- Сделайте так, чтобы изменения казались логичными в файле 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 или физических серверов в соответствии с тем, что у вас уже есть в производственной среде. Очевидно, что если ваши ресурсы ограничены только имеющимися у вас ящиками или виртуальными машинами, обновление на месте может быть вашим единственным вариантом.