转载请出自出处:http://www.cnblogs.com/hd3013779515/

我们基于Solr4.10.3版本进行安装配置SolrCloud集群,通过实践来实现索引数据的分布存储和检索。

一、准备工作

1.服务器

  1. solrcloud01 192.168.137.171
  2.  
  3. solrcloud02 192.168.137.172
  4.  
  5. solrcloud03 192.168.137.173

2.资源文件

上传到/home/test

  1. apache-solr-dataimportscheduler.jar 数据导入定时器
  2.  
  3. IK Analyzer 2012FF_hf1.zip 中文分词器
  4.  
  5. solr-4.10.3.tgz.tar
  6.  
  7. zookeeper-3.4.5.tar.gz
  8.  
  9. mysql-connector-java-3.1.13-bin.jar

以上资源可以从百度网盘获取。

链接:http://pan.baidu.com/s/1mhNbTxA 密码:8xnl

3.安装目录准备

  1. mkdir -p /home/solr/cloud
  2.  
  3. cd /home/solr/cloud
  4.  
  5. mkdir lib multicore data

二、zookeeper集群搭建

在3台服务器中搭建zookeeper服务。

  1. 进行解压: tar -zxvf zookeeper-3.4.5.tar.gz
  2. 重命名: mv zookeeper-3.4.5 /usr/local/zookeeper
  3. 修改环境变量: vi /etc/profile
  4. export ZOOKEEPER_HOME=/usr/local/zookeeper
  5. export PATH=.:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH
  6. 刷新: source /etc/profile
  7. zookeeper下修改配置文件
  8. cd /usr/local/zookeeper/conf
  9. mv zoo_sample.cfg zoo.cfg
  10. 修改conf: vi zoo.cfg 修改两处
  11. dataDir=/usr/local/zookeeper/data
  12. 最后面添加
  13. server.0=bhz:2888:3888
  14. server.1=hadoop1:2888:3888
  15. server.2=hadoop2:2888:3888
  16. 服务器标识配置:cd /usr/local/zookeeper/
  17. 创建文件夹:mkdir data
  18. cd data
  19. 创建文件myid并填写内容为0vi myid (内容为服务器标识 0)
  20. 其他两个服务器的值修改为12
  21. 启动zookeeper
  22. 路径:/usr/local/zookeeper/bin
  23. 执行:zkServer.sh start (注意这里3台机器都要进行启动)
  24. 状态:zkServer.sh status(在三个节点上检验zkmode,一个leader和俩个follower)
  25. 停止:zkServer.sh stop
  26. 启动验证:输入jps,存在 QuorumPeerMain 进程的话,就说明 Zookeeper 启动成功了。

三、SolrCloud集群搭建

首先在一个节点上对SOLR进行配置,我们选择192.168.137.171节点。
1.SOLR基本配置

(1)解压solr tar文件并把solr.war文件copy到tomcat的webapps下面

  1. cd /home/test
  2.  
  3. tar -zxvf solr-4.10.3.tgz.tar -C /usr/local
  4.  
  5. cp /usr/local/solr-4.10.3/example/webapps/solr.war /home/tomcat6/webapps/
  6.  
  7. cd /home/tomcat6/webapps/ && mkdir solr-cloud && unzip solr.war -d solr-cloud && rm -rf solr.war

