Основная настройка Apache Solr(3.6.2) + Jetty(min) под Drupal для слабых VPS или Dev_Env

Главные вкладки

Аватар пользователя sg85 sg85 16 сентября 2013 в 16:59

Бывает, что ресурсы нужно экономить, например, если имеем VPS с ограниченным кол-вом памяти, где томкат, или полная версия jetty, или еще кто могут оказаться слишком громоздкими, в этом случае можно использовать обрезанную версию jetty, находящуюся прямо в архиве с солром. В гугле подобной информации довольно много, однако вся она разрознена, в общем в свое время приходилось собирать по кусочкам.

ставим яву
если таковой еще не имеется
sudo apt-get install openjdk-6-jdk
6 для примера, является минимальным требованием, на dev лучше ставить 7, особенно если используете NetBeans ибо, в свою очередь, является его минимальным требованием

Качаем солр
wget http://archive.apache.org/dist/lucene/solr/3.6.2/apache-solr-3.6.2.tgz
tar -zxf apache-solr-3.6.2.tgz
sudo mv apache-solr-3.6.2.tgz/example /usr/share/solr-jetty

Версия 3.6.2 взята для примера, с 4 версией раньше были проблемы со схемами для друпал, сейчас они вроде как есть, сам их пока не пробовал - на данный момент не вижу смысла, затем засовываем папку example куда-нибудь в более подходящее для него место, в этой папке содержатся обрезанный вариант Jetty6, копия Солра, и примеры конфигов для обоих, все остальное скорее всего не понадобится(если, конечно, Вам не нужны какие-нибудь особенные плагины и т.д., правда, на сколько помню, для некоторых плагинов его все равно придется перекомпилировать, так что в этом случае проще будет скачать сразу сырцы., могу ошибаться в данном вопросе).

Создаем пользователя
Лично я не люблю когда софт лазит под рутом, потому создадим для Jetty системного юзера.
sudo addgroup --system jetty
sudo adduser --system --home /usr/share/solr-jetty jetty
sudo usermod -g jetty jetty
sudo chown -R jetty:jetty /usr/share/solr-jetty
sudo mkdir /var/log/solr
sudo chown jetty:jetty /var/log/solr

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

Включаем логи
Если нужны логи, создаем файлик(вообще он учитывается в стандартном скрипте запуска) /usr/share/solr-jetty/etc/jetty-logging.xml со следующим содержимым:

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure id="Server" class="org.mortbay.jetty.Server">
    <New id="ServerLog" class="java.io.PrintStream">
      <Arg>
        <New class="org.mortbay.util.RolloverFileOutputStream">
          <Arg><SystemProperty name="jetty.logs" default="."/>/yyyy_mm_dd.stderrout.log</Arg>
          <Arg type="boolean">false</Arg>
          <Arg type="int">90</Arg>
          <Arg><Call class="java.util.TimeZone" name="getTimeZone"><Arg>GMT</Arg></Call></Arg>
          <Get id="ServerLogName" name="datedFilename"/>
        </New>
      </Arg>
    </New>
    <Call class="org.mortbay.log.Log" name="info"><Arg>Redirecting stderr/stdout to <Ref id="ServerLogName"/></Arg></Call>
    <Call class="java.lang.System" name="setErr"><Arg><Ref id="ServerLog"/></Arg></Call>
    <Call class="java.lang.System" name="setOut"><Arg><Ref id="ServerLog"/></Arg></Call>
</Configure>

Скрипт запуска
Создаем файл конфигурации для скрипта запуска /etc/default/jetty со следующим содержимым:

JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64/jre
JAVA_OPTIONS="-Dsolr.solr.home=/usr/share/solr-jetty/solr $JAVA_OPTIONS"
JETTY_HOME=/usr/share/solr-jetty
JETTY_USER=jetty
JETTY_LOGS=/var/log/solr

Путь до jre может отличаться(вероятнее всего), JAVA_OPTIONS используется скриптом запуска для указания опций при запуске ява машины, остальное вроде интуитивно понятно

Теперь берем стартап скрипт от полной версии:
wget http://svn.codehaus.org/jetty/jetty/branches/jetty-6.1/bin/jetty.sh
sudo mv jetty.sh /etc/init.d/jetty.sh
sudo chmod 0755 /etc/init.d/jetty.sh

качаем, засовываем в init.d и выставляем права на запуск, затем проверяем на работоспособность с помощью
sudo service jetty.sh check
если все нормально, должно всплыть что-то вроде

Checking arguments to Jetty:
JETTY_HOME     =  /usr/share/solr-jetty
JETTY_CONF     =  
JETTY_RUN      =  /var/run
JETTY_PID      =  /var/run/jetty.pid
JETTY_PORT     =  
JETTY_LOGS     =  /var/log/solr
....

