solrCloud+tomcat+zookeeper配置

solrCloud+tomcat+zookeeper配置

2015年1月剛入職新公司時,項目中有用到了solr,但只搞了一個商品標籤搜索,領導讓我研究一下,把商品的搜索和標籤搜索一起放到solr裏,放兩個核心,當時放兩個核心時折騰了好久,好在搞出來了,當時最新版本是solr-4.10.3,現在更新好多版本了,現在已經從老東家離職,突然想起那入職第一週從來沒接觸過這個,並搞定這個環境的安裝,記下這段文字作紀念。當然了好多人推薦用elasticsearch做。用什麼做看你自己的想法,看你領導的要求。。好吧,下面是當時的安裝步驟。。。

需要用到以下的軟件:

solr-4.10.3  zookeeper-3.4.6.tar.gz  apache-tomcat-7.0.57

 

首先在/opt 目錄下新建 solr_platform (mkdir solr_platform)

 

進入 solr_platform (zookeeper solr tomcat 都安裝在該目錄中)

 

一 zookeeper安裝

  1 解壓縮zookeeper ———— tar -zxvf zookeeper-3.4.6.tar.gz

  2 在solr_platform目錄下新建zookeeper_data和zookeeper_log文件夾(如圖1)所示

 

圖1

  3 修改配置:每臺機器都複製conf下的zoo_sample.cfg爲zoo.cfg,並在zoo.cfg刪除以前的配置,加現如下配置

  tickTime=2000

  initLimit=10

  syncLimit=5

  dataDir=/opt/solr_platform/zookeeper_data

  dataLogDir=/opt/solr_platform/zookeeper_log

  clientPort=2181

  server.1=ip1:2888:3888

  #server.2=ip2:2889:3889

  #server.3=ip3:2890:3890

  注:其中ip1、ip2爲機器的ip,添加前請確保每臺機器的2888和3888端口沒有被佔用。(有多臺機器,server.2,server.3就是其他機器的zookeeper)

 

  4 並且在zookeeper_data文件夾下新建myid文件,裏面寫一個1(文件沒有後綴名,第二臺機子myid文件裏面寫2,第三臺寫3以此內推)如(圖2)所示

圖2

 

二 solr安裝

 

 1 首先在solr_platform目錄下新建solr_home_1文件夾

 2 解壓縮solr-4.10.3文件,將solr-4.10.3/example/solr所有的東西複製到 solr_home_1

 3 新建一個data-config.xml文件,添加如下內容:

 <?xml version="1.0" encoding="utf-8"?>   

<dataConfig> 

 <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"   

   url="jdbc:mysql://192.168.7.154:3306/merchant"   

   user="wechatadmin"   

   password="portal!(!)cp"/> 

   <document> 

      <entity name="label" pk="id" query="select a.id as id,a.name as name from mer_label a">   

          <field column="id" name="id" />   

          <field column="name" name="name" />    

      </entity>

 </document>  

</dataConfig>

並將該文件放在/opt/solr_platform/solr_home_1/collection1/conf目錄中 如(圖3)所示

(圖3)

 

4 修改/opt/solr_platform/solr_home_1/collection1/conf目錄下的solrconfig.xml文件

將如下內容  如(圖4) (圖5)所示

  <lib dir="${solr.install.dir:../../..}/contrib/extraction/lib" regex=".*\.jar" />

  <lib dir="${solr.install.dir:../../..}/dist/" regex="solr-cell-\d.*\.jar" />

 

  <lib dir="${solr.install.dir:../../..}/contrib/clustering/lib/" regex=".*\.jar" />

  <lib dir="${solr.install.dir:../../..}/dist/" regex="solr-clustering-\d.*\.jar" />

 

  <lib dir="${solr.install.dir:../../..}/contrib/langid/lib/" regex=".*\.jar" />

  <lib dir="${solr.install.dir:../../..}/dist/" regex="solr-langid-\d.*\.jar" />

 

  <lib dir="${solr.install.dir:../../..}/contrib/velocity/lib" regex=".*\.jar" />

  <lib dir="${solr.install.dir:../../..}/dist/" regex="solr-velocity-\d.*\.jar" />

  替換爲:

  <lib dir="../../contrib/extraction/lib" regex=".*\.jar" />

 

  <lib dir="../../contrib/clustering/lib/" regex=".*\.jar" />

 

  <lib dir="../../contrib/dataimporthandler/lib/" regex=".*\.jar" />

 

  <lib dir="../../contrib/langid/lib/" regex=".*\.jar" />

 

  <lib dir="../../contrib/velocity/lib" regex=".*\.jar" />

  <lib dir="../../dist/" regex=".*\.jar" />

圖4

圖5

  在 solrconfig.xml文件<requestHandler name="/select" class="solr.SearchHandler"> 這一行前添加

 <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">   

 <lst name="defaults">   

  <str name="config">data-config.xml</str>   

 </lst>   

</requestHandler>

如(圖6)所示

圖6

 

5將解壓縮的solr-4.10.3目錄下的dist文件夾和contrib都拷貝到/opt/solr_platform/solr_home_1下 如(圖7)所示

圖7

 

三 solr web端安裝

