Как правильно добавить дополнительные узлы 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.
Теперь для моего взлома. Имейте в виду, я сейчас два дня пытаюсь найти четкие документы по этому вопросу. Нет огня, пожалуйста, я полностью понимаю, что это не способ делать вещи. По крайней мере, я надеюсь, что это не способ делать вещи...
- Скопируйте каталог 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
Я найду второй узел, магически появляющийся в моей консоли администратора. Это будет "последователь" (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