В противном случае ошибка с указанием причины, на скрипт будет матюкаться update-rc.d ввиду отсутствия тегов, можно дописать(на вариант с тегами выходит 404).

если все ОК, добавляем скрипт в автозагрузку с помощью update-rc.d jetty.sh defaults

Про настройку солр-джетти полезно будет почитать http://wiki.apache.org/solr/SolrJetty
Вообще скрипт jetty.sh можно переименовать как угодно, например в solr и обращаться к нему через sudo service solr start и т.д.

Теперь прикручиваем друпал:

Клиент для PHP:

wget https://solr-php-client.googlecode.com/files/SolrPhpClient.r60.2011-05-0...
tar -zxf SolrPhpClient.r60.2011-05-04.tgz
rm -R SolrPhpClient/phpdocs
mv SolrPhpClient/phpdocs /var/www/drupal/sites/all/libraries

Скачиваем, распаковываем, убираем из него примеры(иначе будут доступны третьим лицам через HTTP), и переносим в sites/all/libraries Вашего сайта.

Модуль для друпал
ставим модуль для работы с солром, например, search_api и search_api_solr
drush dl search_api_solr search_api
drush en search_api_solr search_api_views

Конфиги и индексы
мне удобнее хранить ядро в отдельном месте
sudo mkdir /var/lib/solr/drupal/data
sudo mkdir /var/lib/solr/drupal/conf
sudo cp /var/www/drupal/sites/all/modules/search_api_solr/solr-conf/3.x/* /var/lib/solr/drupal/conf
sudo chown -R jetty:jetty /var/lib/solr/drupal

создаем папку для индексов друпала, создаем папку для конфигов, копируем конфиги из модуля друпала, отдаем папку солра, далее правим файл /usr/share/solr-jetty/solr/solr.xml, заменяем настройки ядра на что-то типа этого
<cores adminPath="/admin/cores" defaultCoreName="drupal"><core name="drupal" instanceDir="/var/lib/solr/drupal" /></cores>
instanceDir должно указывать на расположение конфигов и индексов, при этом их можно разносить по разным местам, например, следующий вариант позволит вынести в отдельное место только индексы
<core name="drupal" instanceDir="." dataDir="/var/lib/solr/drupal/data"/>
тогда конфиги придется копировать прямо в папку конфигов солра с заменой
sudo cp /var/www/drupal/sites/all/modules/search_api_solr/solr-conf/3.x/* /usr/share/solr-jetty/solr/conf

вместо /var/www/drupal везде подставлять свой путь к друпалу, у других аналогичных модулей для солра должны быть свои схемы.

запускаем Solr через sudo service jetty.sh start (или restart если уже был запущен(для перезагрузки))
Проверяем, заходим браузером по адресу http://localhost:8983/solr/admin/ или http://мойдомен.ком:8983/solr/admin/
обращаем внимание на заголовок, если конфиги встали, в нем можно будет увидеть drupal.

Закрываем Jetty
Если все это дело развернуто на продакшене, то солр лучше изолировать от внешней среды, в этой версии jetty сие можно сделать следующим образом, в файле /usr/share/solr-jetty/etc/jetty.xml находим:

<Set name="host"><SystemProperty name="jetty.host"/></Set>
<Set name="port"><SystemProperty name="jetty.port" default="8983"/></Set>

и в свойствах host добавляем атрибут "по умолчанию", должно получиться так

<Set name="host"><SystemProperty name="jetty.host" default="127.0.0.1"/></Set>
<Set name="port"><SystemProperty name="jetty.port" default="8983"/></Set>

и перезагружаем jetty: sudo service jetty.sh restart

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

Комментарии

Аватар пользователя CSoft CSoft 16 сентября 2013 в 17:11

Спасибо за статью! Smile Будем пробовать Smile

Пара замечаний.

"sg85" wrote:
с 4 версией раньше были проблемы со схемами для друпал, сейчас они вроде как есть, сам их пока не пробовал

"sg85" wrote:
Теперь прикручиваем друпал:
Клиент для PHP:

Когда ставил модуль search_api_solr - там есть схема под 4-ку, работает отлично. И вот тот клиент для php я не ставил, работает без него.

Аватар пользователя sg85 sg85 16 сентября 2013 в 18:11

Могу еще выложить конфиг для nginx+php-fpm+boost(впрочем он годен и на проксирование апача), недавно понадобилось прикрутить к энжинксу буст, выяснилось, что по всему гуглу только 1 полностью рабочий конфиг(на д.орге кривой) и тот весьма специфичный и громоздкий, так что не подошел, пришлось вспоминать как писать правила для энжинкс и изобретать велосипед, надо кому? Хотя буст к энжинксу прикручивать может понадобиться разве что на новостном портале.

Аватар пользователя sg85 sg85 16 сентября 2013 в 18:14

"CSoft" wrote:
Когда ставил модуль search_api_solr - там есть схема под 4-ку, работает отлично. И вот тот клиент для php я не ставил, работает без него.

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

Аватар пользователя CSoft CSoft 31 октября 2013 в 5:22

Добрались наконец руки снести томкат и воспользоваться Jetty Smile Огромное спасибо за статью, всё получилось!!! Однако, проблемы были. Обо всём по порядку.

"sg85" wrote:
sudo apt-get install openjdk-6-jdk

Ставил сразу 7-ку, работает, всё ок.

"sg85" wrote:
wget http://archive.apache.org/dist/lucene/solr/3.6.2/apache-solr-3.6.2.tgz[/...

Пробовал самую свежую версию - 4.5.1. Не взлетела Sad Взял пока ту, что работала с томкатом - 4.4.0.

"sg85" wrote:
проверяем на работоспособность с помощью
sudo service jetty.sh check

А вот тут уже понеслась... Пишет мне:

Quote:
: Нет такого файла или каталога cd: /usr/share/solr-jetty
** ERROR: Oops! Jetty doesn't appear to be installed in /
** ERROR: //etc/jetty.xml is not readable!

Первая строка особенно доставляет. Пишу в консоли cd /usr/share/solr-jetty и спокойно попадаю в папку... Для интереса беру и прописываю в jetty.sh руками путь к этой папке. Пускает. Дальше вот что пишет:

Quote:
Cannot find a JRE or JDK. Please set JAVA_HOME to a >=1.2 JRE

Тоже не ясно. У меня указан путь:

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/jre

и там есть файл:

/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java

Выходит, через этот кусок баш-скрипта он не проходит:

[ -x $JAVA_HOME/bin/jre -a ! -d $JAVA_HOME/bin/jre ] && JAVA=$JAVA_HOME/bin/jre
[ -x $JAVA_HOME/bin/java -a ! -d $JAVA_HOME/bin/java ] && JAVA=$JAVA_HOME/bin/java

Bash не знаю, разбираться пока с этим куском нет времени. Потому не знаю, что тут не так.

Опять плюю и прописываю путь явно:

JAVA="/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java"

Получаю:

Quote:
' not foundtty: start-stop-daemon: user 'jetty

Что это значит - не ясно Smile Аут. Что дальше делать? Вспомнил про статью, которую до этого нашёл после Вашего совета попробовать Jetty:

http://www.wunderkraut.com/blog/power-up-drupal-search-with-jetty-apache...

Взял их пример баш-кода, получаем:

#!/bin/sh -e
# Starts, stops, and restarts solr
 
SOLR_DIR="/usr/share/solr-jetty"
JAVA_OPTIONS="-Xmx1024m -DSTOP.PORT=8079 -DSTOP.KEY=stopkey -jar start.jar"
LOG_FILE="/var/log/solr.log"
JAVA="/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java"
 
case $1 in
    start)
        echo "Starting Solr"
        cd $SOLR_DIR
        $JAVA $JAVA_OPTIONS 2> $LOG_FILE &
        ;;
    stop)
        echo "Stopping Solr"
        cd $SOLR_DIR
        $JAVA $JAVA_OPTIONS --stop
        ;;
    restart)
        $0 stop
        sleep 1
        $0 start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}" >&2
        exit 1
        ;;
esac

Всё запускается, страница солра из браузера доступна, поиск работает. Всё супер Smile

"sg85" wrote:
правим файл /usr/share/solr-jetty/solr/solr.xml, заменяем настройки ядра на что-то типа этого

К сожалению, не увидел куски кода, которые Вы приводите, в этом файле Sad Даже не знаю, как быть. Пока оставил свой core на месте.

"sg85" wrote:
default="127.0.0.1"

Эксперименты веду в виртуальной машине, у меня заработало, как ни странно, только так: default="localhost".

Вот такие пироги Smile Ещё раз нереальное спасибо за статью, Вы очень помогли! Жалко, что jetty.sh подвёл Sad Но хоть другой вариант нашёлся на замену, который работает.

Аватар пользователя CSoft CSoft 31 октября 2013 в 7:47

Вот ещё интересная статья, посвежее мною найденной до этого:

http://pietervogelaar.nl/ubuntu-12-04-install-solr-4-with-jetty-9/

Опробовал - работает, рекомендую к прочтению Smile

Только они не заменили в строке

JAVA_OPTIONS="-Dsolr.solr.home=/opt/solr $JAVA_OPTIONS"

переменную $JAVA_OPTIONS. Должно быть вот так:

JAVA_OPTIONS="-Dsolr.solr.home=/opt/solr -Xms16M -Xmx64M -XX:MaxPermSize=32M"

Аватар пользователя sg85 sg85 31 октября 2013 в 8:24

"CSoft" wrote:
Пробовал самую свежую версию - 4.5.1. Не взлетела Sad Взял пока ту, что работала с томкатом - 4.4.0.

там вроде используется Jetty8

В любом случае, для Jetty7(в какой-то из 4х версий солра должна лежать именно 7рка, но в последней, на сегодняшний день, точно 8рка) стартовый скрипт можно взять тут, для 8рки в открытом доступе не попадалось, впрочем, можно скачать jetty-full и взять его от туда, либо попробовать от 7рки, вроде бы должен подойти.

с Вашим конфигом jetty будет работать от рута, ну и еще кое-какие мелочи, впрочем, если написать скрипт со всеми этими возможностями смены юзера, проверкой конфигов и т.д., то в итоге получится тот самый jetty.sh
Кроме того, /etc/default/jetty это конфиг для jetty.sh, если Вы не используете стандартный скрипт, то этот конфиг не нужен.

"CSoft" wrote:
Эксперименты веду в виртуальной машине, у меня заработало, как ни странно, только так: default="localhost".

стоит учесть, что конфиг jetty6 отличается от более поздних версий, в особенности настройка хостов, так что следует убедиться, что этот способ действительно работает.

"CSoft" wrote:
К сожалению, не увидел куски кода, которые Вы приводите, в этом файле Sad Даже не знаю, как быть. Пока оставил свой core на месте.

Действительно, в solr 4.4 и выше, solr.xml полностью поменялся

Из всего этого следует, что топик верен только для версии Apache Solr 3.6.x, правда пока мне не до изучения последней версии солра.

Аватар пользователя sg85 sg85 31 октября 2013 в 8:59

"CSoft" wrote:
Вот ещё интересная статья, посвежее мною найденной до этого:
http://pietervogelaar.nl/ubuntu-12-04-install-solr-4-with-jetty-9/
Опробовал - работает, рекомендую к прочтению :)

это вариант с jetty full, то есть в данном случае не сильно отличается от tomcat

"CSoft" wrote:
Только они не заменили в строке
JAVA_OPTIONS="-Dsolr.solr.home=/opt/solr $JAVA_OPTIONS"
переменную $JAVA_OPTIONS. Должно быть вот так:
JAVA_OPTIONS="-Dsolr.solr.home=/opt/solr -Xms16M -Xmx64M -XX:MaxPermSize=32M"

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

Аватар пользователя CSoft CSoft 31 октября 2013 в 17:41

"sg85" wrote:
для 8рки в открытом доступе не попадалось, впрочем, можно скачать jetty-full и взять его от туда

Да-да, так и есть! Попробую сейчас.

Чтобы люди не искали - уточняю:

http://download.eclipse.org/jetty/stable-8/dist/

файл в архиве лежит тут: jetty-distribution-8.1.13.v20130916/bin/jetty.sh

"sg85" wrote:
с Вашим конфигом jetty будет работать от рута, ну и еще кое-какие мелочи, впрочем, если написать скрипт со всеми этими возможностями смены юзера, проверкой конфигов и т.д., то в итоге получится тот самый jetty.sh

Так... Уже попробовал Smile Заменил jetty.sh из 8-ки - ошибки остались, о которых пишу выше. Но вспомнил про вторую статью, что свежее. Беру /etc/default/jetty с их параметрами и чуть правлю:

JAVA=/usr/bin/java # Path to Java
NO_START=0 # Start on boot
JETTY_HOST=0.0.0.0 # Listen to all hosts
JETTY_ARGS=jetty.port=8983
JETTY_USER=jetty # Run as this user
JAVA_OPTIONS="-Dsolr.solr.home=/usr/share/solr-jetty/solr $JAVA_OPTIONS"

Работает!!! Ура!!!

Каковы принципиальные различия с Вашим конфигом:

"sg85" wrote:
JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64/jre

Не запускается по этому пути, пишет ошибку. Цифру 7 под себя ставил, соответственно. А со статейным /usr/bin/java - работает.

"sg85" wrote:
JETTY_HOME=/usr/share/solr-jetty

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

Вот это и мешало вчера, выходит.

По-моему, всё: добили таки мы Вашу статью под solr 4.4.0 и jetty 8 Smile

"sg85" wrote:
это вариант с jetty full, то есть в данном случае не сильно отличается от tomcat

Это, конечно, был облом для меня Smile Так как я утром был уверен, что скачанный jetty 9 моё спасение Smile Я даже сравнил из солра папку example, которую мы используем, с дистрибутивом jetty. Как минимум, очень похожи Smile Потому я и подумал, что это решение тоже имеет место быть. Выходит, с солром идёт облегчённый вариант jetty? И с учётом моих соображений выше - я всё сделал правильно?

"CSoft" wrote:
Только они не заменили в строке
JAVA_OPTIONS="-Dsolr.solr.home=/opt/solr $JAVA_OPTIONS"
переменную $JAVA_OPTIONS. Должно быть вот так:
JAVA_OPTIONS="-Dsolr.solr.home=/opt/solr -Xms16M -Xmx64M -XX:MaxPermSize=32M"

"sg85" wrote:
это уже вопрос оптимизации, кроме того, указанные значения, на сколько помню, заданы по умолчанию, т.е. в данном случае эти строки дадут одинаковый результат.

Это я виноват. У меня сначала не запускался скрипт с $JAVA_OPTIONS и я заменил на чистые параметры. Потому написал так. А сейчас прочитал Ваш ответ и вернул переменную назад - запустилось. Чудеса. В общем, беру свои слова обратно Smile

Аватар пользователя sg85 sg85 31 октября 2013 в 21:50

"CSoft" wrote:
JETTY_ARGS=jetty.port=8983

судя по записям в jetty.sh, можно просто указать JETTY_PORT=8983, вообще, если не указывать, то порт будет взят из jetty.xml, но опять же, это точно работает для Jetty6, для остальных не уверен(про необязательность указания порта), JETTY_ARGS нужен для указания дополнительных агрументов, не поддерживаемых в jetty.sh

"CSoft" wrote:
Выходит, с солром идёт облегчённый вариант jetty? И с учётом моих соображений выше - я всё сделал правильно?

Jetty вообще - полноценный веб сервер, соответственно, как и любой другой веб сервер имеет кучу "плагинов" и параметров, при этом, он компилируется сразу вместе с ними, а в том виде, в котором jetty идет в комплекте с солром, он попросту скомпилирован с минимальным набором, рассчитанным на то, что работать с Jetty будет только Solr.(кроме того, никто Вам не мешает скомпилировать его самостоятельно под конкретный проект, но это уже другая тема, и боюсь с разбором внутренностей jetty и самого solr в одну тему форума не уложиться)

"CSoft" wrote:
По-моему, всё: добили таки мы Вашу статью под solr 4.4.0 и jetty 8 :)

для того, чтоб добить, надо как минимум еще разобраться с нововведениями в solr.xml для версии 4.4.0 и выше, т.к. изменили они его почти полностью.

По поводу оптимизации ява машины, где-то то ли на сайте солра, то ли в его ридми(словом, где-то в официальных источниках), почему-то крайне не рекомендовалось использовать параметр -XX, не разбирался почему

Аватар пользователя CSoft CSoft 31 октября 2013 в 22:45

"CSoft" wrote:
JAVA_OPTIONS="-Dsolr.solr.home=/usr/share/solr-jetty/solr $JAVA_OPTIONS"

Тут ошибочка. Я ж забыл по второй статье убрать папку /opt/jetty - баш-скрипт находил jetty там, а не в /usr/share/solr-jetty/solr, потому работало Smile Опять же: если указать

JETTY_HOME=/usr/share/solr-jetty

он ругается. Убрать - он не находит, так как в лучшем случае директорию придётся назвать

JETTY_HOME=/usr/share/jetty

вот такую найдёт.

Но я сделал другие пути, как во второй статье - /opt/jetty и /opt/solr, раскидал jetty и solr по ним. Тогда параметр станет таким:

JAVA_OPTIONS="-Dsolr.solr.home=/opt/solr $JAVA_OPTIONS"

В общем, пусть каждый делает тут так, как ему будет удобно Smile

"sg85" wrote:
вообще, если не указывать, то порт будет взят из jetty.xml

Проверил - так и есть. Можно убрать параметр

JETTY_ARGS=jetty.port=8983

так как дефолтный как раз нужный мне - 8983.

"sg85" wrote:
а в том виде, в котором jetty идет в комплекте с солром, он попросту скомпилирован с минимальным набором, рассчитанным на то, что работать с Jetty будет только Solr

То что и нужно Smile Понял, спасибо!

"sg85" wrote:
для того, чтоб добить, надо как минимум еще разобраться с нововведениями в solr.xml для версии 4.4.0 и выше, т.к. изменили они его почти полностью.

Это да. Главное, что удалось запустить и оно работает Smile А остальное - по ходу пьесы Smile

"sg85" wrote:
По поводу оптимизации ява машины, где-то то ли на сайте солра, то ли в его ридми(словом, где-то в официальных источниках), почему-то крайне не рекомендовалось использовать параметр -XX, не разбирался почему

А я их убрал, выше написал, что это я виноват, сначала не работало без них просто Smile

Аватар пользователя CSoft CSoft 31 октября 2013 в 22:51

Кстати, ещё один момент, из-за которого могут быть проблемы с солром: нужно скопировать из архива с ним папки dist и contrib в папку, где лежит солр на сервере. Просто, например, в cores могут быть в конфигах ссылки на файлы из этих папок. В общем, имейте в виду, кто займётся всей это кухней.

Аватар пользователя sg85 sg85 31 октября 2013 в 23:12

"CSoft" wrote:
JETTY_HOME=/usr/share/solr-jetty
он ругается. Убрать - он не находит, так как в лучшем случае директорию придётся назвать
JETTY_HOME=/usr/share/jetty

помню делал заглушку для почты в виде самописного скрипта, так он умудрялся текст письма исполнять как баш скрипт, видимо в этом случае тоже считает - за спецсимвол, соответственно необходимо экранирование, скорее всего, кавычек будет достаточно, JETTY_HOME="/usr/share/solr-jetty", хотя на Jetty 6 + Debian(6\7)\Ubuntu12.04 работает и без экранирования...

"CSoft" wrote:

Кстати, ещё один момент, из-за которого могут быть проблемы с солром: нужно скопировать из архива с ним папки dist и contrib в папку, где лежит солр на сервере. Просто, например, в cores могут быть в конфигах ссылки на файлы из этих папок. В общем, имейте в виду, кто займётся всей это кухней.

еще один "прикол" от версии 4.4+

И да, лично я бы отделять jetty от solr не стал, все же этот jetty не предназначен для работы с чем-то еще помимо солра, а если его отделить, то у 3го лица может сложится мнение, что там живет полноценный jetty(пример разделения, как я понимаю, Вы взяли как раз от полной версии jetty)

Аватар пользователя multpix multpix 31 октября 2013 в 23:15

размещая все в одной среде можно ограничить коннект только локалхостом (в конфиге jetty).
иначе, уж лучше томкат7 с авторизацией.

Аватар пользователя sg85 sg85 31 октября 2013 в 23:51

"multpix" wrote:
размещая все в одной среде можно ограничить коннект только локалхостом (в конфиге jetty).
иначе, уж лучше томкат7 с авторизацией.

"sg85" wrote:
<Set name="host"><SystemProperty name="jetty.host" default="127.0.0.1"/></Set>

авторизацию можно сделать так же через nginx, пример описан тут
"CSoft" wrote:
http://pietervogelaar.nl/ubuntu-12-04-install-solr-4-with-jetty-9/[/quote]

кроме того, на сколько помню, какая-то из версий jetty принимает прямо в конфиге jetty.sh параметр JETTY_HOST

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

Аватар пользователя CSoft CSoft 1 ноября 2013 в 7:10

"sg85" wrote:
помню делал заглушку для почты в виде самописного скрипта, так он умудрялся текст письма исполнять как баш скрипт, видимо в этом случае тоже считает - за спецсимвол, соответственно необходимо экранирование, скорее всего, кавычек будет достаточно, JETTY_HOME="/usr/share/solr-jetty"

Увы, я тоже думал об этом и проверял = не помогло. Даже переименовал папку в просто solr:

: Нет такого файла или каталога: /usr/share/solr
** ERROR: Oops! Jetty doesn't appear to be installed in /
** ERROR: //etc/jetty.xml is not readable!

"sg85" wrote:
еще один "прикол" от версии 4.4+

Ну вот конфиги солра из модуля search_api_solr по пути

/solr-conf/4.x/solrconfig.xml

имеют такие строки:

<lib dir="../../../contrib/extraction/lib" />
<lib dir="../../../contrib/clustering/lib/" />

Это для них придётся копировать как минимум contrib.

"sg85" wrote:
И да, лично я бы отделять jetty от solr не стал, все же этот jetty не предназначен для работы с чем-то еще помимо солра, а если его отделить, то у 3го лица может сложится мнение, что там живет полноценный jetty(пример разделения, как я понимаю, Вы взяли как раз от полной версии jetty)

Ну да, во второй статье. Согласен с Вашими доводами, верну в одну папку, но тогда придётся сделать такую:

/usr/share/jetty

чтобы баш сам её из заготовленного списка нашёл и выбрал.

"sg85" wrote:
<Set name="host"><SystemProperty name="jetty.host" default="127.0.0.1"/></Set>

Кстати, про изоляцию. Как она работает? Немного не понял Smile Вот сейчас я могу из любого браузера попасть на страницу

site.ru:8983/solr

Если я выгружу на хостинг - как можно будет туда попасть и как не попадут другие?

Аватар пользователя sg85 sg85 1 ноября 2013 в 15:04

"CSoft" wrote:
Кстати, про изоляцию. Как она работает? Немного не понял Smile Вот сейчас я могу из любого браузера попасть на страницу
site.ru:8983/solr
Если я выгружу на хостинг - как можно будет туда попасть и как не попадут другие?

а никак не попадут, jetty будет откликаться только на запросы со своего же сервера, всех остальных будет игнорировать.
Но есть 3 способа как этого избежать(правда не совсем понимаю зачем оно надо):
1. добавить авторизацию в jetty(не уверен поддерживает ли авторизацию солровский джетти, по идее должен, впрочем, опять же можно скомпилировать джетти под свои нужды)
2. вариант с проксированием через nginx, т.е. jetty откликается только на localhost, а авторизацией управляет уже nginx.
3. авторизация через друпал, если обязательно нужен доступ к админке солра извне с максимальным уровнем безопасности, но это будет тот еще костыль(секса много - толку мало).

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

"CSoft" wrote:
Это для них придётся копировать как минимум contrib.

да, причем их копировать нужно относительно инстанса(до версии 4.4), надо будет подправить это дело.

Аватар пользователя bsyomov bsyomov 1 ноября 2013 в 15:12

Кстати, не совсем по теме статьи, но заголовок про solr и слабые vps немного издевательски выглядит.
Java приложение со всей оснасткой для запуска довольно прожорливо, для слабой vps. Smile
Так что как мне кажется, тут стоит ещё рассмотреть альтернативу в виде того же sphinx, например.

Аватар пользователя sg85 sg85 1 ноября 2013 в 18:29

"bsyomov" wrote:
Java приложение со всей оснасткой для запуска довольно прожорливо, для слабой vps. =)

в том то и вся соль, чтоб заставить её работать на 64х метрах

Сфинкс - отдельная тема, смысла на vps его разворачивать не много, проще взять какой-нибудь тариф у патруля где уже все нормально настроено, разве что кроме сфинкса необходимо еще что-то, ну и про потребление ресурсов тут тоже весьма спорно, возможность "отвалить" от базы данных дорогого стоит. ИМХО

Хотя, если вдуматься... понятие "слабый" весьма относительно, подразумевался VPS с 512 метрами(вообще дедики такие же бывают), ниже уже не прокатит.

Аватар пользователя CSoft CSoft 1 ноября 2013 в 18:31

"sg85" wrote:
а никак не попадут, jetty будет откликаться только на запросы со своего же сервера

Отлично, то, что и нужно Smile Доступ мне лично действительно туда не нужен, один раз добавил core и забыл. А логи можно и без того посмотреть, согласен.

"sg85" wrote:
в том то и вся соль, чтоб заставить её работать на 64х метрах

Эм, ну не знаю, у меня сейчас на виртуальной тачке процесс java кушает больше 100 метров. После запуска сервера - 75.

Аватар пользователя sg85 sg85 1 ноября 2013 в 18:31

"CSoft" wrote:
Эм, ну не знаю, у меня сейчас на виртуальной тачке процесс java кушает больше 100 метров.

12 гигов при переиндексации(больше ему "соседи" не дали), словом, подъедает всю свободную память, хотя не должен...

Аватар пользователя CSoft CSoft 1 ноября 2013 в 18:37

По крайней мере, я пока для себя понял, что если стоят php + nginx + apache/php-fpm + apc + mysql и сюда мы ещё добавляем солр, который работает на java через jetty, то 512-метровый сервер будет маловат Sad Ибо начинает лезть в swap. Ставлю гиг памяти - 600 метров занимается при лазании по сайту. Понимаю, что тут ещё настроить всё можно по-разному, но солр реально кушает многовато Smile В общем, я пока учусь, как вы все поняли Lol И мне это всё очень интересно!

Аватар пользователя sg85 sg85 1 ноября 2013 в 19:26

а сама операционка у Вас с иксами или без? В убунтовском gnome вроде 512 метров надо только на то чтоб запустилось.

Аватар пользователя Andruxa Andruxa 1 ноября 2013 в 21:16

я интерса ради запускал солр на старом ноуте - celeron mobile 2Hz 512M, рядом с LAMPом, под Ubuntu server, без иксов

работало, но, блин мееееедленно

Аватар пользователя CSoft CSoft 1 ноября 2013 в 21:26

"sg85" wrote:
а сама операционка у Вас с иксами или без?

Без. Ставил Debian 7.2 (Linux 3.2.0-4-amd64). Это я ещё и x64 скачал, выходит. Просто сначала не подумал, что лучше тестировать по минимальному количеству памяти. Интересно, сильная ли разница от x32 по кушанию памяти будет в таком случае...

Аватар пользователя sg85 sg85 2 ноября 2013 в 7:48

"Andruxa" wrote:
я интерса ради запускал солр на старом ноуте - celeron mobile 2Hz 512M, рядом с LAMPом, под Ubuntu server, без иксов
работало, но, блин мееееедленно

на интеловском i3(Ubuntu) относительно i5(вируталка с разными ОС, правда все то же семейство debian в разных вариантах) mysql работает в разы медленнее, а пых без акселератора так вообще застрелиться. Впрочем, солр у меня летает что на i3 что на ксеонах, особой разницы не заметил(что, кстати, странно).

"CSoft" wrote:
Без. Ставил Debian 7.2 (Linux 3.2.0-4-amd64). Это я ещё и x64 скачал, выходит. Просто сначала не подумал, что лучше тестировать по минимальному количеству памяти. Интересно, сильная ли разница от x32 по кушанию памяти будет в таком случае...

Вот это уже не хорошо, значит действительно 512 маловато будет, но x64 не имеет смысла ставить на железе с оперативной памятью ниже 4 гигабайт, по идее 32х битная система должна есть чуть меньше ресурсов, но опять же не на много.

Тогда и правда интереснее становится сфинкс... По идее на слабом впс ляжет субд при большом числе "искателей", но по крайней мере он в своп не должен лезть, хотя тут спорно, кроме того, как я писал Выше, тот же mysql просто офигевает от целерона, потому лучше посмотреть как оно будет работать да сравнить. Словом, надо будет как-нибудь провести сравнение сфинкса с солром на одинаковом недожелезе.

Аватар пользователя CSoft CSoft 2 ноября 2013 в 16:33

"sg85" wrote:
Тогда и правда интереснее становится сфинкс...

Я бы изначально с большим удовольствием бы его выбрал, и даже на патруле им пользуюсь, но, блин, большинство модулей из "семейства" search api заточены на solr Sad

Аватар пользователя bsyomov bsyomov 2 ноября 2013 в 21:17

Sphinx интереснее и скоростью, и более скромным потреблением ресурсов при прочих равных - это нативное приложение на C.
По возможностям он, конечно, уступает Solr, но чего не хватает применительно к поиску в drupal?
Search API с ним работает, соответственно, и модули работающие с Search API должны, они же работают уже не на прямую с бекэндом поиска...

Ну и лечь база не должна - с чего бы. Сфинкс работает со своими RT индексами, в Search API, а не совместно с mysql, и базу не положит, ни при поиске активном, ни если упадёт сам.

Аватар пользователя CSoft CSoft 2 ноября 2013 в 22:05

"bsyomov" wrote:
Search API с ним работает, соответственно, и модули работающие с Search API должны, они же работают уже не на прямую с бекэндом поиска...

Это да. В общем, надо будет попробовать, конечно, потестировать - всё ли будет также, как с солром.

Аватар пользователя sg85 sg85 3 ноября 2013 в 19:05

"bsyomov" wrote:
Sphinx интереснее и скоростью, и более скромным потреблением ресурсов при прочих равных - это нативное приложение на C.

то что сфинкс как нативное приложение будет поедать меньше ресурсов это очевидно, однако, взаимодействуя с и без того перегруженной субд, не выйдет ли у него большее потребление чем у солра? Я как-то не особо разбирался со сфинксом(если быть точнее, вообще не вдавался в подробности), но разве он индексы хранит не в БД?

Из темы, видимо, как минимум нужно убрать "для слабых" Wink

Аватар пользователя marazmus marazmus 3 ноября 2013 в 19:56

Патролу нужно развернуть один сервак чисто под Solr, более там ничего не разворачивая. И продавать услугу "Solr-index" как опцию к тарифным планам. Будет заебаче ЯЩЕТАЮ.

Аватар пользователя bsyomov bsyomov 5 ноября 2013 в 1:47

"sg85" wrote:
Я как-то не особо разбирался со сфинксом(если быть точнее, вообще не вдавался в подробности), но разве он индексы хранит не в БД?

Нет, не в БД. Я выше об этом писал.
В нашем применении сфинкс вообще с БД напрямую не связан - Search API кормит его текстами. Sphinx строит индексы(они хранятся в файлах, в специальном формате). Потом Search API делает к нему запросы.

Аватар пользователя CSoft CSoft 15 ноября 2014 в 4:01

"sg85" wrote:
Включаем логи

А как их корректно выключить? Просто не создавать этот файл, что Вы описываете - не прокатывает Smile Нагуглить ничего полезного не смог. Информация как бы и есть, а что и куда - не разобрался Sad Описывают какие-то все разные способы...

Просто с того момента, как я настроил поиск, у меня набралось логов на... 13 гигов!!! Грубо говоря, это за год. А я ещё сижу и думаю: да кто столько места занял-то... Начал уже размер каждой папки смотреть и вывел. Удалил - сразу стало дышать легче Smile