Использование сервера Lucene для индексирования приложений установленных на Linux.

 Тема блога — взаимодействие индексного сервера Lucene и Micro Focus Vibe для увеличения масштабируемости и надежности Портала при эксплуатации.

 Введение.

 Вопрос настройки масштабирования сервера Lucene, возникает по мере наполнения Портала информацией, обьём и количество публикаций становится заметно по тому, как происходит поиск информации, которое увеличивается скаждым разом по мере эксплуатации Vibe. Индексный сервер Lucene отвечает за индексацию всех данных на Портале, пользователи и гости имеют возможность использовать удобную систему поиска публикуемого контента на страницах Портала. Работа сервера Lucene основана на преобразовании, для индексации, любых текстовых сообщений отправленных на Портал, можно конечно обойтись и без Lucene, если сообщения в папках носят прстой текстовый формат, который можно проиндексировать механизмом SQL сервера. Но, когда на Портале публикуются прикрепленные файлы, имеющие сложный формат, требующий дополнительного преобразования перед индексацией, то здесь на помощь приходит сервер Lucene, выполняющий роль буфера преобразовывания для любых форматов при индексации, существенно снижая этим процессорные расходы и экономя ОЗУ.

Содержание.

Конфигурация.

 Расмотрим некоторые параметры конфига Lucene, которые могут быть изменены администратором, для улучшения производительности:

  • Max booleans: - по умолчанию 10000 означает, что в запросе разрешено 10 000 логических выражений, можно увеличить если имеется > 10 000 пользователей, групп или команд.
  • RAM in MB that may be used for buffering:- объем ОЗУ, для буферизации документов и удаления перед их сбросом в каталог, по умолчанию - 256 МБ для Lucene high availability и 32 МБ для остальных
  • Merge factor: - количество сегментов индекса создаваемые на диске для объединения и сохранения постоянного коэффициента слияния при объединении индексных таблиц, по умолчанию 10
  • Network interface for RMI service: IP-адрес или имя хоста для сетевого интерфейса службы RMI, обеспечивает связь по TCP между JVM экземплярами, порт 1199
  • Важно: Индексный сервер Lucene должен всегда работать, иначе пользователи не смогут получить доступ к Vibe если не работает Lucene Index Server.

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

  1. Размещение Lucene на том же сервере где и программное обеспечение Vibe, экземпляр JVM общий (базовая коробочная установка Vibe)
  2. Раздельное использование экземпляров JVM, на одном сервере, для Vibe и Lucene (необходимо выделить часть ОЗУ для Lucene)
  3. Выделить отдельный индексный сервер Lucene
  4. Использовать кластер серверов Lucene — обеспечивает высокую доступность и отказоустойчивость.

 Если у Вас уже работает Портал под управлением Vibe, следовательно он соответствует конфигурации №1 см.выше, все каталоги Vibe и Lucene собранны в папках: /var/opt/novell/teaming и /var/opt/novell/teaming/lucene — соответствует "коробочному" варианту установки Vibe.

 В процессе эксплуатации у нас возрастают обьёмы публикаций, Портал начинает "тормозить" нам приходится искать новые решения. Для начала, что бы как то реагировать на проблемнй вопрос рассмотрим конфигурацию разделения экземпляров JVM на одном сервере. Каталоги с Vibe остаются в /var/opt/novell/teaming, а для Lucene будет создан отдельная структура папок: /var/opt/novell/teaming/luceneserver, экземпляр java для Lucene будет распологаться в /var/opt/novell/teaming/luceneserver/jre, таким образом две JVM будут отвечать за разные задачи, связь между ними будет осуществлятся с помощью RMI по TCP протоколу

Механизм RMI позволяет вызывать удалённые программы Java приложений, запущенные на другой JVM по TCP протоколу, порт RMI 1199

 Все рассмотренные конфигурации, кроме базовой, используют RMI соединение, это условие следует учитывать в дальнейшем при выборе стратегии увеличения масштабировонасти Портала. Выбрав один из способов работы Lucene, при взаимодействии с RMI, убедитесь, что сетевые экраны в корпоративной сети предприятия пропускают "перговоры" между RMI соединениями. Рекомендуется отключить firewall на сервере Vibe и Lucene или, если политикой предприятия это запрещено, открыть порт 1199. Далие приводится характерная ошибка, возникающая при нарушение соединения по RMI протоколу, которую необходимо учитывать при поиске неиспраности работы Lucene.

