Использование программы Lucene идексирования для Micro Focus Vibe.

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

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

Параметры которые могут быть изменены администратором, для увлечения производительности Портала с установленным 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, возникает по мере наполнения Портала информацией, её количество становится заметно по тому, как проходит поиск нужной информации, а именно время/ресурс которое потрачено на операцию поиска. У администратора Портала возникает вопрос, что с этим делать, для решения этого вопроса, рассмотрим несколько вариантов предложенных  компании Micro Focus.

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

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

 Если у Вас работает Портал под управлением Vibe, следовательно он соответствует конфигурации базовой установки, где все каталоги программ Vibe и Lucene собранны в /var/opt/novell/teaming/lucene - эту конфигурацию рассматривать не будем.

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

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

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

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

Подготовим установочные каталоги, в директории vibe-Lucene  должен лежать файл simple-installer.xml.

# 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, при семантической неточности возникнет ошибка

Вносим изменения в файл,indexserver,находится в этом каталоге. Инструкция indexserver корректировалась для OC SUSE, система init которого отличается от OC 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, установленного на том сервере где и программа Vibe

# /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 с вновь созданным экземпляром каталога jvm для Lucene. Эту операцию можно сделать через консоль администратора или, если индексов накопилось много, с помощью простого копирования соответствующих каталогов, но операцию синхронизации необходимо всё равно включить, чтобы индексы правильно "улеглись".

ошибки, которые могут возникнуть после выполнения всех манипуляций - соединения RMI и авторизации

для проверки ввода Login name необходимо в файле настроек Lucene смотреть синтаксист строки параметров установки

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

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

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

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

 

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