1解壓tomcat7並其重命名爲tomcat_1,將solr-4.10.3\dist目錄下的solr-4.10.3.war文件解壓到 /opt/solr_platform/tomcat_1/webapps下

注:要手動解壓

 

2在/opt/solr_platform/tomcat_1/webapps/solr/WEB-INF目錄下新建classes文件夾

複製solr-4.10.3\example\resources目錄下的log4j.properties文件到 /opt/solr_platform/tomcat_1/webapps/classes下(圖8所示)

圖8

 

3複製solr-4.10.3\example\lib\ext下所有的jar文件到/opt/solr_platform/tomcat_1/webapps/solr/WEB-INF/lib目錄下 (圖9所示)

圖9

4複製solr-4.10.3\dist下的solr-dataimporthandler-4.10.3.jar,solr-dataimporthandler-extras-4.10.3.jar到/opt/solr_platform/tomcat_1/webapps/solr/WEB-INF/lib目錄下

(圖10)所示

5添加一個mysql-connector-java-5.1.20-bin.jar到/opt/solr_platform/tomcat_1/webapps/solr/WEB-INF/lib目錄下(圖11)所示

圖11

6將/opt/solr_platform/tomcat_1/webapps/solr/WEB-INF/web.xml文件

下的

    <env-entry>

       <env-entry-name>solr/home</env-entry-name>

       <env-entry-value>/put/your/solr/home/here</env-entry-value>

       <env-entry-type>java.lang.String</env-entry-type>

    </env-entry>

 改爲:

    <env-entry> 

   <env-entry-name>solr/home</env-entry-name> 

   <env-entry-value>/opt/solr_platform/solr_home_1</env-entry-value> 

   <env-entry-type>java.lang.String</env-entry-type> 

</env-entry> 

如(圖12,圖13)所示

圖12

圖13

 

四 複製/opt/solr_platform/solr_home_1/下的collection1文件夾重命名爲:mycore

(圖14)所示

圖14

1修改/opt/solr_platform/solr_home_1/mycore/conf下的data-config.xml爲

<?xml version="1.0" encoding="utf-8"?>   

<dataConfig> 

 <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"   

   url="jdbc:mysql://192.168.7.154:3306/merchant"   

   user="wechatadmin"   

   password="portal!(!)cp"/> 

   <document> 

      <entity name="productname" query="select t.id,t.pro_name,t.label_name,CONVERT(t.audit_status,SIGNED) audit_status,CONVERT(t.publish_status,SIGNED) publish_status from mer_product t left join mer_black_user b  ON t.user_id = b.user_id WHERE b.ID IS  NULL AND t.audit_status IN (2, 4) AND t.publish_status = 1">   

          <field column="id" name="id" />   

          <field column="label_name" name="label_name" />   

             <field column="pro_name" name="pro_name" />

             <field column="publish_status" name="publish_status" />

             <field column="audit_status" name="audit_status" />

            

      </entity> 

 </document>  

</dataConfig> 

 

2在/opt/solr_platform/solr_home_1/mycore/conf下schema.xml文件添加

   <field name="pro_name" type="string" indexed="true" stored="true"/>

   <field name="label_name" type="string" indexed="true" stored="true"/> 

   <field name="publish_status" type="string" indexed="true" stored="true"/>

   <field name="audit_status" type="string" indexed="true" stored="true"/> 

 

3修改/opt/solr_platform/solr_home_1下的solr.xml文件

<solr>

    <cores adminPath="/admin/cores"  host="${host:}"  hostPort="${jetty.port:對應的tomcat端口號}" hostContext="${hostContext:solr}">

    <core name="collection1" instanceDir="collection1" />

      <core name="mycore" instanceDir="mycore" />

          <shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">

      <str name="urlScheme">${urlScheme:}</str>

    </shardHandlerFactory>

  </cores>

</solr>

五tomcat配置信息

 1修改/opt/solr_platform/tomcat_1/bin下的catalina.sh文件

 添加配置

 JAVA_OPTS="-Dsolr.solr.home=/opt/solr_platform/solr_home_1 -Dbootstrap_conf=true -Dcollection.configName=myconftt  -DnumShards=2 -DzkHost=zookeeper機器ip:2181"

 -DzkHost指向的是zookeeper的址,-Dsolr.solr.home指向的是solr的配置信息,-DnumShards是幾個碎片

 

六 將上面的tomcat整體複製一份重命名爲tomcat_2,將solr_home_1整體複製一份重命名爲solr_home_2

1 修改/opt/solr_platform/tomcat_2/bin下的catalina.sh文件

JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=/opt/solr_platform/solr_home_2  -DzkHost=zookeeper機器ip:2181"

 

2 修改/opt/solr_platform/tomcat_2/webapps/solr/WEB-INF/web.xml文件

    <env-entry> 

   <env-entry-name>solr/home</env-entry-name> 

   <env-entry-value>/opt/solr_platform/solr_home_2</env-entry-value> 

   <env-entry-type>java.lang.String</env-entry-type> 

</env-entry>

 

七啓動

啓動時,先啓動zookeeper,(bin/zkServer.sh start)

然後啓動tomcat

注:ZooKeeper集羣啓動的時候,每個結點都試圖去連接集羣中的其它結點,先啓動的肯定連不上後面還沒啓動的,所以上面日誌前面部分的異常是可以忽略的。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章