Solr+tomcat分布式集群部署

本文以solr-5.5.2讲述solr+tomcat的单机分布式的部署

准备工作:

1、JDK1.7

2、zookeeper-3.5.1-alpha.tar.gz

3、apache-tomcat-8.0.30.zip

4、solr-5.5.2.zip

扫描二维码关注公众号,回复: 357119 查看本文章

5、CentOS release 6.6

 

关键字说明:

Collection:在SolrCloud集群中逻辑意义上的完整的索引。它常常被划分为一个或多个Shard,它们使用相同的Config Set。如果Shard数超过一个,它就是分布式索引,SolrCloud让你通过Collection名称引用它,而不需要关心分布式检索时需要使用的和Shard相关参数。

Core:也就是Solr Core,一个Solr中包含一个或者多个Solr Core,每个Solr Core可以独立提供索引和查询功能,每个Solr Core对应一个索引或者Collection的Shard,Solr Core的提出是为了增加管理灵活性和共用资源。在SolrCloud中有个不同点是它使用的配置是在Zookeeper中的,传统的Solr core的配置文件是在磁盘上的配置目录中。

Leader:赢得选举的Shard replicas。每个Shard有多个Replicas,这几个Replicas需要选举来确定一个Leader。选举可以发生在任何时间,但是通常他们仅在某个Solr实例发生故障时才会触发。当索引documents时,SolrCloud会传递它们到此Shard对应的leader,leader再分发它们到全部Shard的replicas。

Replica:Shard的一个拷贝。每个Replica存在于Solr的一个Core中。一个命名为“test”的collection以numShards=1创建,并且指定replicationFactor设置为2,这会产生2个replicas,也就是对应会有2个Core,每个在不同的机器或者Solr实例。一个会被命名为test_shard1_replica1,另一个命名为test_shard1_replica2。它们中的一个会被选举为Leader。

 

Shard:Collection的逻辑分片。每个Shard被化成一个或者多个replicas,通过选举确定哪个是Leader。

附图:这是我的目录结构 

       基于个人虚拟机的原因,全是用root用户操作的,若在开发中遇到不可预测错误,不排除权限问题造成。

Hadoop为zookeeper伪集群目录 详细就参考http://coolxing.iteye.com/blog/1871009

 

A.   设置tomcat    复制三份tomcat,分别为tomcat8082、tomcat8083、tomcat8084,修改tomcat/conf/server.xml的各端口

 

B.   设置solrhome  复制三份solrhome,进入/root/solr/solr-5.5.2/server/solr,将solr复制三份,为了方便区别,命名为solrhome8082,solrhome8083,solrhome8084,并修改各solrhome下的solr.xml

<solr>
  <solrcloud>
    <str name="host">192.168.187.129</str>//tomcat的IP地址
    <int name="hostPort">8082</int>	//对应的tomcat端口
    <str name="hostContext">/solr</str>	//solr的webapp名字

    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>

    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>
    <int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>
    <str name="zkCredentialsProvider">${zkCredentialsProvider:org.apache.solr.common.cloud.DefaultZkCredentialsProvider}</str>
    <str name="zkACLProvider">${zkACLProvider:org.apache.solr.common.cloud.DefaultZkACLProvider}</str>

  </solrcloud>

  <shardHandlerFactory name="shardHandlerFactory"
    class="HttpShardHandlerFactory">
    <int name="socketTimeout">${socketTimeout:600000}</int>
    <int name="connTimeout">${connTimeout:60000}</int>
  </shardHandlerFactory>
</solr>

C.设置solr webapp

  a)   进入/root/solr/solr-5.5.2/server/solr-webapp,将webapp复制三份,分别为solr8082、solr8083、solr8084,修改solr8082/WEB-INF/web.xml

<env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value> /root/solr/solr-5.5.2/server/solrhome8082</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
</env-entry>

    solr8083、solr8084的修改大同,注意:默认以上代码是注释的

    b)   Copy对应的jar包到webapp/WEB-INF/lib下

      1.   路径/root/solr/solr-5.5.2/server/lib/ext下的所有包

      2.   路径/root/solr/solr-5.5.2/dist下的solr-dataimporthandler-5.5.2.jar,solr-dataimporthandler-extras-5.5.2.jar包,用于数据库导入数据

      3.   上传mysql连接包mysql-connector-java-5.1.35.jar

         4.  路径/root/solr/solr-5.5.2/dist下的solr-dataimporthandler-5.5.2.jar,solr-dataimporthandler-extras-5.5.2.jar包,用于数据库导入数据

       c)   修改tomcat/conf/server.xml 各docBase需修改对应路径