Вариант Lucene, один сервер два JVM.

 Подготова папки для Lucene, в каталоге vibe-Lucene должен находиться файл simple-installer.xml см.базовая установка Vibe и установочный сценарий lucene-installer.linux для инсталяции Lucene, находится в дереве каталогов архива Vibe.

# cd /home/vibe-lucene
#./lucene-installer.linux

листинг установки, фрагментарно

Checking license key...
...
Have you read and agree with the license? : yes
Where is the Lucene server installed? (top-level directory)
Install directory: [/opt/novell/teaming/luceneserver]:
Directory /opt/novell/teaming/luceneserver does not exist. Creating...
JavaHome set to bundled /opt/novell/teaming/luceneserver/jre
Logfile time zone
...
Selection? [323]:
Novell Vibe runs in the bundled JRE
JVM heap size to use [1g]:
JavaHome set to /opt/novell/teaming/luceneserver/jre
Max booleans [100000]:
RAM in MB that may be used for buffering [256]:
Merge factor [10]:
Network interface for RMI service [localhost]:
Login name [secret]:
Password:
RMI port [1199]:
Server port [1188]:
Starting installation...
... /home/vibe-lucene/temp-lucene/jre
... /home/vibe-lucene/temp-lucene/luceneserver
... /home/vibe-lucene/temp-lucene/novell-teaming-x.x.x-indexserver.zip
JRE_HOME is set to: /opt/novell/teaming/luceneserver/jre
installation directory is /opt/novell/teaming/luceneserver
Installation mode is 1
Remove Lucene lib jar files
--> Saving file owner and permissions for vibe.jmxremote.access, vibe.jmxremote.password and vibe.management.properties
Installing bundled JRE
Installing Lucene Server
/usr/bin/unzip -oq /home/vibe-lucene/temp-lucene/novell-teaming-x.x.x-indexserver.zip
Setting the Lucene Server Properties
Setting file permissions to 600 on vibe.jmxremote.password file (only the owner can read and write this file)
Removing non platform specific file from /opt/novell/teaming/luceneserver/indexserver/bin/indexserver-startup.bat
Removing non platform specific file from /opt/novell/teaming/luceneserver/indexserver/bin/indexserver-shutdown.bat
Removing non platform specific file from /opt/novell/teaming/luceneserver/indexserver/bin/rmiregistry-startup.bat
Copied startup file /opt/novell/teaming/luceneserver/indexserver/bin/indexserver to /etc/init.d

Would you like to startup the indexserver now? (Y/N) [N]: N

проверьте правильность поля Login name, при семантической неточности возникнет ошибка

 Вносим изменения в файл настроек Lucene, indexserver, находится в этом каталоге. Файл-инструкция indexserver, корректировался для SUSE, система init которого отличается от ALT Linux, необходимо внести изменения в строки приведённые ниже с помощью редактора vim.

1 #! /bin/sh
...
39 . /etc/init.d/functions                                # load start/stop script "functions" definitions
78 FileBaseName="indexserver"                            # basename of the "function" symlink file for this script
79 FileName="/usr/sbin/$FileBaseName"                    # full path of the "function" symlink file for this script
...
164    if [ $? -eq 0 ]; then echo -n "$serviceName is already running"; return 0; fi
...
167    if [ $? -ne 0 ]; then return 1; fi
168
169
...
174    if [ $? -ne 0 ]; then echo -n "$serviceName is not running"; return 0; fi
...
177    if [ $? -ne 0 ]; then return 1; fi
178
179
...
185    failed 0  
186   
187   
188    fi
189 
190    return 0; }
...
203    ln -s $scriptFile $FileName || return 1
...
208 echo You may now use $FileBaseName to call this script.
...
213    rm -f $FileName
...
219    reset
...
247    exit; }

 Теперь необходимо файл indexserver, скопировать в каталог /etc/init.d/ и в каталог установщика Lucene, это позволит в дальнейшем, при внесение изменений в настройки Lucene не копировать indexserver в каталог /etc/init.d/.

 Важно: если удалить файл installer.xml из каталога vibe-lucene, файл indexserver будет заменён оригинальным при следующем запуска программы установки Lucene

 После проведения всех подготовительных работ, можно приступить к запуску Lucene.

