Подключение solr к aws RDS Mysql через обработчик импорта данных

Недавно я начал внедрять solr-cloud на AWS EC2 для поисковых приложений. Я создал 2 экземпляра AWS Ec2 со следующими конфигурациями ---

  1. Тип EC2 - t2.medium
  2. оперативная память - 4 ГБ
  3. Место на диске - 8 ГБ
  4. ОС - ubuntu 18.04

Для двух экземпляров EC2 я создал группу безопасности, которая разрешает весь входящий трафик. NACL имеет настройки по умолчанию, которые также разрешают весь входящий трафик.

Следующие шаги для установки Apache Solr -

  1. ssh в ec2:
ssh -i "pem_file" ubuntu@ec2-public-ipv4-address
  1. cd в каталог / opt
  2. запустить -> sudo apt-update
  3. запустить -> sudo apt-get openjdk-11
  4. Проверить java -версию
  5. запустить -> wget https://archive.apache.org/dist/lucene/solr/8.3.0/solr-8.3.0.tgz
  6. запустить -> tar -xvzf solr-8.3.0.tgz
  7. export SOLR_HOME=/opt/solr-8.3.0
  8. Добавьте /opt/solr-8.3.0 в переменную среды Path
  9. Обновите файл sudo vim / etc / hosts, указав хосты - a. общедоступный IP-v4-адрес-из-EC2 Solr-node-1
  10. Запустил Solr, используя следующую команду -> sudo bin/solr start -c -p 8983 -h solr-node-1 -force
  11. Проверял открытые порты с помощью -> sudo lsof -i -P -n | grep LISTEN
  12. Создавал коллекции, шарды и реплики с помощью ---> bin/solr create -c travasko -d sample_techproducts_configs -n travasko_configs -shards 2 -rf 2 -p 8983

Я повторил тот же процесс на другом компьютере EC2 и запустил на нем solr. Теперь, чтобы использовать обработчик импорта данных в solr, я отредактировал следующие файлы:

  1. solrconfig.xml
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
      <str name="config">data-config.xml</str>
    </lst>
</requestHandler>
  1. данные-config.xml
<dataConfig>
<dataSource type="JdbcDataSource" 
            driver="com.mysql.jdbc.Driver"
            url="jdbc:mysql://examplerds.cuhj86yfdpid.us-east-1.rds.amazonaws.com:3306/TRAVASKODB1" 
            user="examplerds" 
            password="examplerds#123"/>
<document>
  <entity name="MOMENTS"  
    pk="MOMENT_ID"
    query="SELECT MOMENT_ID,MOMENT_TEXT FROM MOMENTS"
    deltaImportQuery="SELECT MOMENT_ID,MOMENT_TEXT FROM MOMENTS WHERE MOMENT_ID='${dih.delta.MOMENT_ID}'"
    deltaQuery="SELECT MOMENT_ID FROM MOMENTS  WHERE LAST_MODIFIED > '${dih.last_index_time}'"
    >
     <field column="MOMENT_ID" name="MOMENT_ID"/>
     <field column="MOMENT_TEXT" name="MOMENT_TEXT"/>       
  </entity>
</document>
</dataConfig>
  1. управляемая_схема
<schema name="MOMENTS" version="1.5">
    <field name="_version_" type="long" indexed="true" stored="true"/>
    <field name="MOMENT_ID" type="integer" indexed="true" stored="true" required="true" multiValued="false" /> 
    <field name="MOMENT_TEXT" type="string" indexed="true" stored="true" multiValued="false" />
</schema>
  1. Скачал mysql jdbc, используя следующую команду:
wget -q "http://search.maven.org/remotecontent?filepath=mysql/mysql-connector-java/5.1.32/mysql-connector-java-5.1.32.jar" -O mysql-connector-java.jar
  1. Добавьте в solrconfig.xml:
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql-connector-java.jar" />

  1. После редактирования файлов выше я загрузил их в solr-cloud, используя следующую команду zookeper ->
bin/solr zk -n travasko_config -z solr-node-1:9983 cp /opt/solr-8.3.0/server/solr/configsets/_default/conf/managed-schema zk:/configs/travasko_config/managed-schema
  1. Затем я проверил все указанные выше файлы в облаке solr и заметил внесенные мной изменения.
  2. Текущая проблема заключается в том, что когда я выбираю коллекцию, созданную мной выше, и нажимаю Dataimport, она выдает ошибку, как показано ниже --->
The solrconfig.xml file for this index does not have an operational DataImportHandler defined!

Примечание. Экземпляры AWS RDS и EC2 находятся в одном VPC и имеют одну и ту же группу безопасности.

Так почему же файл solrconfig.xml выдает ошибку при импорте данных? Что мне здесь не хватает?


person Vinit Kumar    schedule 07.04.2020    source источник
comment
Когда вы запускаете Solr в облачном режиме с -c, конфигурации сохраняются в Zookeeper - см. Использование Zookeeper для управления файлами конфигурации. По сути, вы, вероятно, не сделали свои изменения видимыми для Solr, поскольку они недоступны до загрузки в Zookeeper. Вдобавок - будьте очень осторожны при раскрытии Solr на публичных IP-адресах без дополнительной защиты; он не предназначен для публичного доступа.   -  person MatsLindh    schedule 07.04.2020
comment
@MatsLindh, я свой ответ отредактировал выше. Я запустил команды zookeeper, чтобы загрузить файлы. Кроме того, на этом этапе я хотел настроить solr и, следовательно, не уделял внимания безопасности. Как только я успешно реализую базовую модель, я обязательно ее включу.   -  person Vinit Kumar    schedule 07.04.2020
comment
Согласно вашей zk команде вы загрузили только управляемую схему? Вы хотите загрузить полный набор конфигураций: stackoverflow.com/questions/50238528/   -  person MatsLindh    schedule 07.04.2020
comment
@MatsLindh Я фактически добавил весь набор конфигураций. Приведенная выше команда zookeeper предназначена для моего последнего обновления файла manaed_schema. Забыл об этом упомянуть.   -  person Vinit Kumar    schedule 07.04.2020


Ответы (1)


Решение вышеуказанной проблемы в основном заключалось в установке системного свойства java для версий solr выше 8.2.0, как показано ниже:

-Denable.dih.dataConfigParam=true

Этот параметр может быть установлен либо в solr.in.cmd, либо в solr.in.sh, который находится в каталоге ниже:,

/opt/solr-8.3.0/bin 

Если /opt/solr-8.3.0 - это каталог установки solr.

Другой метод заключался в передаче этого параметра в качестве параметра командной строки при запуске solr, как показано ниже:

sudo bin/solr start -c -p 8983 -h solr-node-1 -Denable.dih.dataConfigParam=true -force

solr-node-1 - это общедоступный IPv4-адрес экземпляра AWS Ec2, на котором настроен solr.

person Vinit Kumar    schedule 10.04.2020