一、所需环境

1、linux系统(内存分大点)

2、JDK

3、zookeeper

4、solr

二、安装zookeeper

1、此次安装3个zookeeper

2、tar -zxf zookeeper-3.4.6.tar.gz

3、/usr/local/目录下创建一个solrcloud目录。把zookeeper解压后的文件夹复制到此目录下三份。分别命名为zookeeper12、zookeeper3

4、

[root@bogon ~]# mkdir /usr/local/solrcloud

 

[root@bogon ~]# mv zookeeper-3.4.6 /usr/local/solrcloud/zookeeper1

 

[root@bogon ~]# cd /usr/local/solrcloud

 

[root@bogon solrcloud]# ll

 

[root@bogon solrcloud]# cp -r zookeeper1 zookeeper2

 

[root@bogon solrcloud]# cp -r zookeeper1  zookeeper3

5、在每个zookeeper文件夹下创建一个data目录,并在data文件夹下创建一个文件名称为myid,文件的内容就是此zookeeper的编号123。

 

[root@bogon data]# echo 1 >> myid

 

[root@bogon data]# cat myid

 

1

 

6、zookeeper23文件夹下分别创建data目录和myid文件

 

[root@bogon solrcloud]# mkdir zookeeper2/data

 

[root@bogon solrcloud]# echo 2 >> zookeeper2/data/myid

 

[root@bogon solrcloud]# cat zookeeper2/data/myid

 

2

 

[root@bogon solrcloud]# mkdir zookeeper3/data         

 

[root@bogon solrcloud]# echo 3 >> zookeeper3/data/myid 

 

7、zookeeper1conf目录下的zoo_sample.cfg文件复制一份改名为zoo.cfg

8、修改zoo.cfg的配置,其他的zookeeper的clientport递增1,反正不同就可以。

 

9、启动zookeeper./zkServer.sh start

关闭:./zkServer.sh stop

查看状态:./zkServer.sh status,其中的follower表示从节点,leader是主节点

[root@bogon solrcloud]# zookeeper1/bin/zkServer.sh status

JMX enabled by default

Using config: /usr/local/solrcloud/zookeeper1/bin/../conf/zoo.cfg

Mode: follower

[root@bogon solrcloud]# zookeeper2/bin/zkServer.sh status

JMX enabled by default

Using config: /usr/local/solrcloud/zookeeper2/bin/../conf/zoo.cfg

Mode: leader

[root@bogon solrcloud]# zookeeper3/bin/zkServer.sh status

JMX enabled by default

Using config: /usr/local/solrcloud/zookeeper3/bin/../conf/zoo.cfg

Mode: follower

 

10、建立四个tomcat,端口改为8080~8083,每个tomcat都配置好solr,也就是四个solr,solr的配置请参考http://www.cnblogs.com/honger/p/5876289.html,最后目录的结构是这样的

 

11、solrhome中的配置文件上传到zookeeper集群。使用solr里的zookeeper的客户端上传。这个客户端的位置在solr解压后的solr-6.2.0/server/scripts/cloud-scripts/里的一个叫zkcli.sh的sell脚本

12、在solr-6.2.0/server/scripts/cloud-scripts/目录下执行(注意,此时的zookeeper应当已经启动)./zkcli.sh -zkhost 192.168.243.128:2181,192.168.243.128:2182,192.168.243.128:2183 -cmd upconfig -confdir /usr/local/solrcloud/solrhome1/collection1/conf -confname myconf

 13、查看配置文件是否上传成功,先进入zookeeper1的bin文件夹使用以下命令:

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

Connecting to localhost:2181

[zk: localhost:2181(CONNECTED) 0] ls /

[configs, zookeeper]

[zk: localhost:2181(CONNECTED) 1] ls /configs

[myconf]

[zk: localhost:2181(CONNECTED) 2] ls /configs/myconf

[admin-extra.menu-top.html, currency.xml, protwords.txt, mapping-FoldToASCII.txt, _schema_analysis_synonyms_english.json, _rest_managed.json, solrconfig.xml, _schema_analysis_stopwords_english.json, stopwords.txt, lang, spellings.txt, mapping-ISOLatin1Accent.txt, admin-extra.html, xslt, synonyms.txt, scripts.conf, update-script.js, velocity, elevate.xml, admin-extra.menu-bottom.html, clustering, schema.xml]

[zk: localhost:2181(CONNECTED) 3]

如果可以看到solr的配置文件在,那就说明上传成功了。

14、修改每个solrhome下的solr.xml文件,指定当前实例运行的ip地址及端口号8080~8083。

 

 15、修改每一台solrtomcat bin目录下catalina.sh文件中加入DzkHost指定zookeeper服务器地址: 

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

 JAVA_OPTS使用vim编辑器的查找功能找到修改。

16、启动所有的tomcat,访问其中一台tomcat,只有一片集群

 

17、变成多片集群,在你的浏览器中访问

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

 

 

18、删除collection1,在浏览器中输入

http://192.168.243.128:8080/solr/admin/collections?action=DELETE&name=collection1,出现success表示成功。

 

 

三、使用java代码访问solr集群。

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
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;

public class SolrCloudTest {

    @Test
    public void test1() throws Exception {
        // 使用zookeeper的地址访问
        String zkHost = "192.168.243.128:2181,192.168.243.128:2182,192.168.243.128:2183";
        // 创建集群客户端
        CloudSolrClient cloudSolrClient = new CloudSolrClient.Builder().withZkHost(zkHost).build();
        // 设置默认的索引库
        cloudSolrClient.setDefaultCollection("collection2");
        // 设置document
        SolrInputDocument document = new SolrInputDocument();
        // 创建这个document的结构
        document.addField("id", "test001");
        document.addField("name", "test");
        // 添加内容
        cloudSolrClient.add(document);
        // 提交
        cloudSolrClient.commit();
    }

    @Test
    public void delDocument() throws Exception {
        // 使用zookeeper的地址访问
        String zkHost = "192.168.243.128:2181,192.168.243.128:2182,192.168.243.128:2183";
        
        CloudSolrClient cloudSolrClient = new CloudSolrClient.Builder().withZkHost(zkHost).build();
    
        cloudSolrClient.setDefaultCollection("collection2");
        
        cloudSolrClient.deleteByQuery("*:*");
        
        cloudSolrClient.commit();
        
    }
    
    @Test
    public void query() throws Exception {
        // 使用zookeeper的地址访问
        String zkHost = "192.168.243.128:2181,192.168.243.128:2182,192.168.243.128:2183";
        
        CloudSolrClient cloudSolrClient = new CloudSolrClient.Builder().withZkHost(zkHost).build();
    
        cloudSolrClient.setDefaultCollection("collection2");
        
        SolrQuery query = new SolrQuery();
        
        query.setQuery("*:*");
        
        QueryResponse queryResponse = cloudSolrClient.query(query);
        
        SolrDocumentList list = queryResponse.getResults();
        
        for (SolrDocument solrDocument : list) {
            String name = (String) solrDocument.get("name");
            System.out.println(name);
        }
        
        
        cloudSolrClient.commit();
        
    }

}

运行test1()后看查看到