# /etc/init.d/indexserver start|stop|restart|status
//или
# systemctl start indexserver
# systemctl enable indexserver
# systemctl is-enabled indexserver
enable

смотрим список портов

# netstat -tulp|grep java 
tcp 0 0 :1199 *: LISTEN 3181/java
tcp 0 0 :1188 *: LISTEN 3181/java

 Теперь нам осталось перестроить сценарий запуска программы Vibe, для этого выполняем последовательно шаги  показанные ниже:

# systemctl stop vibe
# cd /home/vibe-linux
./installer-teaming.linux

 листинг установки, фрагментарно

.. 
Have you read and agree with the license? : yes
...
Select the action you want to perform
1. New installation
2. Update software and settings
3. Reconfigure settings
Selection?  [3]:
...
Select the type of installation you want to perform
1. Basic installation (select this if you do not have to configure any of the optional features)
2. Advanced installation (select this if you need to configure any of the optional features)
Selection?  [2]:
...
Enter Y to continue, enter N to cancel installation [Y]:
...
Max Threads (Default:  200) [200]:
Max Active (Default:  50) [50]:
Max Idle (Default:  20) [20]:
Scheduler Threads (Default:  10) [20]: Novell Vibe runs in the bundled JRE.JVM heap size to use [1g]: JavaHome set to /opt/novell/teaming/jreLucene index settingsMax booleans [10000]:
Merge factor [10]:
Lucene configuration
1. local
2. server
3. high availability
Selection?  [2]:
Login name [Lucene service]:
Password:
Remote host [localhost]:
RMI port [1199]:
...
Configuration saved in installer.xml.
Apply new settings now? [Yes]: 
 # systemctl start vibe

 Последнее, что необходимо сделать — выполнить синхронизацию Lucene с Vibe, операцию можно запустить при прмощи консоли администратора или, если публикаций много, с помощью простого копирования соответствующих каталогов, но операцию синхронизации необходимо всё равно включить, чтобы индексы правильно "улеглись".

Часто встречающие ошибки.

Вариант Lucene, выделенный сервер для JVM.

 Теперь рассмотрим вариант использования отдельного сервера Lucene. Особых требований к параметрам предъявлять не будем, главное чтобы выделенный сервер Lucene взял на себя всю нагрузку по индексации и освободил ресурсы для работы программного кода Vibe.

 Установку сервера для Lucene с минимальными требованиями

  • ОЗУ~ 3Gb,
  • CPU~2 GHz,
  • HDD~250GB
  • LAN~1000 Мбит/с
  • Как установить сервер смотри здесь.

 После того как сервер для Lucene будет установлен, обновлён и правильно настроен, можно приступить к развёртыванию программного пакета Lucene. Здесь необходимо повторить все действия, которые были описаны выше, один сервер два jvm, с небольшим уточнением в шаге где указываем значение, Network interface for RMI service, теперь наш листинг выглядит так.

 листинг установки, фрагментарно

.. 
Have you read and agree with the license? : yes
...
Select the action you want to perform
1. New installation
2. Update software and settings
3. Reconfigure settings
Selection?  [3]:
...
Select the type of installation you want to perform
1. Basic installation (select this if you do not have to configure any of the optional features)
2. Advanced installation (select this if you need to configure any of the optional features)
Selection?  [2]:
...
Enter Y to continue, enter N to cancel installation [Y]:
...
Max Threads (Default:  200) [200]:
Max Active (Default:  50) [50]:
Max Idle (Default:  20) [20]:
Scheduler Threads (Default:  10) [20]: Novell Vibe runs in the bundled JRE.JVM heap size to use [1g]: JavaHome set to /opt/novell/teaming/jreLucene index settingsMax booleans [10000]:
Merge factor [10]:
Lucene configuration
1. local
2. server
3. high availability
Selection?  [2]:
Login name [Lucene service]:
Password:
Remote host [server lucene]:
RMI port [1199]:
...
Configuration saved in installer.xml.
Apply new settings now? [Yes]: 

Вариант - High availability Lucene.

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

Заключение.

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