(2)copy日志关联jar到solr工程的lib下面

  1. cp /usr/local/solr-4.10.3/example/lib/ext/*.jar /home/tomcat6/webapps/solr-cloud/WEB-INF/lib/
  2. cp /home/tomcat6/webapps/solr-cloud/WEB-INF/lib/*.jar /home/solr/cloud/lib/

(3)增加log配置文件

  1. mkdir -p /home/tomcat6/webapps/solr-cloud/WEB-INF/classes
  2. cp /usr/local/solr-4.10.3/example/resources/log4j.properties /home/tomcat6/webapps/solr-cloud/WEB-INF/classes/

(4)修改编码

vim /home/tomcat6/conf/server.xml里面加上编码设置

(5)slor core配置文件

首先建立关联目录

  1. cd /home/solr/cloud/multicore && mkdir collection1 && touch solr.xml zoo.cfg && cd collection1 && mkdir conf data && cd conf && touch schema.xml solrconfig.xml solrcore.properties

其次写好配置文件

vim /home/solr/cloud/multicore/collection1/conf/schema.xml

  1. <?xml version="1.0" ?>
  2.  
  3. <schema name="example core two" version="1.1">
  4. <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true" />
  5. <field name="stu_name" type="text_ik" indexed="true" stored="true" multiValued="false" />
  6. <field name="stu_sex" type="int" indexed="true" stored="true" multiValued="false" />
  7. <field name="stu_address" type="text_ik" indexed="true" stored="true" multiValued="false" />
  8. <field name="_version_" type="long" indexed="true" stored="true" />
  9.  
  10. <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
  11. <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
  12. <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
  13. <fieldType name="text_ik" class="solr.TextField">
  14. <analyzer type="index" class="org.wltea.analyzer.lucene.IKAnalyzer" isMaxWordLength="false"/>
  15. <analyzer type="query" class="org.wltea.analyzer.lucene.IKAnalyzer" isMaxWordLength="true"/>
  16. </fieldType>
  17.  
  18. <uniqueKey>id</uniqueKey>
  19. <defaultSearchField>stu_name</defaultSearchField>
  20. <solrQueryParser defaultOperator="OR" />
  21. </schema>

vim /home/solr/cloud/multicore/collection1/conf/solrconfig.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2.  
  3. <config>
  4. <luceneMatchVersion>4.10.3</luceneMatchVersion>
  5.  
  6. <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.StandardDirectoryFactory}"/>
  7.  
  8. <dataDir>${solr.shard.data.dir:}</dataDir>
  9.  
  10. <schemaFactory class="ClassicIndexSchemaFactory"/>
  11.  
  12. <updateHandler class="solr.DirectUpdateHandler2">
  13. <updateLog>
  14. <str name="dir">${solr.shard.data.dir:}</str>
  15. </updateLog>
  16. </updateHandler>
  17. <requestHandler name="/update/csv" class="solr.CSVRequestHandler" startup="lazy">
  18. <lst name="defaults">
  19. <str name="separator">,</str>
  20. <str name="header">true</str>
  21. <str name="encapsulator">"</str>
  22. </lst>
  23. </requestHandler>
  24.  
  25. <!-- realtime get handler, guaranteed to return the latest stored fields
  26. of any document, without the need to commit or open a new searcher. The current
  27. implementation relies on the updateLog feature being enabled. -->
  28. <requestHandler name="/get" class="solr.RealTimeGetHandler">
  29. <lst name="defaults">
  30. <str name="omitHeader">true</str>
  31. </lst>
  32. </requestHandler>
  33.  
  34. <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
  35.  
  36. <requestDispatcher handleSelect="true" >
  37. <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" formdataUploadLimitInKB="2048" />
  38. </requestDispatcher>
  39.  
  40. <requestHandler name="standard" class="solr.StandardRequestHandler" default="true" />
  41. <requestHandler name="/analysis/field" startup="lazy" class="solr.FieldAnalysisRequestHandler" />
  42. <requestHandler name="/update" class="solr.UpdateRequestHandler" />
  43. <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
  44.  
  45. <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
  46. <lst name="invariants">
  47. <str name="q">solrpingquery</str>
  48. </lst>
  49. <lst name="defaults">
  50. <str name="echoParams">all</str>
  51. </lst>
  52. </requestHandler>
  53. <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
  54. <lst name="defaults">
  55. <str name="config">data-config.xml</str>
  56. </lst>
  57. </requestHandler>
  58.  
  59. <query>
  60. <maxBooleanClauses>1024</maxBooleanClauses>
  61. <filterCache class="solr.FastLRUCache"
  62. size="512"
  63. initialSize="512"
  64. autowarmCount="0"/>
  65.  
  66. <queryResultCache class="solr.LRUCache"
  67. size="512"
  68. initialSize="512"
  69. autowarmCount="0"/>
  70.  
  71. <documentCache class="solr.LRUCache"
  72. size="512"
  73. initialSize="512"
  74. autowarmCount="0"/>
  75.  
  76. <!-- custom cache currently used by block join -->
  77. <cache name="perSegFilter"
  78. class="solr.search.LRUCache"
  79. size="10"
  80. initialSize="0"
  81. autowarmCount="10"
  82. regenerator="solr.NoOpRegenerator" />
  83.  
  84. <enableLazyFieldLoading>true</enableLazyFieldLoading>
  85.  
  86. <queryResultWindowSize>20</queryResultWindowSize>
  87.  
  88. <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
  89.  
  90. <listener event="newSearcher" class="solr.QuerySenderListener">
  91. <arr name="queries">
  92.  
  93. </arr>
  94. </listener>
  95. <listener event="firstSearcher" class="solr.QuerySenderListener">
  96. <arr name="queries">
  97. <lst>
  98. <str name="q">static firstSearcher warming in solrconfig.xml</str>
  99. </lst>
  100. </arr>
  101. </listener>
  102.  
  103. <useColdSearcher>false</useColdSearcher>
  104.  
  105. <maxWarmingSearchers>2</maxWarmingSearchers>
  106.  
  107. </query>
  108. <!-- config for the admin interface -->
  109. <admin>
  110. <defaultQuery>solr</defaultQuery>
  111. </admin>
  112.  
  113. </config>

vim /home/solr/cloud/multicore/collection1/conf/solrcore.properties

  1. solr.shard.data.dir=/home/solr/cloud/data

属性solr.shard.data.dir在solrconfig.xml文件中被引用过,指定索引数据的存放位置。

vim /home/solr/cloud/multicore/solr.xml

该文件中指定了ZooKeeper的相关配置,已经Solr Core的配置内容:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2.  
  3. <solr persistent="true">
  4. <cores defaultCoreName="collection1" host="${host:}" adminPath="/admin/cores" zkClientTimeout="${zkClientTimeout:15000}" hostPort="8080" hostContext="${hostContext:solr-cloud}">
  5. </cores>
  6. </solr>

注意:这里,我们并没有配置任何的core元素,这个等到整个配置安装完成之后,通过SOLR提供的REST接口,来实现Collection以及Shard的创建,从而来更新这些配置文件。

vim /home/solr/cloud/multicore/zoo.cfg

  1. # The number of milliseconds of each tick
  2. tickTime=2000
  3. # The number of ticks that the initial
  4. # synchronization phase can take
  5. initLimit=10
  6. # The number of ticks that can pass between
  7. # sending a request and getting an acknowledgement
  8. syncLimit=5
  9.  
  10. # the directory where the snapshot is stored.
  11. # dataDir=/opt/zookeeper/data
  12. # NOTE: Solr defaults the dataDir to <solrHome>/zoo_data
  13.  
  14. # the port at which the clients will connect
  15. # clientPort=2181
  16. # NOTE: Solr sets this based on zkRun / zkHost params

(6)DIH全量增量从Mysql数据库导入数据的配置

cp /usr/local/solr-4.10.3/dist/solr-dataimporthandler-4.10.3.jar /home/tomcat6/webapps/solr-cloud/WEB-INF/lib/

cp /home/test/mysql-connector-java-3.1.13-bin.jar /home/tomcat6/webapps/solr-cloud/WEB-INF/lib/

vim /home/solr/cloud/multicore/collection1/conf/data-config.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <dataConfig>
  3. <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.137.171:3306/solr" user="root" password="root" batchSize="-1" />
  4. <document name="testDoc">
  5. <entity name="student" pk="id"
  6. query="select * from student where isDeleted=0"
  7. deltaImportQuery="select * from student where id='${dih.delta.id}'"
  8. deltaQuery="select id from student where updateTime> '${dataimporter.last_index_time}' and isDeleted=0"
  9. deletedPkQuery="select id from student where isDeleted=1">
  10. <field column="id" name="id"/>
  11. <field column="stu_name" name="stu_name"/>
  12. <field column="stu_sex" name="stu_sex"/>
  13. <field column="stu_address" name="stu_address"/>
  14. </entity>
  15. </document>
  16. </dataConfig>

cp /home/test/apache-solr-dataimportscheduler.jar /home/tomcat6/webapps/solr-cloud/WEB-INF/lib/

vim /home/tomcat6/webapps/solr-cloud/WEB-INF/web.xml
为<web-app>元素添加一个子元素

  1. <listener>
  2. <listener-class>
  3. org.apache.solr.handler.dataimport.scheduler.ApplicationListener
  4. </listener-class>
  5. </listener>

mkdir –p /home/solr/cloud/multicore/conf

vim /home/solr/cloud/multicore/conf/dataimport.properties

下面是最终我的自动定时更新配置文件内容:syncCores需要在各服务器单独配置

  1. #################################################
  2. # #
  3. # dataimport scheduler properties #
  4. # #
  5. #################################################
  6.  
  7. # to sync or not to sync
  8. # 1 - active; anything else - inactive
  9. syncEnabled=1
  10.  
  11. # which cores to schedule
  12. # in a multi-core environment you can decide which cores you want syncronized
  13. # leave empty or comment it out if using single-core deployment
  14. # syncCores=game,resource
  15. syncCores=myc_shard2_replica1
  16.  
  17. # solr server name or IP address
  18. # [defaults to localhost if empty]
  19. server=
  20.  
  21. # solr server port
  22. # [defaults to 80 if empty]
  23. port=8080
  24.  
  25. # application name/context
  26. # [defaults to current ServletContextListener's context (app) name]
  27. webapp=solr-cloud
  28.  
  29. # URLparams [mandatory]
  30. # remainder of URL
  31. #http://localhost:8983/solr/collection1/dataimport?command=delta-import&clean=false&commit=true
  32. params=/dataimport?command=delta-import&clean=false&commit=true
  33.  
  34. # schedule interval
  35. # number of minutes between two runs
  36. # [defaults to 30 if empty]
  37. interval=1
  38.  
  39. # 重做索引的时间间隔,单位分钟,默认7200,即1天;
  40. # 为空,为0,或者注释掉:表示永不重做索引
  41. reBuildIndexInterval=0
  42.  
  43. # 重做索引的参数
  44. reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true
  45.  
  46. # 重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
  47. # 两种格式:2012-04-11 03:10:00 或者 03:10:00,后一种会自动补全日期部分为服务启动时的日期
  48. reBuildIndexBeginTime=03:10:00

(7)中文分词器关联配置

cd /home/test

unzip IK\ Analyzer\ 2012FF_hf1.zip -d IK

cd /home/test/IK

cp IKAnalyzer2012FF_u1.jar /home/tomcat6/webapps/solr-cloud/WEB-INF/lib/

cp IKAnalyzer.cfg.xml stopword.dic /home/tomcat6/webapps/solr-cloud/WEB-INF/classes/

2.ZooKeeper管理监控配置文件
SolrCloud是通过ZooKeeper集群来保证配置文件的变更及时同步到各个节点上,所以,需要将配置文件上传到ZooKeeper集群中:

  1. java -classpath .:/home/solr/cloud/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 192.168.137.171:2181,192.168.137.172:2181,192.168.137.173:2181 -confdir /home/solr/cloud/multicore/collection1/conf -confname myconf
  1.  
  1.  
  1. java -classpath .:/home/solr/cloud/lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection collection1 -confname myconf -zkhost 192.168.137.171:2181,192.168.137.172:2181,192.168.137.173:2181

上传完成以后,我们检查一下ZooKeeper上的存储情况:

zkCli.sh -server 192.168.137.171:2181

3.Tomcat配置与启动

vim /home/tomcat6/bin/catalina.sh
在Tomcat的启动脚本bin/catalina.sh中,增加如下配置:

  1. JAVA_OPTS="-server -Xmx128m -Xms128m -verbose:gc -Xloggc:solr_gc.log -Dsolr.solr.home=/home/solr/cloud/multicore -DzkHost=192.168.137.171:2181,192.168.137.172:2181,192.168.137.173:2181"
  1.  
  1. 启动Tomcat服务器:
  1. /home/tomcat6/bin/catalina.sh start
  1. 查看日志:
  1. tail -100f /home/tomcat6/logs/catalina.out
  1. 我们查看一下ZooKeeper中的数据状态,如下所示:

zkCli.sh -server 192.168.137.171:2181

  1. 这时候,SolrCloud集群中只有一个活跃的节点,而且默认生成了一个collection1实例,这个实例实际上虚拟的,因为通过web界面无法访问http://192.168.137.171:8080/solr-cloud/,看不到任何有关SolrCloud的信息,如图所示:

4.同步数据和配置信息,启动其他节点
在另外两个节点上安装Tomcat和Solr服务器,只需要拷贝对应的目录即可:

另外两个节点rm -rf /home/tomcat6

  1. scp -r /home/tomcat6/ root@192.168.137.172:/home/
  2.  
  3. scp -r /home/solr/ root@192.168.137.172:/home/
  4.  
  5. scp -r /home/tomcat6/ root@192.168.137.173:/home/
  6.  
  7. scp -r /home/solr/ root@192.168.137.173:/home/

启动其他Solr服务器节点:

  1. /home/tomcat6/bin/catalina.sh start
  1.  
  1. 查看日志:
  1. tail -100f /home/tomcat6/logs/catalina.out

查看ZooKeeper集群中数据状态:

zkCli.sh -server 192.168.137.171:2181

这时,已经存在3个活跃的节点了,但是SolrCloud集群并没有更多信息,访问http://192.168.137.171:8080/solr-cloud/后,同上面的图是一样的,没有SolrCloud相关数据。

5.创建CollectionShardReplication

(1)创建Collection及初始Shard

直接通过REST接口来创建Collection,如下所示:

curl 'http://192.168.137.171:8080/solr-cloud/admin/collections?action=CREATE&name=mycollection&numShards=3&replicationFactor=1'

more /home/solr/cloud/multicore/solr.xml

(2)创建Replication

下面对已经创建的初始分片进行复制。 shard1已经在192.168.137.173上,我们复制分片到192.168.137.171和192.168.137.172上,执行如下命令:

curl 'http://192.168.137.171:8080/solr-cloud/admin/cores?action=CREATE&collection=mycollection&name=mycollection_shard1_replica_2&shard=shard1'

curl 'http://192.168.137.172:8080/solr-cloud/admin/cores?action=CREATE&collection=mycollection&name=mycollection_shard1_replica_3&shard=shard1'

11.SolrCloud集群环境搭建的更多相关文章

  1. Linux环境下SolrCloud集群环境搭建关键步骤

    Linux环境下SolrCloud集群环境搭建关键步骤. 前提条件:已经完成ZooKeeper集群环境搭建. 一.下载介质 官网下载地址:http://www.apache.org/dyn/close ...

  2. Spark 1.6.1分布式集群环境搭建

    一.软件准备 scala-2.11.8.tgz spark-1.6.1-bin-hadoop2.6.tgz 二.Scala 安装 1.master 机器 (1)下载 scala-2.11.8.tgz, ...

  3. hadoop2集群环境搭建

    在查询了很多资料以后,发现国内外没有一篇关于hadoop2集群环境搭建的详细步骤的文章. 所以,我想把我知道的分享给大家,方便大家交流. 以下是本文的大纲: 1. 在windows7 下面安装虚拟机2 ...

  4. redis哨兵集群环境搭建

    一.哨兵的介绍 哨兵(sentinal)是redis集群架构中非常重要的一个组件,主要功能如下: 集群监控,负责监控redis master和slave进程是否正常工作 消息通知,如果某个redis实 ...

  5. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十一)定制一个arvo格式文件发送到kafka的topic,通过Structured Streaming读取kafka的数据

    将arvo格式数据发送到kafka的topic 第一步:定制avro schema: { "type": "record", "name": ...

  6. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(九)安装kafka_2.11-1.1.0

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  7. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(八)安装zookeeper-3.4.12

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  8. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(三)安装spark2.2.1

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  9. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二)安装hadoop2.9.0

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

随机推荐

  1. vue-router 知识点记录

    vue-router参数传递   1.在vue-router中,有两大对象被挂载到了实例this2.$route(只读.具备信息的对象).$router(具备函数功能).例:获取query用 this ...

  2. 启用sa账号

    第一部分: 如果在安装的时候选中的是Window身份验证,后来需要SQLServer身份验证登录,那么 一.先用window账号登录数据库 二.启用window身份验证和sql sever身份验证方式 ...

  3. SQL Server T—SQL 语句【查】

    一 查询数据(关键字:select) (1)简单查询        select * from 表名                    ——查全表 select 列名 from 表名 select ...

  4. 使用"+"进行字符串拼接

    本文来自:Hollis(微信号:hollischuang) 字符串,是Java中最常用的一个数据类型了.本文,也是对于Java中字符串相关知识的一个补充,主要来介绍一下字符串拼接相关的知识.本文基于j ...

  5. Android - AMS源码分析

    Android核心分析之AMS App和AMS(SystemServer进程)还有zygote进程分属于三个独立的进程 App与AMS通过Binder进行IPC通信,AMS(SystemServer进 ...

  6. 几个常用T_SQL语句比较

    UNION ALL VS UNION : union all 对两个结果进行并集操作,包括重复行,即所有的结果全部显示,不管是不是重复:union 对两个结果集进行并集操作,不包括重复行,相当于 di ...

  7. 使用eclipse上Tomcat插件配置域名、端口号、启动时间详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7856284.html 邮箱:moyi@moyib ...

  8. js实现分享到QQ

    js代码 <script src="http://connect.qq.com/widget/loader/loader.js" widget="shareqq&q ...

  9. js-权威指南-Web套接字

    HTTP是一种无状态的协议,,由客户端请求和服务端响应组成.HTTP实际上是比较特殊的网络协议. 大多数基于因特网的网络连接通常包含长连接和基于TCP套接字的双向消息交换.让不信任的客户端脚本访问底层 ...

  10. element-ui Collapse 折叠面板源码分析整理笔记(十)

    Collapse 折叠面板源码: collapse.vue <template> <!--一组折叠面板最外层包裹div--> <div class="el-co ...