SolrCloud之搭建SolrCloud集群

搭建SOLRCLOUD集群

1.下载地址
    http://lucene.apache.org/solr/
 
2.运行demo 
 

(1)加压缩包并,将solr-4.9.0\example 文件件复制一份,cp -r example example2
(2)启动一个节点
cd example
java -Dbootstrap_confdir=./solr/collection1/conf -Dcollection.configName=myconf -DzkRun -DnumShards=2 -jar start.jar
 
-DzkRun参数是启动一个嵌入式的Zookeeper服务器,它会作为solr服务器的一部分
-Dbootstrap_confdir参数是上传本地的配置文件上传到zookeeper中去,作为整个集群共用的配置文件
-DnumShards指定了集群的逻辑分组数目
(3)启动另一个节点并加入Zookeeper集群
cd example2
java -Djetty.port=7574 -DzkHost=localhost:9983 -jar start.jar

-DzkHost=localhost:9983就是指明了Zookeeper集群所在位置
然后我们可以打开http://localhost:8983/solr/collection1/admin/zookeeper.jsp 或者http://localhost:8983/solr/#/cloud看看目前集群的状态
(4)索引一些文档,
cd exampledocs
java -Durl=http://localhost:8983/solr/collection1/update -jar post.jar ipod_video.xml
java -Durl=http://localhost:8983/solr/collection1/update -jar post.jar monitor.xml
java -Durl=http://localhost:8983/solr/collection1/update -jar post.jar mem.xml
(5)这个集群现在就具备容错性了,你可以试着干掉一个Solr服务器,然后再发送查询请求。
但是尽管solr服务器可以容忍挂掉,但集群中只有一个zookeeper服务器来维护集群的状态信息,单点的存在即是不稳定的根源。
如果这个zookeeper服务器挂了,那么分布式查询还是可以工作的,因为每个solr服务器都会在内存中维护最近一次由zookeeper维护的集群状态信息,
但新的节点无法加入集群,集群的状态变化也不可知了。因此,为了解决这个问题,需要对Zookeeper服务器也设置一个集群,让其也具备高可用性和容错性。
有两种方式可选,一种是提供一个外部独立的Zookeeper集群,另一种是每个solr服务器都启动一个内嵌的Zookeeper服务器,再将这些Zookeeper服务器组成一个集群。
 我们这里用后一种做示例:
 
增加两个节点
cp -r example exampleB
cp -r example2 example2B
 
cd exampleB
java -Djetty.port=8900 -DzkHost=localhost:9983 -jar start.jar
 
cd example2B
java -Djetty.port=7500 -DzkHost=localhost:9983 -jar start.jar
 
现在这个demo就比较完善了,下图就是全部配置完成后的状态
 
 
 
 

 
3.部署单个solr
(1)把solr包下面example/solr目录下面所有的文件都拷贝到  solr_home 目录下面
         [root@HTML5 solrhome]# cp -r solr-4.9.0/example/solr/* ./ 
 
         把solr包下面的 dist/solr-4.7.2.war 拷到 /data/solr_home目录下面
         [root@HTML5 solrhome]# cp solr-4.9.0/dist/solr-4.9.0.war ./ 
         [root@HTML5 solrhome]# mv solr-4.9.0.war solr.war 
            

(2)在Tomcat的 conf/Catalina/localhost 目录下面增加一个文件 solr.xml,内容如下:

         <?xml version="1.0" encoding="UTF8" ?>
<Context docBase="/usr/local/solrhome/solr.war" debug="0" crossContext="false" >
   <Environment name="solr/home"
    type="java.lang.String"
    value="/usr/local/solrhome"
    override="true" />
</Context>

(3)启动tomcat, webapps  下边多了解压出来的solr文件夹
          进入 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>/usr/local/solrhome</env-entry-value>

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

     </env-entry>    
(4)复制example/lib/ext下所有jar包到tomcat 的lib下
         [root@HTML5 lib]# cp /usr/local/solrhome/solr-4.9.0/example/lib/ext/* ./
        复制example/resources/log4j.properties  到solr/WEB-INF/classes