<Context docBase="/root/solr/solr-5.5.2/server/solr-webapp/solr8082" path="/solr" reloadable="false" source="org.eclipse.jst.j2ee.server:solr"/>

   

     D.   设置 JAVA_OPTS 进入tomcat8082/bin下,修改catalina.sh 加下如下参数:

JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=/root/solr/solr-5.5.2/server/solrhome8082 -DzkHost=192.168.187.129:12181,192.168.187.129:12182,192.168.187.129:12183"

     solr8083、solr8084的修改大同.

 

     E.    生成collection

      a)      进入/root/solr/solr-5.5.2/server/solr/configsets 复制sample_techproducts_configs,命名为core1,修改core1/conf下的schema.xml文件,(默认此文件不存在,新建一个)

<fields>
        		<field name="core1" type="string" indexed="true" stored="false"/>
</fields>

 这步有点玄乎,开始我建的时候,没有此文件报错,建立此文件后,发现新建的field.core1并没有生效

      b)       创建数据导入文件data-config.xml

<dataConfig>
    <dataSource type="JdbcDataSource"
              driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://172.20.11.129:3306/zjpedometerdb"
              user="root"
              password="root" />
    <document>
        <entity name="solr_test" transformer="DateFormatTransformer"
            query="select concat('menu.',MENU_ID) id,MENU_NAME subject,URL description from sys_menus where '${dataimporter.request.clean}' != 'false' ">

        </entity>
        <entity name="solr_user" 
            query="select concat('user.',user_id) id,user_name subject,user_password description from sys_users where '${dataimporter.request.clean}' != 'false' ">

        </entity>
    </document>
</dataConfig>

          c)      修改core1/conf/solrconfig.xml 在config下加入

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
        <lst name="defaults">
            <str name="config">data-config.xml</str>
        </lst>
    </requestHandler>  

        d)      上传配置至zookeeper

java -classpath .:/root/solr/solr-5.5.2/server/solr-webapp/solr8082/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 192.168.187.129:12181,192.168.187.129:12182,192.168.187.129:12183 -confdir /root/solr/solr-5.5.2/server/core1/conf  -confname core1

 注:以上命令也可用于更新配置,如果更新单个文件,用

java -classpath .:/root/solr/solr-5.5.2/server/solr-webapp/solr8082/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -zkhost 192.168.187.129:12181,192.168.187.129:12182,192.168.187.129:12183 -cmd putfile /configs/core1/schema.xml /root/solr/solr-5.5.2/server/core1/conf/schema.xml

    /configs/core1/schme.xml 是zookeeper文件路径,core1是配置文件路径名

 /root/solr/solr-5.5.2/server/core1/conf/schema.xml 本地文件

    启动各tomcat.打开任意tomcat.solr

 

         e)  创建一个collection 切换到/root/solr/solr-5.5.2

./bin/solr create_collection -c core1 -d /root/solr/solr-5.5.2/server/core1/conf -shards 3 -replicationFactor 3 -p 8082

        f)  关联配置

java -classpath .:/root/solr/solr-5.5.2/server/solr-webapp/solr8082/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection core1 -confname core1 -zkhost 192.168.187.129:12181,192.168.187.129:12182,192.168.187.129:12183

        g)      检测collection是否成功创建,在Solr UI中刷新页面,点击Cloud如果成功创建了Collection会显示出Solr的集群拓扑



 选中一个core,


 

 选中data-config.xml构建的dataimport

 



  点击Execute

 



 

请求2次,分别是两个 entity,导入17条数据

 

点击左边的query,点击execute query,查询结果如下。


 
 基本塔建已经完成,配上nginx负载均衡,第一次发表文档,有不足之处,请留言。

 

 

 

 

 

 

 

 

猜你喜欢

转载自jers.iteye.com/blog/2311044