solr集群

需要实现的solr集群架构

这里写图片描述

Zookeeper作为集群的管理工具。
1、集群管理:容错、负载均衡。
2、配置文件的集中管理
3、集群的入口

需要实现zookeeper 高可用。需要搭建集群。建议是奇数节点。需要三个zookeeper服务器。

搭建solr集群需要7台服务器。

搭建伪分布式:
需要三个zookeeper节点
需要四个tomcat节点。

建议虚拟机的内容1G以上。


Zookeeper集群搭建

第一步:需要安装jdk环境。
第二步:把zookeeper的压缩包上传到服务器。
第三步:解压缩。
第四步:把zookeeper复制三份。

[root@localhost ~]# mkdir /usr/local/solr-cloud
[root@localhost ~]# cp -r zookeeper-3.4.6 /usr/local/solr-cloud/zookeeper01
[root@localhost ~]# cp -r zookeeper-3.4.6 /usr/local/solr-cloud/zookeeper02
[root@localhost ~]# cp -r zookeeper-3.4.6 /usr/local/solr-cloud/zookeeper03

这里写图片描述
这里写图片描述

第五步:在每个zookeeper目录下创建一个data目录。
第六步:在data目录下创建一个myid文件,文件名就叫做“myid”。内容就是每个实例的id。

[root@123 zookeeper1]# mkdir data
[root@123 data]# touch myid

在文件中写数字1,其他服务器写其他的数字

[root@123 data]# vim myid

//也可以这样,把输出写到这个文件下面

扫描二维码关注公众号,回复: 2506542 查看本文章
[root@123 zookeeper2]# eacho 2 > data/myid

这里写图片描述
这里写图片描述
这里写图片描述

第七步:修改配置文件。把conf目录下的zoo_sample.cfg文件改名为zoo.cfg
1.在conf文件夹里面的zoo_sample.cfg 改成 zoo.cfg

  • [root@123 conf]# cp -r zoo_sample.cfg zoo.cfg
  • [root@123 conf]# rm -rf zoo_sample.cfg
    这里写图片描述

2.zoo.cfg修改配置文件
这里写图片描述

//2881 节点通信的端口,3881 节点投票端口
server.1=192.168.25.154:2881:3881
server.2=192.168.25.154:2882:3882
server.3=192.168.25.154:2883:3883

其他的同上

第八步:启动每个zookeeper实例。
启动bin/zkServer.sh start
1.创建一个启动脚本
[root@123 solr-cloud]# vim start-all.sh

cd zookeeper1/bin
./zkServer.sh start
cd ../../
cd zookeeper2/bin
./zkServer.sh start
cd ../../
cd zookeeper3/bin
./zkServer.sh start
cd ../../
cd zookeeper1/bin
./zkServer.sh stop
cd ../../
cd zookeeper2/bin
./zkServer.sh stop
cd ../../
cd zookeeper3/bin
./zkServer.sh stop
cd ../../

2.修改权限
[root@123 solr-cloud]# chmod u+x start-all.sh

查看zookeeper的状态:
bin/zkServer.sh status


Solr集群的搭建

第一步:创建四个tomcat实例。每个tomcat运行在不同的端口。8180、8280、8380、8480
1.[root@123 solr-cloud]# vim tomcat1/conf/server.xml
2.修改所有的端口号
这里写图片描述
这里写图片描述

第二步:部署solr的war包。把单机版的solr工程复制到集群中的tomcat中。
第三步:为每个solr实例创建一个对应的solrhome。使用单机版的solrhome复制四份。
第四步:需要修改solr的web.xml文件。把solrhome关联起来。

[root@123 solr-cloud]# vim tomcat1/webapps/solr/WEB-INF/web.xml    

这里写图片描述

第五步:配置solrCloud相关的配置。每个solrhome下都有一个solr.xml,把其中的tomcat ip及端口号配置好。
这里写图片描述

第六步:修改tomcat/bin目录下的catalina.sh 文件,关联solr和zookeeper。把此配置添加到配置文件中:

JAVA_OPTS="-DzkHost=192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"

第七步:让zookeeper统一管理配置文件。需要把solrhome/collection1/conf目录上传到zookeeper。上传任意solrhome中的配置文件即可。
这里写图片描述
使用工具上传配置文件:/root/solr-4.10.3/example/scripts/cloud-scripts/zkcli.sh

./zkcli.sh -zkhost 192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/collection1/conf -confname myconf

查看zookeeper上的配置文件:
使用zookeeper目录下的bin/zkCli.sh命令查看zookeeper上的配置文件:

[root@localhost bin]# ./zkCli.sh 

查看指定的ip和端口

[root@123 bin]# ./zkCli.sh -server 192.168.31.61:2182

查看配置文件

[zk: localhost:2181(CONNECTED) 0] ls /
[configs, zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /configs
[myconf]
[zk: localhost:2181(CONNECTED) 2] ls /configs/myconf

这里写图片描述

退出:

[zk: localhost:2181(CONNECTED) 3] quit

这里写图片描述

第八步:启动每个tomcat实例。要包装zookeeper集群是启动状态。
第九步:访问集群
这里写图片描述

第十步:创建新的Collection进行分片处理。
name=collection2&numShards=2&replicationFactor=2 – 名字叫collection2,分成两片,每片两个机子,在浏览器中直接使用

http://192.168.25.154:8180/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2

这里写图片描述
这里写图片描述

第十一步:删除不用的Collection。

http://192.168.25.154:8180/solr/admin/collections?action=DELETE&name=collection1

这里写图片描述
这里写图片描述


使用solrJ操作集群

package cn.test.solrJTest;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.CloudSolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test;

/**
 * solrJ使用集群方法
 * @author yuhf
 *
 */
public class SolrJCloud {

    /**
     * 添加
     * @throws Exception
     * @Test
     */

    public void testAddDocument() throws Exception {
        //创建一个集群的连接,应该使用CloudSolrServer创建。
        CloudSolrServer solrServer = new CloudSolrServer("192.168.31.61:2181,192.168.31.61:2182,192.168.31.61:2183");
        //zkHost:zookeeper的地址列表
        //设置一个defaultCollection属性。
        solrServer.setDefaultCollection("collection2");
        //创建一个文档对象
        SolrInputDocument document = new SolrInputDocument();
        //向文档中添加域
        document.setField("id", "solrcloud01");
        document.setField("item_title", "测试商品01");
        document.setField("item_price", 123);
        //把文件写入索引库
        solrServer.add(document);
        //提交
        solrServer.commit();

    }

    /**
     * 查询
     * @throws Exception
     * @Test
     */

    public void testQueryDocument() throws Exception {
        //创建一个CloudSolrServer对象
        CloudSolrServer cloudSolrServer = new CloudSolrServer("192.168.31.61:2181,192.168.31.61:2182,192.168.31.61:2183");
        //设置默认的Collection
        cloudSolrServer.setDefaultCollection("collection2");
        //创建一个查询对象
        SolrQuery query = new SolrQuery();
        //设置查询条件
        query.setQuery("*:*");
        //执行查询
        QueryResponse queryResponse = cloudSolrServer.query(query);
        //取查询结果
        SolrDocumentList solrDocumentList = queryResponse.getResults();
        System.out.println("总记录数:" + solrDocumentList.getNumFound());
        //打印
        for (SolrDocument solrDocument : solrDocumentList) {
            System.out.println(solrDocument.get("id"));
            System.out.println(solrDocument.get("title"));
            System.out.println(solrDocument.get("item_title"));
            System.out.println(solrDocument.get("item_price"));
        }
    }

    /**
     * 删除
     * @throws Exception
     * 
     */
    @Test
    public void delect() throws Exception{

        //创建一个CloudSolrServer对象
        //org.apache.solr.client.solrj.impl.CloudSolrServer
        CloudSolrServer cloudSolrServer = new CloudSolrServer("192.168.31.61:2181,192.168.31.61:2182,192.168.31.61:2183");
        //设置默认的Collection
        cloudSolrServer.setDefaultCollection("collection2");
        //删除文档
        //solrServer.deleteById("doc01");
        //这个是根据属性删除,两个是一样的
        cloudSolrServer.deleteByQuery("*:*");
        //提交
        cloudSolrServer.commit();
    }
}

使用spring配置

<!--  添加一个bean httpSolrServer 这个是子类  SolrServer是父类  这个是单机版-->
    <!--
    <bean id="httpSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
        <constructor-arg name="baseURL" value="http://192.168.31.61:8080/solr/collection1"></constructor-arg>
    </bean>
      -->
      <!-- 集群版配置 -->
      <bean id="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
        <constructor-arg name="zkHost" value="192.168.31.61:2181,192.168.31.61:2182,192.168.31.61:2183"></constructor-arg>
        <property name="defaultCollection" value="collection2"></property>
      </bean>


在其感谢黑马资料,有很多借鉴黑马资料

猜你喜欢

转载自blog.csdn.net/yuhaifei_123/article/details/79338589