(5)启动tomcat,访问http://192.168.66.99:8080/solr/ 无法打开,检查异常:
         严重: Exception starting filter SolrRequestFilter
java.lang.UnsupportedClassVersionError: org/apache/solr/servlet/SolrDispatchFilt
er : Unsupported major.minor version 51.0 (unable to load class org.apache.solr.
servlet.SolrDispatchFilter)
        原来是 solr4.9版本是使用JDK1.7编译的, 要求运行环境JDK也是1.7以上
        修改完成后启动,报错如下:
        [localhost-startStop-1] ERROR org.apache.solr.core.SolrCore – null:org.apa
che.solr.common.SolrException: Found multiple cores with the name [collection1],
 with instancedirs [/usr/local/solrhome/solr-4.9.0/example/example-schemaless/so
lr/collection1/] and [/usr/local/solrhome/solr-4.9.0/example/solr/collection1/]
 
原来我解压solr后的文件夹放到了solhome下,后来又复制了example/solr/下的文件到solhome,
solr启动时会到  solrhome下检查所有文件夹,并加载core配置,结果solrhome下有两个collection1 core
所以 Found multiple cores with the name [collection1],删除solr-4.9.0文件夹即可,再次重启成功运行!
至此单个solr启动完成
 
4.solrcloud集群配置(在一台虚拟机上测试,生产环境同理)
(1)复制3个tomcat,分别配置环境变量及端口,分别为 tomcat-1 端口:8080     tomcat-2 端口:9080      tomcat-3端口:7080
(2)复制solrhome 分别为solrhome-1  solrhome-2  solrhome-3 
         并分别修改下面solr.xml,如下:(生产环境中,多台服务器不需要该步骤,直接复制即可)
        <solr>
  <solrcloud>
    <str name="host">192.168.66.99</str> // admin界面地址
    <int name="hostPort">7080</int>  // admin界面地址端口
    <str name="hostContext">/solr</str> // admin界面地址工程名(即tomcat下solr解压出的工程名)
    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
  </solrcloud>
 
  <shardHandlerFactory name="shardHandlerFactory"
    class="HttpShardHandlerFactory">
    <int name="socketTimeout">${socketTimeout:0}</int>
    <int name="connTimeout">${connTimeout:0}</int>
  </shardHandlerFactory>
 
</solr>
(3) 进入各个tomcat/webapps/ solr/WEB-INF/ 目录 下修改 web.xml,修改solrhome路径,参照上一节
(4) 进入各个tomcat/conf/Catalina/localhost 目录下修改solr.xml, 修改solrhome路径 ,参照上一节
(5) 进入各个tomcat/bin下修改catalina.sh 加入以下参数:
        JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=/usr/local/solr/solrhome-3 -DzkHost=127.0 .0.1:1181,127.0.0.1:2181,127.0.0.1:3181"
(6)上传配置文件到zookeeper集群中:
        java -classpath .:/usr/local/solr/solrhome-1/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 127.0.0.1:1181,127.0.0.1:2181,127.0.0.1:3181 -confdir /usr/local/solr/solrhome-1/conf  -confname solr-conf
        其中参数/usr/local/solr/solrhome-1/lib/可以自己创建,内容如下:
        复制 tomcat/webapps/ solr/WEB-INF/lib下所有jar包
         复制 example/lib/ext 下所有 jar
         复制 example/resources/log4j.properties
       zkhost 指明zookeeper集群地址
       confdir 指明配置文件目录 
       confname 配置文件名称
 
(7)将zookeeper中的配置文件与collection 联系起来(本步骤不清楚是否必须,待测试)
       java -classpath .:/usr/local/solr/solrhome-1/lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection core1 -confname solr-conf -zkhost 127.0.0.1:1181,127.0.0.1:2181,127.0.0.1:3181
(8)启动各个tomcat应用,集群配置完成! 使用任意一台应用都可以访问到控制台.           

 

你可能感兴趣的:(solrCloud)